diff --git a/inventory_provider/config.py b/inventory_provider/config.py index ac25ad76483abc8b64d956c9790fab0211c9eaef..73b04a86f5c10d5c7a24890508fb3a7902ec9783 100644 --- a/inventory_provider/config.py +++ b/inventory_provider/config.py @@ -44,44 +44,40 @@ CONFIG_SCHEMA = { "required": ["hostname", "port"], "additionalProperties": False }, + "sentinel": { + "type": "object", + "properties": { + "hostname": {"type": "string"}, + "port": {"type": "integer"}, + "name": {"type": "string"} + }, + "required": ["hostname", "port"], + "additionalProperties": False + }, "junosspace": { "api": {"type": "string"}, "username": {"type": "string"}, "password": {"type": "string"} - }, - "infinera-dna": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": {"type": "string"}, - "address": {"type": "string"} - }, - "required": ["name", "address"], - "additionalProperties": False - } - }, - "coriant-tnms": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": {"type": "string"}, - "address": {"type": "string"} - }, - "required": ["name", "address"], - "additionalProperties": False - } } }, - "required": [ - "ops-db", - "oid_list.conf", - "ssh", - "redis", - "junosspace", - "infinera-dna", - "coriant-tnms"], + "oneOf": [ + { + "required": [ + "ops-db", + "oid_list.conf", + "ssh", + "redis", + "junosspace"] + }, + { + "required": [ + "ops-db", + "oid_list.conf", + "ssh", + "sentinel", + "junosspace"] + } + ], "additionalProperties": False } diff --git a/inventory_provider/logging_default_config.json b/inventory_provider/logging_default_config.json index 38f4e61c5e489ccbac2d3a76d4d7354b33fea4ed..ba8b87a7eda0d22d2170b042d740da833c5daac4 100644 --- a/inventory_provider/logging_default_config.json +++ b/inventory_provider/logging_default_config.json @@ -46,7 +46,7 @@ "loggers": { "inventory_provider": { - "level": "INFO", + "level": "DEBUG", "handlers": ["console", "syslog_handler"], "propagate": false }, diff --git a/inventory_provider/routes/common.py b/inventory_provider/routes/common.py index 9e99eb348be42952cb508aa99cba389ef9f8839c..fa172830bf612590cbc86f0f1d10945428390b8b 100644 --- a/inventory_provider/routes/common.py +++ b/inventory_provider/routes/common.py @@ -2,7 +2,7 @@ import functools import logging from flask import request, Response, current_app, g -import redis +from inventory_provider.tasks.common import get_redis as tasks_get_redis logger = logging.getLogger(__name__) @@ -10,10 +10,7 @@ logger = logging.getLogger(__name__) def get_redis(): if 'redis_db' not in g: config = current_app.config['INVENTORY_PROVIDER_CONFIG'] - g.redis_db = redis.StrictRedis( - host=config['redis']['hostname'], - port=config['redis']['port']) - + g.redis_db = tasks_get_redis(config) return g.redis_db diff --git a/inventory_provider/routes/testing.py b/inventory_provider/routes/testing.py index 75d0074fa438e066e2b2121c254be47803dfe769..5362f4a9fe7737a850d8f1ca3d594b8c91c90a55 100644 --- a/inventory_provider/routes/testing.py +++ b/inventory_provider/routes/testing.py @@ -2,7 +2,7 @@ import collections import json import re -from flask import Blueprint, Response, current_app, jsonify +from flask import Blueprint, Response, jsonify from lxml import etree from inventory_provider import juniper @@ -42,22 +42,6 @@ def update_interface_statuses(): return Response('OK') -@routes.route("infinera-dna-addresses", methods=['GET', 'POST']) -@common.require_accepts_json -def infinera_addresses(): - infinera_config = current_app.config[ - "INVENTORY_PROVIDER_CONFIG"]["infinera-dna"] - return jsonify([dna['address'] for dna in infinera_config]) - - -@routes.route("coriant-tnms-addresses", methods=['GET', 'POST']) -@common.require_accepts_json -def coriant_addresses(): - coriant_config = current_app.config[ - "INVENTORY_PROVIDER_CONFIG"]["coriant-tnms"] - return jsonify([tnms['address'] for tnms in coriant_config]) - - @routes.route("juniper-server-addresses", methods=['GET', 'POST']) @common.require_accepts_json def juniper_addresses(): diff --git a/inventory_provider/tasks/common.py b/inventory_provider/tasks/common.py index 342408350aaa5a0310f2f961648712e6af9fc958..2a965e12c3df763825ce7e234fc1a46edb0361fa 100644 --- a/inventory_provider/tasks/common.py +++ b/inventory_provider/tasks/common.py @@ -1,7 +1,17 @@ import redis +import redis.sentinel def get_redis(config): - return redis.StrictRedis( - host=config['redis']['hostname'], - port=config['redis']['port']) + if 'sentinel' in config: + sentinel = redis.sentinel.Sentinel([( + config['sentinel']['hostname'], + config['sentinel']['port'])], + socket_timeout=0.1) + return sentinel.master_for( + config['sentinel']['name'], + socket_timeout=0.1) + else: + return redis.StrictRedis( + host=config['redis']['hostname'], + port=config['redis']['port']) diff --git a/inventory_provider/tasks/config.py b/inventory_provider/tasks/config.py index 9e59a19335b81715406ef31c9acec14e81158909..846a2c2134d31ae1ab635fa277a95fe92606b57e 100644 --- a/inventory_provider/tasks/config.py +++ b/inventory_provider/tasks/config.py @@ -1,3 +1,4 @@ +import json from os import getenv broker_url = getenv( @@ -6,4 +7,13 @@ broker_url = getenv( result_backend = getenv( 'CELERY_BROKER_URL', default='redis://test-dashboard02.geant.org:6379/1') + +tmp_options = getenv( + 'BROKER_TRANSPORT_OPTIONS', + default='') +if tmp_options: + broker_transport_options = json.loads(tmp_options) +else: + broker_transport_options = {} + task_eager_propagates = True diff --git a/test/conftest.py b/test/conftest.py index 94640bff7fd0da534938314a00ea55d1b9528513..8f13ecf8fbeabe328e79704d35fe3917f9209e34 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -44,17 +44,7 @@ def data_config_filename(tmp_dir_name): "api": "bogus-url", "username": "bogus-username", "password": "bogus-password" - }, - "infinera-dna": [ - {"name": "name1", "address": "123.456.789.0"}, - {"name": "name2", "address": "012.345.678.9"}, - {"name": "name3", "address": "111.222.333.000"} - ], - "coriant-tnms": [ - {"name": "name1", "address": "123.456.789.0"}, - {"name": "name2", "address": "012.345.678.9"}, - {"name": "name3", "address": "111.222.333.000"} - ] + } } shutil.copyfile( @@ -157,7 +147,7 @@ def app_config(): def client(app_config, mocker): mocker.patch( - 'inventory_provider.routes.common.redis.StrictRedis', + 'inventory_provider.tasks.common.redis.StrictRedis', MockedRedis) os.environ["SETTINGS_FILENAME"] = app_config @@ -166,19 +156,15 @@ def client(app_config, mocker): @pytest.fixture -def client_with_mocked_data(client, mocker): - +def mocked_redis(mocker): mocker.patch( - 'inventory_provider.routes.common.redis.StrictRedis', + 'inventory_provider.tasks.common.redis.StrictRedis', MockedRedis) - return client @pytest.fixture -def mocked_redis(mocker): - mocker.patch( - 'inventory_provider.routes.common.redis.StrictRedis', - MockedRedis) +def client_with_mocked_data(client, mocked_redis): + return client NETIFACES_TEST_DATA_STRING = """{ diff --git a/test/test_testing_routes.py b/test/test_testing_routes.py index 2ab4bd1930514a772f5d7b5f97b265dbe4c3f7ee..85879057bf995d336f90a7bb46327ebf71685b67 100644 --- a/test/test_testing_routes.py +++ b/test/test_testing_routes.py @@ -18,26 +18,6 @@ def test_flushdb(client): assert rv.status_code == 200 -def test_infinera_addresses(client): - rv = client.post( - "/testing/infinera-dna-addresses", - headers=DEFAULT_REQUEST_HEADERS) - assert rv.status_code == 200 - jsonschema.validate( - json.loads(rv.data.decode("utf-8")), - ROUTER_LIST_SCHEMA) - - -def test_coriant_addresses(client): - rv = client.post( - "/testing/coriant-tnms-addresses", - headers=DEFAULT_REQUEST_HEADERS) - assert rv.status_code == 200 - jsonschema.validate( - json.loads(rv.data.decode("utf-8")), - ROUTER_LIST_SCHEMA) - - def test_juniper_addresses(client): rv = client.post( "/testing/juniper-server-addresses",