diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fe15468ac5ab845a066b938bbc85a44aacd0523c --- /dev/null +++ b/README.md @@ -0,0 +1,145 @@ + +1. [Inventory Provider] + 1. [Overview] + 2. [Configuration] + 3. [Running this module] + 4. [Protocol specification] + + +# Inventory Provider + + +## Overview + +This module implements a Flask-based webservice which +provides some access to GÉANT network router inventory +information. + +The webservice is communicates with clients over HTTP. +Responses to valid requests are returned as JSON messages. +The server will therefore return an error unless +`application/json` is in the `Accept` request header field. + +HTTP communication and JSON grammar details are +beyond the scope of this document. +Please refer to [RFC 2616](https://tools.ietf.org/html/rfc2616) +and www.json.org for more details. + + +## Configuration + +Several configuration files must be provided when launching +the web service. + +The runtime-accessible filename of the first configuration file +must be stored in the environment variable +`SETTINGS_FILENAME`. + +The configuration file is python and defines a single variable. +The following is an example: + +```python +INVENTORY_PROVIDER_CONFIG_FILENAME = "/somepath/config.json" +``` + +- `INVENTORY_PROVIDER_CONFIG_FILENAME`: run-time accessible filename +of a json file containing the server configuration parameters. This file +must be formatted according to the following json schema: + + ```json + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "alarms-db": { + "type": "object", + "properties": { + "hostname": {"type": "string"}, + "dbname": {"type": "string"}, + "username": {"type": "string"}, + "password": {"type": "string"} + }, + "required": ["hostname", "dbname", "username", "password"], + "additionalProperties": False + }, + "oid_list.conf": {"type": "string"}, + "routers_community.conf": {"type": "string"}, + "ssh": { + "type": "object", + "properties": { + "private-key": {"type": "string"}, + "known-hosts": {"type": "string"} + }, + "required": ["private-key", "known-hosts"], + "additionalProperties": False + }, + "redis": { + "type": "object", + "properties": { + "hostname": {"type": "string"}, + "port": {"type": "integer"} + }, + "required": ["hostname", "port"], + "additionalProperties": False + } + }, + "required": [ + "alarms-db", + "oid_list.conf", + "routers_community.conf", + "ssh", + "redis"], + "additionalProperties": False + } + ``` + + +## Running this module + +This module has been tested in the following execution environments: + +- As an embedded Flask application. +For example, the application could be launched as follows: + +```bash +$ export FLASK_APP=app.py +$ export SETTINGS_FILENAME=settings.cfg +$ flask run +``` + +- As an Apache/`mod_wsgi` service. + - Details of Apache and `mod_wsgi` +configuration are beyond the scope of this document. + + +## protocol specification + +The following resources can be requested from the webservice. + +### synchronous resources + +* `/data/version` + + The response will be a JSON message formatted object + containing the module and protocol versions of the + running server and will be formatted as follows: + + ```json + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "api": { + "type": "string", + "pattern": r'\d+\.\d+' + }, + "module": { + "type": "string", + "pattern": r'\d+\.\d+' + } + }, + "required": ["api", "module"], + "additionalProperties": False + } + ``` +