From 98c3ac7c859e34fe60d061b9ca591aba429e4118 Mon Sep 17 00:00:00 2001 From: Koren Lev Date: Mon, 18 Dec 2017 19:16:16 +0200 Subject: [PATCH] release 1.2 + new tagging Change-Id: I1e876451ec4a330f458dd57adadb15e39969b225 Signed-off-by: Koren Lev --- app/api/responders/resource/clique_types.py | 140 +- app/api/responders/resource/environment_configs.py | 76 +- app/api/responders/responder_base.py | 6 +- app/api/validation/data_validate.py | 4 +- app/config/link_finders.json | 3 +- app/config/scanners.json | 25 +- app/connection_test/connection_test.py | 283 ----- app/discover/clique_finder.py | 138 +- app/discover/event_manager.py | 4 +- app/discover/fetchers/api/api_access.py | 61 +- .../fetchers/api/api_fetch_host_instances.py | 2 +- .../fetchers/api/api_fetch_project_hosts.py | 44 +- app/discover/fetchers/api/api_fetch_regions.py | 2 +- app/discover/fetchers/db/db_access.py | 29 +- app/discover/fetchers/kube/__init__.py | 9 + app/discover/fetchers/kube/kube_access.py | 28 + .../fetchers/kube/kube_fetch_namespaces.py | 32 + app/discover/link_finders/find_implicit_links.py | 128 ++ app/discover/link_finders/find_links.py | 3 + .../link_finders/find_links_for_instance_vnics.py | 2 + app/discover/scan_manager.py | 125 +- app/discover/scan_metadata_parser.py | 28 +- app/discover/scanner.py | 21 +- app/install/calipso-installer.py | 21 +- app/install/db/clique_types.json | 26 + app/install/db/constants.json | 33 + app/install/db/environments_config.json | 94 +- app/install/db/monitoring_config_templates.json | 51 + app/install/db/supported_environments.json | 15 + .../checks/check_instance_communictions.py | 85 ++ app/monitoring/checks/check_vconnector.py | 50 + app/monitoring/handlers/handle_vconnector.py | 28 + app/monitoring/handlers/monitor.py | 83 +- .../handlers/monitoring_check_handler.py | 4 +- app/monitoring/setup/monitoring_check_handler.py | 15 +- app/monitoring/setup/monitoring_host.py | 11 +- app/monitoring/setup/monitoring_instance.py | 67 + app/monitoring/setup/monitoring_setup_manager.py | 4 + app/monitoring/setup/monitoring_vconnector.py | 24 + app/monitoring/setup/sensu_client_installer.py | 158 +++ .../responders_test/resource/test_clique_types.py | 108 +- .../resource/test_environment_configs.py | 311 ++--- app/test/api/responders_test/test_data/base.py | 71 +- .../api/responders_test/test_data/clique_types.py | 201 ++- .../test_data/environment_configs.py | 6 +- app/test/api/test_base.py | 28 +- app/test/fetch/api_fetch/test_api_access.py | 73 +- .../api_fetch/test_api_fetch_project_hosts.py | 43 +- .../test_data/api_fetch_host_project_hosts.py | 21 + app/test/fetch/link_finders/__init__.py | 9 + app/test/fetch/link_finders/test_data/__init__.py | 9 + .../test_data/test_find_implicit_links.py | 303 +++++ .../fetch/link_finders/test_find_implicit_links.py | 107 ++ app/test/scan/test_data/configurations.py | 1 + app/test/scan/test_data/scanner.py | 13 + app/test/scan/test_scan_metadata_parser.py | 2 + app/test/scan/test_scanner.py | 8 +- app/test/verify.sh | 4 + app/utils/api_access_base.py | 51 + app/utils/inventory_mgr.py | 26 +- app/utils/mongo_access.py | 6 +- app/utils/ssh_connection.py | 6 +- app/utils/util.py | 9 +- docs/_static/favicon.ico | Bin 15086 -> 0 bytes docs/_static/my-styles.css | 33 - docs/_static/opnfv-logo.png | Bin 2829 -> 0 bytes docs/conf.py | 282 ----- .../apex-scenario-guide.rst | 0 docs/index.rst | 12 - docs/release/Calipso-usage-stories.rst | 446 +++++++ docs/release/admin-guide.rst | 16 +- docs/release/apex-scenario-guide.rst | 282 +++++ docs/release/developer-guide.pdf | Bin 0 -> 252310 bytes docs/release/developer-guide.rst | 1338 ++++++++++++++++++++ docs/release/index.rst | 20 - docs/release/media/image101.png | Bin 0 -> 119090 bytes docs/release/media/image102.png | Bin 0 -> 104849 bytes docs/release/media/image103.png | Bin 0 -> 10664 bytes docs/release/media/image104.png | Bin 0 -> 37854 bytes docs/release/media/image105.png | Bin 0 -> 23555 bytes docs/release/media/image106.png | Bin 0 -> 58686 bytes docs/release/media/image107.png | Bin 0 -> 89583 bytes .../scenarios/os-nosdn-calipso-noha/index.rst | 15 - 83 files changed, 4563 insertions(+), 1259 deletions(-) delete mode 100644 app/connection_test/connection_test.py create mode 100644 app/discover/fetchers/kube/__init__.py create mode 100644 app/discover/fetchers/kube/kube_access.py create mode 100644 app/discover/fetchers/kube/kube_fetch_namespaces.py create mode 100644 app/discover/link_finders/find_implicit_links.py create mode 100644 app/monitoring/checks/check_instance_communictions.py create mode 100644 app/monitoring/checks/check_vconnector.py create mode 100644 app/monitoring/handlers/handle_vconnector.py create mode 100644 app/monitoring/setup/monitoring_instance.py create mode 100644 app/monitoring/setup/monitoring_vconnector.py create mode 100644 app/monitoring/setup/sensu_client_installer.py create mode 100644 app/test/fetch/link_finders/__init__.py create mode 100644 app/test/fetch/link_finders/test_data/__init__.py create mode 100644 app/test/fetch/link_finders/test_data/test_find_implicit_links.py create mode 100644 app/test/fetch/link_finders/test_find_implicit_links.py create mode 100644 app/utils/api_access_base.py delete mode 100755 docs/_static/favicon.ico delete mode 100644 docs/_static/my-styles.css delete mode 100644 docs/_static/opnfv-logo.png delete mode 100644 docs/conf.py rename docs/{release/scenarios/os-nosdn-calipso-noha => development}/apex-scenario-guide.rst (100%) delete mode 100644 docs/index.rst create mode 100644 docs/release/Calipso-usage-stories.rst create mode 100644 docs/release/apex-scenario-guide.rst create mode 100644 docs/release/developer-guide.pdf create mode 100644 docs/release/developer-guide.rst delete mode 100644 docs/release/index.rst create mode 100644 docs/release/media/image101.png create mode 100644 docs/release/media/image102.png create mode 100644 docs/release/media/image103.png create mode 100644 docs/release/media/image104.png create mode 100644 docs/release/media/image105.png create mode 100644 docs/release/media/image106.png create mode 100644 docs/release/media/image107.png delete mode 100644 docs/release/scenarios/os-nosdn-calipso-noha/index.rst diff --git a/app/api/responders/resource/clique_types.py b/app/api/responders/resource/clique_types.py index ff42f8c..e2e9e71 100644 --- a/app/api/responders/resource/clique_types.py +++ b/app/api/responders/resource/clique_types.py @@ -21,31 +21,53 @@ class CliqueTypes(ResponderBase): "focal_point_type": True, "link_types": True, "environment": True, - "name": True + "name": True, + "distribution": True, + "distribution_version": True, + "mechanism_drivers": True, + "type_drivers": True, + "use_implicit_links": True } RESERVED_NAMES = ["ANY"] + def __init__(self): + super().__init__() + self.focal_point_types = self.get_constants_by_name("object_types") + self.link_types = self.get_constants_by_name("link_types") + self.mechanism_drivers = self.get_constants_by_name("mechanism_drivers") + self.type_drivers = self.get_constants_by_name("type_drivers") + def on_get(self, req, resp): self.log.debug("Getting clique types") filters = self.parse_query_params(req) - focal_point_types = self.get_constants_by_name("object_types") - link_types = self.get_constants_by_name("link_types") filters_requirements = { - 'env_name': self.require(str, mandatory=True), + 'env_name': self.require(str), 'id': self.require(ObjectId, convert_to_type=True), + 'distribution': self.require(str), + 'distribution_version': self.require(str), + 'mechanism_drivers': self.require(str, + validate=DataValidate.LIST, + requirement=self.mechanism_drivers), + 'type_drivers': self.require(str, + validate=DataValidate.LIST, + requirement=self.type_drivers), 'focal_point_type': self.require(str, validate=DataValidate.LIST, - requirement=focal_point_types), + requirement=self.focal_point_types), 'link_type': self.require([list, str], validate=DataValidate.LIST, - requirement=link_types), + requirement=self.link_types), 'name': self.require(str), 'page': self.require(int, convert_to_type=True), 'page_size': self.require(int, convert_to_type=True) } self.validate_query_data(filters, filters_requirements) + if 'distribution_version' in filters and 'distribution' not in filters: + self.bad_request("Distribution version without distribution " + "is not allowed") + page, page_size = self.get_pagination(filters) query = self.build_query(filters) if self.ID in query: @@ -64,40 +86,46 @@ class CliqueTypes(ResponderBase): error, clique_type = self.get_content_from_request(req) if error: self.bad_request(error) - focal_point_types = self.get_constants_by_name("object_types") - link_types = self.get_constants_by_name("link_types") + clique_type_requirements = { - 'environment': self.require(str, mandatory=True), + 'environment': self.require(str), 'focal_point_type': self.require(str, mandatory=True, validate=DataValidate.LIST, - requirement=focal_point_types), + requirement=self.focal_point_types), 'link_types': self.require(list, mandatory=True, validate=DataValidate.LIST, - requirement=link_types), - 'name': self.require(str, mandatory=True) + requirement=self.link_types), + 'name': self.require(str, mandatory=True), + 'distribution': self.require(str), + 'distribution_version': self.require(str), + 'mechanism_drivers': self.require(str, + validate=DataValidate.LIST, + requirement=self.mechanism_drivers), + 'type_drivers': self.require(str, + validate=DataValidate.LIST, + requirement=self.type_drivers), + 'use_implicit_links': self.require(bool) } self.validate_query_data(clique_type, clique_type_requirements) - - env_name = clique_type['environment'] - if not self.check_environment_name(env_name): - self.bad_request("Unknown environment: {}".format(env_name)) - elif env_name.upper() in self.RESERVED_NAMES: - self.bad_request("Environment name '{}' is reserved".format(env_name)) + self.validate_required_fields(clique_type) + self.validate_focal_point_type(clique_type) + self.validate_duplicate_configuration(clique_type) self.write(clique_type, self.COLLECTION) self.set_successful_response(resp, - {"message": "created a new clique_type " - "for environment {0}" - .format(env_name)}, + {"message": "created a new clique_type"}, "201") def build_query(self, filters): query = {} - filters_keys = ['name', 'focal_point_type'] + filters_keys = ['name', 'focal_point_type', + 'distribution', 'distribution_version', + 'mechanism_drivers', 'type_drivers'] self.update_query_with_filters(filters, filters_keys, query) + link_types = filters.get('link_type') if link_types: if type(link_types) != list: @@ -107,5 +135,71 @@ class CliqueTypes(ResponderBase): if _id: query[self.ID] = _id - query['environment'] = filters['env_name'] + env_name = filters.get('env_name') + if env_name: + query['environment'] = filters['env_name'] return query + + def validate_required_fields(self, clique_type): + env_name = clique_type.get('environment') + distribution = clique_type.get('distribution') + distribution_version = clique_type.get('distribution_version') + if distribution_version and not distribution: + self.bad_request("Distribution version without distribution " + "is not allowed") + + configuration_specified = ((distribution and distribution_version) + or clique_type.get('mechanism_drivers') + or clique_type.get('type_drivers')) + if env_name: + if configuration_specified: + self.bad_request("Either environment or configuration " + "should be specified (not both).") + + if not self.check_environment_name(env_name): + self.bad_request("Unknown environment: {}".format(env_name)) + elif env_name.upper() in self.RESERVED_NAMES: + self.bad_request( + "Environment name '{}' is reserved".format(env_name)) + elif not configuration_specified: + self.bad_request("Either environment or configuration " + "should be specified.") + + def validate_focal_point_type(self, clique_type): + focal_point_type = clique_type['focal_point_type'] + environment = clique_type.get('environment') + if environment: + env_match = self.read( + matches={"environment": environment, + "focal_point_type": focal_point_type}, + collection="clique_types" + ) + if env_match: + self.bad_request("Clique type with focal point {} " + "is already registered for environment {}" + .format(focal_point_type, environment)) + else: + pass + + def validate_duplicate_configuration(self, clique_type): + if clique_type.get('environment'): + return + + search = {'focal_point_type': clique_type['focal_point_type']} + for field in ['distribution', 'mechanism_drivers', 'type_drivers']: + value = clique_type.get(field) + if value: + search[field] = value + if field == 'distribution': + dv = clique_type.get('distribution_version') + if dv: + search['distribution_version'] = dv + # Got a match with higher score, no need to look further + break + + env_match = self.read(matches=search, + collection="clique_types") + if env_match: + self.bad_request("Clique type with configuration '{}' " + "is already registered" + .format(search)) diff --git a/app/api/responders/resource/environment_configs.py b/app/api/responders/resource/environment_configs.py index c24aec8..76cc8a9 100644 --- a/app/api/responders/resource/environment_configs.py +++ b/app/api/responders/resource/environment_configs.py @@ -13,7 +13,6 @@ from api.responders.responder_base import ResponderBase from bson.objectid import ObjectId from datetime import datetime from utils.constants import EnvironmentFeatures -from utils.inventory_mgr import InventoryMgr class EnvironmentConfigs(ResponderBase): @@ -27,9 +26,13 @@ class EnvironmentConfigs(ResponderBase): "distribution": True } CONFIGURATIONS_NAMES = ["mysql", "OpenStack", "CLI", "AMQP", - "Monitoring", "NFV_provider", "ACI"] - OPTIONAL_CONFIGURATIONS_NAMES = ["AMQP", "Monitoring", - "NFV_provider", "ACI"] + "Monitoring", "NFV_provider", "ACI", + "Kubernetes", "VMware", "Bare-metal"] + REQUIRED_CONFIGURATIONS_NAMES = { + "OpenStack": ["OpenStack", "mysql", "CLI"], + "Kubernetes": ["Kubernetes", "CLI"], + } + DEFAULT_ENV_TYPE = "OpenStack" def __init__(self): super().__init__() @@ -49,6 +52,8 @@ class EnvironmentConfigs(ResponderBase): get_constants_by_name("environment_operational_status") self.type_drivers = self.\ get_constants_by_name("type_drivers") + self.environment_types = self.\ + get_constants_by_name("environment_types") self.CONFIGURATIONS_REQUIREMENTS = { "mysql": { @@ -108,6 +113,7 @@ class EnvironmentConfigs(ResponderBase): }, "Monitoring": { "name": self.require(str, mandatory=True), + "install_monitoring_client": self.require(bool), "config_folder": self.require(str, mandatory=True, validate=DataValidate.REGEX, @@ -169,6 +175,20 @@ class EnvironmentConfigs(ResponderBase): requirement=[regex.IP, regex.HOSTNAME]), "user": self.require(str, mandatory=True), "pwd": self.require(str, mandatory=True) + }, + "Kubernetes": { + "name": self.require(str, mandatory=True), + "host": self.require(str, + mandatory=True, + validate=DataValidate.REGEX, + requirement=[regex.IP, regex.HOSTNAME]), + "port": self.require(int, + mandatory=True, + convert_to_type=True, + validate=DataValidate.REGEX, + requirement=regex.PORT), + "user": self.require(str, mandatory=True), + "token": self.require(str, mandatory=True) } } self.AUTH_REQUIREMENTS = { @@ -201,6 +221,9 @@ class EnvironmentConfigs(ResponderBase): "operational": self.require(str, validate=DataValidate.LIST, requirement=self.operational_values), + "environment_type": self.require(str, + validate=DataValidate.LIST, + requirement=self.environment_types), "page": self.require(int, convert_to_type=True), "page_size": self.require(int, convert_to_type=True) } @@ -223,7 +246,8 @@ class EnvironmentConfigs(ResponderBase): query = {} filters_keys = ["name", "distribution", "distribution_version", "type_drivers", "user", "listen", - "monitoring_setup_done", "scanned", "operational"] + "monitoring_setup_done", "scanned", "operational", + "environment_type"] self.update_query_with_filters(filters, filters_keys, query) mechanism_drivers = filters.get("mechanism_drivers") if mechanism_drivers: @@ -272,16 +296,26 @@ class EnvironmentConfigs(ResponderBase): "enable_monitoring": self.require(bool, convert_to_type=True), "monitoring_setup_done": self.require(bool, convert_to_type=True), "auth": self.require(dict), - "aci_enabled": self.require(bool, convert_to_type=True) + "aci_enabled": self.require(bool, convert_to_type=True), + "environment_type": self.require(str, + validate=DataValidate.LIST, + requirement=self.environment_types), } self.validate_query_data(env_config, environment_config_requirement, - can_be_empty_keys=["last_scanned"] - ) + can_be_empty_keys=["last_scanned", + "environment_type"]) self.check_and_convert_datetime("last_scanned", env_config) + # validate the configurations + environment_type = env_config.get("environment_type") + if not environment_type: + environment_type = self.DEFAULT_ENV_TYPE configurations = env_config['configuration'] - config_validation = self.validate_environment_config(configurations) + config_validation = ( + self.validate_environment_config(configurations=configurations, + environment_type=environment_type) + ) if not config_validation['passed']: self.bad_request(config_validation['error_message']) @@ -310,12 +344,11 @@ class EnvironmentConfigs(ResponderBase): .format(env_config["name"])}, "201") - def validate_environment_config(self, configurations, + def validate_environment_config(self, configurations, environment_type=None, require_mandatory=True): configurations_of_names = {} validation = {"passed": True} - if [config for config in configurations - if 'name' not in config]: + if any('name' not in config for config in configurations): validation['passed'] = False validation['error_message'] = "configuration must have name" return validation @@ -338,12 +371,19 @@ class EnvironmentConfigs(ResponderBase): "configuration for {0}".format(name) return validation configurations_of_names[name] = configs[0] - elif require_mandatory: - if name not in self.OPTIONAL_CONFIGURATIONS_NAMES: - validation["passed"] = False - validation['error_message'] = "configuration for {0} " \ - "is mandatory".format(name) - return validation + + if require_mandatory: + required_list = ( + self.REQUIRED_CONFIGURATIONS_NAMES.get(environment_type, []) + ) + if any(required_conf not in configurations_of_names + for required_conf + in required_list): + validation["passed"] = False + validation['error_message'] = ("configurations for ({})" + "are mandatory for " + "this environment type" + .format(", ".join(required_list))) for name, config in configurations_of_names.items(): error_message = self.validate_configuration(name, config) diff --git a/app/api/responders/responder_base.py b/app/api/responders/responder_base.py index e59f4cf..0ac08d6 100644 --- a/app/api/responders/responder_base.py +++ b/app/api/responders/responder_base.py @@ -71,7 +71,7 @@ class ResponderBase(DataValidate, DictNamingConverter): def validate_query_data(self, data, data_requirements, additional_key_reg=None, - can_be_empty_keys=[]): + can_be_empty_keys=None): error_message = self.validate_data(data, data_requirements, additional_key_reg, can_be_empty_keys) @@ -197,7 +197,9 @@ class ResponderBase(DataValidate, DictNamingConverter): ': no "value" key for data: ' + str(d)) return consts - def read(self, collection, matches={}, projection=None, skip=0, limit=1000): + def read(self, collection, matches=None, projection=None, skip=0, limit=1000): + if matches is None: + matches = {} collection = self.get_collection_by_name(collection) skip *= limit query = collection.find(matches, projection).skip(skip).limit(limit) diff --git a/app/api/validation/data_validate.py b/app/api/validation/data_validate.py index 6928c4b..4dfb214 100644 --- a/app/api/validation/data_validate.py +++ b/app/api/validation/data_validate.py @@ -75,7 +75,9 @@ class DataValidate: def validate_data(self, data, requirements, additional_key_re=None, - can_be_empty_keys=[]): + can_be_empty_keys=None): + if can_be_empty_keys is None: + can_be_empty_keys = [] illegal_keys = [key for key in data.keys() if key not in requirements.keys()] diff --git a/app/config/link_finders.json b/app/config/link_finders.json index 55c31f6..b421ee9 100644 --- a/app/config/link_finders.json +++ b/app/config/link_finders.json @@ -7,6 +7,7 @@ "FindLinksForVconnectors", "FindLinksForVedges", "FindLinksForVserviceVnics", - "FindLinksForPnics" + "FindLinksForPnics", + "FindImplicitLinks" ] } \ No newline at end of file diff --git a/app/config/scanners.json b/app/config/scanners.json index c5efb06..a96029a 100644 --- a/app/config/scanners.json +++ b/app/config/scanners.json @@ -36,7 +36,8 @@ "types_name": "regions", "parent_type": "environment" }, - "children_scanner": "ScanRegionsRoot" + "children_scanner": "ScanRegionsRoot", + "environment_condition": {"environment_type": "OpenStack"} }, { "type": "projects_folder", @@ -45,7 +46,20 @@ "types_name": "projects", "parent_type": "environment" }, - "children_scanner": "ScanProjectsRoot" + "children_scanner": "ScanProjectsRoot", + "environment_condition": {"environment_type": "OpenStack"} + }, + { + "type": "namespaces_folder", + "fetcher": { + "folder": true, + "types_name": "namespaces", + "parent_type": "environment" + }, + "children_scanner": "ScanNamespacesRoot", + "environment_condition": { + "environment_type": "Kubernetes" + } } ], "ScanHostNetworkAgentsRoot": [ @@ -377,6 +391,13 @@ "type": "vservice", "fetcher": "CliFetchHostVservices" } + ], + "ScanNamespacesRoot": [ + { + "type": "namespace", + "fetcher": "KubeFetchNamespaces", + "environment_condition": {"environment_type": "Kubernetes"} + } ] } } diff --git a/app/connection_test/connection_test.py b/app/connection_test/connection_test.py deleted file mode 100644 index d9d6af7..0000000 --- a/app/connection_test/connection_test.py +++ /dev/null @@ -1,283 +0,0 @@ -############################################################################### -# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # -# and others # -# # -# All rights reserved. This program and the accompanying materials # -# are made available under the terms of the Apache License, Version 2.0 # -# which accompanies this distribution, and is available at # -# http://www.apache.org/licenses/LICENSE-2.0 # -############################################################################### -import argparse -import datetime -from kombu import Connection - -import time - -import pymongo -from functools import partial - -from discover.fetchers.api.api_access import ApiAccess -from discover.fetchers.db.db_access import DbAccess -from discover.manager import Manager -from utils.constants import ConnectionTestStatus, ConnectionTestType -from utils.logging.file_logger import FileLogger -from utils.mongo_access import MongoAccess -from utils.ssh_connection import * - - -def test_openstack(config, test_request): - try: - api = ApiAccess(config) - ConnectionTest.report_success(test_request, - ConnectionTestType.OPENSTACK.value) - if api: - pass - except ValueError: - pass - - -def test_mysql(config, test_request): - db_access = DbAccess(config) - ConnectionTest.report_success(test_request, ConnectionTestType.MYSQL.value) - if db_access: - pass - - -def test_ssh_connect(config) -> bool: - ssh = SshConnection(config.get('host', ''), - config.get('user', ''), - _pwd=config.get('pwd'), - _key=config.get('key'), - _port=int(config.get('port', - SshConnection.DEFAULT_PORT))) - ret = ssh.connect() - return ret - - -def test_cli(config, test_request): - ret = test_ssh_connect(config) - ConnectionTest.set_test_result(test_request, - ConnectionTestType.CLI.value, - ret) - - -def test_amqp_connect(config): - connect_url = 'amqp://{user}:{pwd}@{host}:{port}//' \ - .format(user=config.get("user", ''), - pwd=config.get('pwd', ''), - host=config.get('host', ''), - port=int(config.get('port', 5671))) - conn = Connection(connect_url) - conn.connect() - - -def test_amqp(config, test_request): - test_amqp_connect(config) - ConnectionTest.report_success(test_request, ConnectionTestType.AMQP.value) - - -def test_monitoring(config, test_request): - # for monitoring configuration test, need to test: - # 1. SSH access - # 2. RabbitMQ access - ssh_config = { - 'host': config.get('server_ip'), - 'user': config.get('ssh_user'), - 'pwd': config.get('ssh_password'), - 'port': int(config.get('ssh_port', 0)) - } - if not test_ssh_connect(ssh_config): - return - amqp_connect_config = { - 'user': config.get('rabbitmq_user', ''), - 'pwd': config.get('rabbitmq_pass', ''), - 'host': config.get('server_ip'), - 'port': int(config.get('rabbitmq_port', 5672)), - } - test_amqp_connect(amqp_connect_config) - ConnectionTest.report_success(test_request, ConnectionTestType.AMQP.value) - - -def test_aci(config, test_request): - pass - - -TEST_HANDLERS = { - ConnectionTestType.OPENSTACK.value: test_openstack, - ConnectionTestType.MYSQL.value: test_mysql, - ConnectionTestType.CLI.value: test_cli, - ConnectionTestType.AMQP.value: test_amqp, - ConnectionTestType.ACI.value: test_aci, - ConnectionTestType.MONITORING.value: test_monitoring -} - - -class ConnectionTest(Manager): - - DEFAULTS = { - 'mongo_config': '', - 'connection_tests': 'connection_tests', - 'environments': 'environments_config', - 'interval': 1, - 'loglevel': 'WARNING' - } - - def __init__(self): - self.args = self.get_args() - super().__init__(log_directory=self.args.log_directory, - mongo_config_file=self.args.mongo_config) - self.db_client = None - self.connection_tests_collection = None - self.environments_collection = None - - @staticmethod - def get_args(): - parser = argparse.ArgumentParser() - parser.add_argument('-m', '--mongo_config', nargs='?', type=str, - default=ConnectionTest.DEFAULTS['mongo_config'], - help='Name of config file ' + - 'with MongoDB server access details') - parser.add_argument('-c', '--connection_tests_collection', nargs='?', - type=str, - default=ConnectionTest.DEFAULTS['connection_tests'], - help='connection_tests collection to read from') - parser.add_argument('-e', '--environments_collection', nargs='?', - type=str, - default=ConnectionTest.DEFAULTS['environments'], - help='Environments collection to update ' - 'after tests') - parser.add_argument('-i', '--interval', nargs='?', type=float, - default=ConnectionTest.DEFAULTS['interval'], - help='Interval between collection polls' - '(must be more than {} seconds)' - .format(ConnectionTest.MIN_INTERVAL)) - parser.add_argument('-l', '--loglevel', nargs='?', type=str, - default=ConnectionTest.DEFAULTS['loglevel'], - help='Logging level \n(default: {})' - .format(ConnectionTest.DEFAULTS['loglevel'])) - parser.add_argument('-d', '--log_directory', nargs='?', type=str, - default=FileLogger.LOG_DIRECTORY, - help='File logger directory \n(default: {})' - .format(FileLogger.LOG_DIRECTORY)) - args = parser.parse_args() - return args - - def configure(self): - self.db_client = MongoAccess() - self.connection_tests_collection = \ - self.db_client.db[self.args.connection_tests_collection] - self.environments_collection = \ - self.db_client.db[self.args.environments_collection] - self._update_document = \ - partial(MongoAccess.update_document, - self.connection_tests_collection) - self.interval = max(self.MIN_INTERVAL, self.args.interval) - self.log.set_loglevel(self.args.loglevel) - - self.log.info('Started ConnectionTest with following configuration:\n' - 'Mongo config file path: {0.args.mongo_config}\n' - 'connection_tests collection: ' - '{0.connection_tests_collection.name}\n' - 'Polling interval: {0.interval} second(s)' - .format(self)) - - def _build_test_args(self, test_request: dict): - args = { - 'mongo_config': self.args.mongo_config - } - - def set_arg(name_from: str, name_to: str = None): - if name_to is None: - name_to = name_from - val = test_request.get(name_from) - if val: - args[name_to] = val - - set_arg('object_id', 'id') - set_arg('log_level', 'loglevel') - set_arg('environment', 'env') - set_arg('scan_only_inventory', 'inventory_only') - set_arg('scan_only_links', 'links_only') - set_arg('scan_only_cliques', 'cliques_only') - set_arg('inventory') - set_arg('clear') - set_arg('clear_all') - - return args - - def _finalize_test(self, test_request: dict): - # update the status and timestamps. - self.log.info('Request {} has been tested.' - .format(test_request['_id'])) - start_time = test_request['submit_timestamp'] - end_time = datetime.datetime.utcnow() - test_request['response_timestamp'] = end_time - test_request['response_time'] = \ - str(end_time - start_time.replace(tzinfo=None)) - test_request['status'] = ConnectionTestStatus.RESPONSE.value - self._update_document(test_request) - - @staticmethod - def set_test_result(test_request, target, result): - test_request.get('test_results', {})[target] = result - - @staticmethod - def report_success(test_request, target): - ConnectionTest.set_test_result(test_request, target, True) - - @staticmethod - def handle_test_target(target, test_request): - targets_config = test_request.get('targets_configuration', []) - try: - config = next(t for t in targets_config if t['name'] == target) - except StopIteration: - raise ValueError('failed to find {} in targets_configuration' - .format(target)) - handler = TEST_HANDLERS.get(target) - if not handler: - raise ValueError('unknown test target: {}'.format(target)) - handler(config, test_request) - - def do_test(self, test_request): - targets = [t for t in test_request.get('test_targets', [])] - test_request['test_results'] = {t: False for t in targets} - for test_target in test_request.get('test_targets', []): - self.log.info('testing connection to: {}'.format(test_target)) - try: - self.handle_test_target(test_target, test_request) - except Exception as e: - self.log.exception(e) - if 'errors' not in test_request: - test_request['errors'] = {} - test_request['errors'][test_target] = str(e) - self.log.error('Test of target {} failed (id: {}):\n{}' - .format(test_target, - test_request['_id'], - str(e))) - self._finalize_test(test_request) - self._set_env_operational(test_request['environment']) - - # if environment_config document for this specific environment exists, - # update the value of the 'operational' field to 'running' - def _set_env_operational(self, env): - self.environments_collection. \ - update_one({'name': env}, {'$set': {'operational': 'running'}}) - - def do_action(self): - while True: - # Find a pending request that is waiting the longest time - results = self.connection_tests_collection \ - .find({'status': ConnectionTestStatus.REQUEST.value, - 'submit_timestamp': {'$ne': None}}) \ - .sort('submit_timestamp', pymongo.ASCENDING) \ - .limit(1) - - # If no connection tests are pending, sleep for some time - if results.count() == 0: - time.sleep(self.interval) - else: - self.do_test(results[0]) - - -if __name__ == '__main__': - ConnectionTest().run() diff --git a/app/discover/clique_finder.py b/app/discover/clique_finder.py index 57b2e3b..4d68eb4 100644 --- a/app/discover/clique_finder.py +++ b/app/discover/clique_finder.py @@ -48,61 +48,53 @@ class CliqueFinder(Fetcher): self.find_cliques_for_type(clique_type) self.log.info("finished scanning for cliques") - # Calculate priority score + # Calculate priority score for clique type per environment and configuration def _get_priority_score(self, clique_type): + # environment-specific clique type takes precedence if self.env == clique_type['environment']: + return 16 + if (self.env_config['distribution'] == clique_type.get('distribution') + and + self.env_config['distribution_version'] == + clique_type.get('distribution_version')): + return 8 + if clique_type.get('mechanism_drivers') \ + in self.env_config['mechanism_drivers']: return 4 - if (self.env_config['distribution'] == clique_type.get('distribution') and - self.env_config['distribution_version'] == clique_type.get('distribution_version')): - return 3 - if clique_type.get('mechanism_drivers') in self.env_config['mechanism_drivers']: - return 2 if self.env_config['type_drivers'] == clique_type.get('type_drivers'): + return 2 + if clique_type.get('environment', '') == 'ANY': + # environment=ANY serves as fallback option, but it's not mandatory return 1 else: return 0 # Get clique type with max priority - # for given environment configuration and focal point type - def _get_clique_type(self, focal_point, clique_types): - # If there's no configuration match for the specified environment, - # we use the default clique type definition with environment='ANY' - fallback_type = next( - filter(lambda t: t['environment'] == 'ANY', clique_types), - None - ) - if not fallback_type: - raise ValueError("No fallback clique type (ANY) " - "defined for focal point type '{}'" - .format(focal_point)) - - clique_types.remove(fallback_type) - - priority_scores = [self._get_priority_score(clique_type) - for clique_type - in clique_types] - max_score = max(priority_scores) if priority_scores else 0 - - return (fallback_type - if max_score == 0 - else clique_types[priority_scores.index(max_score)]) + # for given focal point type + def _get_clique_type(self, clique_types): + scored_clique_types = [{'score': self._get_priority_score(clique_type), + 'clique_type': clique_type} + for clique_type in clique_types] + max_score = max(scored_clique_types, key=lambda t: t['score']) + if max_score['score'] == 0: + self.log.warn('No matching clique types for focal point type: {}' + .format(clique_types[0].get('focal_point_type'))) + return None + return max_score.get('clique_type') def get_clique_types(self): if not self.clique_types_by_type: - clique_types_by_focal_point = self.clique_types.aggregate([{ - "$group": { - "_id": "$focal_point_type", - "types": {"$push": "$$ROOT"} - } - }]) - - self.clique_types_by_type = { - cliques['_id']: self._get_clique_type(cliques['_id'], - cliques['types']) - for cliques in - clique_types_by_focal_point - } - + clique_types_candidates = {} + for clique in self.clique_types.find({}): + fp_type = clique.get('focal_point_type', '') + if not clique_types_candidates.get(fp_type): + clique_types_candidates[fp_type] = [] + clique_types_candidates[fp_type].append(clique) + for t in clique_types_candidates.keys(): + selected = self._get_clique_type(clique_types_candidates[t]) + if not selected: + continue + self.clique_types_by_type[t] = selected return self.clique_types_by_type def find_cliques_for_type(self, clique_type): @@ -125,11 +117,14 @@ class CliqueFinder(Fetcher): .find_one({"focal_point_type": o['type']}) constraints = [] if not constraint else constraint["constraints"] clique_types = self.get_clique_types() - clique_type = clique_types[o['type']] - new_clique = self.construct_clique_for_focal_point(o, clique_type, - constraints) - if not new_clique: + clique_type = clique_types.get(o['type']) + if not clique_type: self.cliques.delete({'_id': clique['_id']}) + else: + new_clique = self.construct_clique_for_focal_point(o, clique_type, + constraints) + if not new_clique: + self.cliques.delete({'_id': clique['_id']}) def construct_clique_for_focal_point(self, o, clique_type, constraints): # keep a hash of nodes in clique that were visited for each type @@ -146,12 +141,15 @@ class CliqueFinder(Fetcher): for c in constraints: val = o[c] if c in o else None clique["constraints"][c] = val + allow_implicit = clique_type.get('use_implicit_links', False) for link_type in clique_type["link_types"]: - self.check_link_type(clique, link_type, nodes_of_type) + self.check_link_type(clique, link_type, nodes_of_type, + allow_implicit=allow_implicit) # after adding the links to the clique, create/update the clique if not clique["links"]: return None + clique["clique_type"] = clique_type["_id"] focal_point_obj = self.inventory.find({"_id": clique["focal_point"]}) if not focal_point_obj: return None @@ -198,25 +196,32 @@ class CliqueFinder(Fetcher): '-'.join(link_type_parts) return CliqueFinder.link_type_reversed.get(link_type) - def check_link_type(self, clique, link_type, nodes_of_type): + def check_link_type(self, clique, link_type, nodes_of_type, + allow_implicit=False): # check if it's backwards link_type_reversed = self.get_link_type_reversed(link_type) # handle case of links like T<-->T self_linked = link_type == link_type_reversed use_reversed = False if not self_linked: - matches = self.links.find_one({ + link_search_condition = { "environment": self.env, "link_type": link_type_reversed - }) + } + if not allow_implicit: + link_search_condition['implicit'] = False + matches = self.links.find_one(link_search_condition) use_reversed = True if matches else False if self_linked or not use_reversed: - self.check_link_type_forward(clique, link_type, nodes_of_type) + self.check_link_type_forward(clique, link_type, nodes_of_type, + allow_implicit=allow_implicit) if self_linked or use_reversed: - self.check_link_type_back(clique, link_type, nodes_of_type) + self.check_link_type_back(clique, link_type, nodes_of_type, + allow_implicit=allow_implicit) def check_link_type_for_direction(self, clique, link_type, nodes_of_type, - is_reversed=False): + is_reversed=False, + allow_implicit=False): if is_reversed: link_type = self.get_link_type_reversed(link_type) from_type = link_type[:link_type.index("-")] @@ -233,7 +238,8 @@ class CliqueFinder(Fetcher): clique, link_type, side_to_match, - other_side) + other_side, + allow_implicit=allow_implicit) nodes_to_add = nodes_to_add | matches if other_side_type not in nodes_of_type: nodes_of_type[other_side_type] = set() @@ -241,13 +247,17 @@ class CliqueFinder(Fetcher): nodes_of_type[other_side_type] | nodes_to_add def find_matches_for_point(self, match_point, clique, link_type, - side_to_match, other_side) -> set: + side_to_match, other_side, + allow_implicit=False) -> set: nodes_to_add = set() - matches = self.links.find({ + link_search_condition = { "environment": self.env, "link_type": link_type, side_to_match: ObjectId(match_point) - }) + } + if not allow_implicit: + link_search_condition['implicit'] = False + matches = self.links.find(link_search_condition) for link in matches: link_id = link["_id"] if link_id in clique["links"]: @@ -260,10 +270,14 @@ class CliqueFinder(Fetcher): nodes_to_add.add(other_side_point) return nodes_to_add - def check_link_type_forward(self, clique, link_type, nodes_of_type): + def check_link_type_forward(self, clique, link_type, nodes_of_type, + allow_implicit=False): self.check_link_type_for_direction(clique, link_type, nodes_of_type, - is_reversed=False) + is_reversed=False, + allow_implicit=allow_implicit) - def check_link_type_back(self, clique, link_type, nodes_of_type): + def check_link_type_back(self, clique, link_type, nodes_of_type, + allow_implicit=False): self.check_link_type_for_direction(clique, link_type, nodes_of_type, - is_reversed=True) + is_reversed=True, + allow_implicit=allow_implicit) diff --git a/app/discover/event_manager.py b/app/discover/event_manager.py index 4855acc..c01916c 100644 --- a/app/discover/event_manager.py +++ b/app/discover/event_manager.py @@ -113,8 +113,8 @@ class EventManager(Manager): def get_listener(self, env: str): env_config = self.inv.get_env_config(env) return (self.LISTENERS.get(env_config.get('distribution'), {}) - .get(env_config.get('distribution_version', - DefaultListener))) + .get(env_config.get('distribution_version'), + DefaultListener)) def listen_to_events(self, listener: ListenerBase, env_name: str, process_vars: dict): listener.listen({ diff --git a/app/discover/fetchers/api/api_access.py b/app/discover/fetchers/api/api_access.py index f685faf..1fca202 100644 --- a/app/discover/fetchers/api/api_access.py +++ b/app/discover/fetchers/api/api_access.py @@ -12,21 +12,18 @@ import re import requests import time -from discover.configuration import Configuration -from discover.fetcher import Fetcher +from utils.api_access_base import ApiAccessBase from utils.string_utils import jsonify -class ApiAccess(Fetcher): +class ApiAccess(ApiAccessBase): + + ADMIN_PORT = "35357" + subject_token = None initialized = False regions = {} - config = None - api_config = None - host = "" - base_url = "" - admin_token = "" tokens = {} admin_endpoint = "" admin_project = None @@ -38,28 +35,19 @@ class ApiAccess(Fetcher): # identity API v2 version with admin token def __init__(self, config=None): - super(ApiAccess, self).__init__() - if ApiAccess.initialized: + super().__init__('OpenStack', config) + self.base_url = "http://" + self.host + ":" + self.port + if self.initialized: return - ApiAccess.config = {'OpenStack': config} if config else Configuration() - ApiAccess.api_config = ApiAccess.config.get("OpenStack") - host = ApiAccess.api_config.get("host", "") - ApiAccess.host = host - port = ApiAccess.api_config.get("port", "") - if not (host and port): - raise ValueError('Missing definition of host or port ' + - 'for OpenStack API access') - ApiAccess.base_url = "http://" + host + ":" + port - ApiAccess.admin_token = ApiAccess.api_config.get("admin_token", "") - ApiAccess.admin_project = ApiAccess.api_config.get("admin_project", - "admin") - ApiAccess.admin_endpoint = "http://" + host + ":" + "35357" + ApiAccess.admin_project = self.api_config.get("admin_project", "admin") + ApiAccess.admin_endpoint = "http://" + self.host + ":" + self.ADMIN_PORT token = self.v2_auth_pwd(ApiAccess.admin_project) if not token: raise ValueError("Authentication failed. Failed to obtain token") else: self.subject_token = token + self.initialized = True @staticmethod def parse_time(time_str): @@ -95,9 +83,9 @@ class ApiAccess(Fetcher): subject_token = self.get_existing_token(project_id) if subject_token: return subject_token - req_url = ApiAccess.base_url + "/v2.0/tokens" + req_url = self.base_url + "/v2.0/tokens" response = requests.post(req_url, json=post_body, headers=headers, - timeout=5) + timeout=self.CONNECT_TIMEOUT) response = response.json() ApiAccess.auth_response[project_id] = response if 'error' in response: @@ -120,8 +108,8 @@ class ApiAccess(Fetcher): return token_details def v2_auth_pwd(self, project): - user = ApiAccess.api_config["user"] - pwd = ApiAccess.api_config["pwd"] + user = self.api_config["user"] + pwd = self.api_config["pwd"] post_body = { "auth": { "passwordCredentials": { @@ -148,23 +136,6 @@ class ApiAccess(Fetcher): auth_response = ApiAccess.auth_response.get('admin', {}) return auth_response - def get_rel_url(self, relative_url, headers): - req_url = ApiAccess.base_url + relative_url - return self.get_url(req_url, headers) - - def get_url(self, req_url, headers): - response = requests.get(req_url, headers=headers) - if response.status_code != requests.codes.ok: - # some error happened - if "reason" in response: - msg = ", reason: {}".format(response.reason) - else: - msg = ", response: {}".format(response.text) - self.log.error("req_url: {} {}".format(req_url, msg)) - return None - ret = response.json() - return ret - def get_region_url(self, region_name, service): if region_name not in self.regions: return None @@ -174,7 +145,7 @@ class ApiAccess(Fetcher): return None orig_url = s["adminURL"] # replace host name with the host found in config - url = re.sub(r"^([^/]+)//[^:]+", r"\1//" + ApiAccess.host, orig_url) + url = re.sub(r"^([^/]+)//[^:]+", r"\1//" + self.host, orig_url) return url # like get_region_url(), but remove everything starting from the "/v2" diff --git a/app/discover/fetchers/api/api_fetch_host_instances.py b/app/discover/fetchers/api/api_fetch_host_instances.py index 56cffda..bf8513a 100644 --- a/app/discover/fetchers/api/api_fetch_host_instances.py +++ b/app/discover/fetchers/api/api_fetch_host_instances.py @@ -18,7 +18,7 @@ class ApiFetchHostInstances(ApiAccess, DbAccess, metaclass=Singleton): def __init__(self): super(ApiFetchHostInstances, self).__init__() self.inv = InventoryMgr() - self.endpoint = ApiAccess.base_url.replace(":5000", ":8774") + self.endpoint = self.base_url.replace(":5000", ":8774") self.projects = None self.db_fetcher = DbFetchInstances() diff --git a/app/discover/fetchers/api/api_fetch_project_hosts.py b/app/discover/fetchers/api/api_fetch_project_hosts.py index 5b911f5..2aeb24f 100644 --- a/app/discover/fetchers/api/api_fetch_project_hosts.py +++ b/app/discover/fetchers/api/api_fetch_project_hosts.py @@ -11,9 +11,11 @@ import json from discover.fetchers.api.api_access import ApiAccess from discover.fetchers.db.db_access import DbAccess +from discover.fetchers.cli.cli_access import CliAccess +from utils.ssh_connection import SshError -class ApiFetchProjectHosts(ApiAccess, DbAccess): +class ApiFetchProjectHosts(ApiAccess, DbAccess, CliAccess): def __init__(self): super(ApiFetchProjectHosts, self).__init__() @@ -107,6 +109,7 @@ class ApiFetchProjectHosts(ApiAccess, DbAccess): s = services["nova-compute"] if s["available"] and s["active"]: self.add_host_type(doc, "Compute", az['zoneName']) + self.fetch_host_os_details(doc) return doc # fetch more details of network nodes from neutron DB agents table @@ -121,7 +124,12 @@ class ApiFetchProjectHosts(ApiAccess, DbAccess): """.format(self.neutron_db) results = self.get_objects_list(query, "") for r in results: - host = hosts[r["host"]] + host = r["host"] + if host not in hosts: + self.log.error("host from agents table not in hosts list: {}" + .format(host)) + continue + host = hosts[host] host["config"] = json.loads(r["configurations"]) self.add_host_type(host, "Network", '') @@ -136,9 +144,33 @@ class ApiFetchProjectHosts(ApiAccess, DbAccess): for db_row in results: doc.update(db_row) - def add_host_type(self, doc, type, zone): - if not type in doc["host_type"]: - doc["host_type"].append(type) - if type == 'Compute': + @staticmethod + def add_host_type(doc, host_type, zone): + if host_type not in doc["host_type"]: + doc["host_type"].append(host_type) + if host_type == 'Compute': doc['zone'] = zone doc['parent_id'] = zone + + def fetch_host_os_details(self, doc): + cmd = 'cat /etc/os-release && echo "ARCHITECURE=`arch`"' + try: + lines = self.run_fetch_lines(cmd, ssh_to_host=doc['host']) + except SshError as e: + self.log.error('{}: {}', cmd, str(e)) + os_attributes = {} + attributes_to_fetch = { + 'NAME': 'name', + 'VERSION': 'version', + 'ID': 'ID', + 'ID_LIKE': 'ID_LIKE', + 'ARCHITECURE': 'architecure' + } + for attr in attributes_to_fetch: + matches = [l for l in lines if l.startswith(attr + '=')] + if matches: + line = matches[0] + attr_name = attributes_to_fetch[attr] + os_attributes[attr_name] = line[line.index('=')+1:].strip('"') + if os_attributes: + doc['OS'] = os_attributes diff --git a/app/discover/fetchers/api/api_fetch_regions.py b/app/discover/fetchers/api/api_fetch_regions.py index 23a3736..4e83b01 100644 --- a/app/discover/fetchers/api/api_fetch_regions.py +++ b/app/discover/fetchers/api/api_fetch_regions.py @@ -13,7 +13,7 @@ from discover.fetchers.api.api_access import ApiAccess class ApiFetchRegions(ApiAccess): def __init__(self): super(ApiFetchRegions, self).__init__() - self.endpoint = ApiAccess.base_url + self.endpoint = self.base_url def get(self, regions_folder_id): token = self.v2_auth_pwd(self.admin_project) diff --git a/app/discover/fetchers/db/db_access.py b/app/discover/fetchers/db/db_access.py index 090ab84..5ff49d5 100644 --- a/app/discover/fetchers/db/db_access.py +++ b/app/discover/fetchers/db/db_access.py @@ -38,8 +38,7 @@ class DbAccess(Fetcher): conn = None query_count_per_con = 0 - # connection timeout set to 30 seconds, - # due to problems over long connections + # connection timeout set to 5 seconds TIMEOUT = 5 def __init__(self, mysql_config=None): @@ -47,6 +46,9 @@ class DbAccess(Fetcher): self.config = {'mysql': mysql_config} if mysql_config \ else Configuration() self.conf = self.config.get("mysql") + self.connect_timeout = int(self.conf['connect_timeout']) \ + if 'connect_timeout' in self.conf \ + else self.TIMEOUT self.connect_to_db() self.neutron_db = self.get_neutron_db_name() @@ -55,16 +57,18 @@ class DbAccess(Fetcher): return try: connector = mysql.connector - DbAccess.conn = connector.connect(host=_host, port=_port, - connection_timeout=self.TIMEOUT, - user=_user, - password=_pwd, - database=_database, - raise_on_warnings=True) + conn = connector.connect(host=_host, port=_port, + connection_timeout=self.connect_timeout, + user=_user, + password=_pwd, + database=_database, + raise_on_warnings=True) + DbAccess.conn = conn DbAccess.conn.ping(True) # auto-reconnect if necessary except Exception as e: - self.log.critical("failed to connect to MySQL DB: {}" - .format(str(e))) + msg = "failed to connect to MySQL DB: {}".format(str(e)) + self.log.critical(msg) + raise ScanError(msg) return DbAccess.query_count_per_con = 0 @@ -93,8 +97,11 @@ class DbAccess(Fetcher): DbAccess.conn = None self.conf = self.config.get("mysql") cnf = self.conf + pwd = cnf.get('pwd', '') + if not pwd: + raise ScanError('db_access: attribute pwd is missing') self.db_connect(cnf.get('host', ''), cnf.get('port', ''), - cnf.get('user', ''), cnf.get('pwd', ''), + cnf.get('user', ''), pwd, cnf.get('schema', 'nova')) @with_cursor diff --git a/app/discover/fetchers/kube/__init__.py b/app/discover/fetchers/kube/__init__.py new file mode 100644 index 0000000..b0637e9 --- /dev/null +++ b/app/discover/fetchers/kube/__init__.py @@ -0,0 +1,9 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### diff --git a/app/discover/fetchers/kube/kube_access.py b/app/discover/fetchers/kube/kube_access.py new file mode 100644 index 0000000..38bb978 --- /dev/null +++ b/app/discover/fetchers/kube/kube_access.py @@ -0,0 +1,28 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +from kubernetes.client import Configuration as KubConf, CoreV1Api + +from utils.api_access_base import ApiAccessBase + + +class KubeAccess(ApiAccessBase): + + def __init__(self, config=None): + super().__init__('Kubernetes', config) + self.base_url = 'https://{}:{}'.format(self.host, self.port) + self.bearer_token = self.api_config.get('token', '') + conf = KubConf() + conf.host = self.base_url + conf.user = self.api_config.get('user') + conf.api_key_prefix['authorization'] = 'Bearer' + conf.api_key['authorization'] = self.bearer_token + conf.verify_ssl = False + self.api = CoreV1Api() + diff --git a/app/discover/fetchers/kube/kube_fetch_namespaces.py b/app/discover/fetchers/kube/kube_fetch_namespaces.py new file mode 100644 index 0000000..951ddb8 --- /dev/null +++ b/app/discover/fetchers/kube/kube_fetch_namespaces.py @@ -0,0 +1,32 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +from discover.fetchers.kube.kube_access import KubeAccess + + +class KubeFetchNamespaces(KubeAccess): + + def __init__(self, config=None): + super().__init__(config) + + def get(self, object_id): + namespaces = self.api.list_namespace() + return [self.get_namespace(i) for i in namespaces.items] + + @staticmethod + def get_namespace(namespace): + attrs = ['creation_timestamp', 'self_link', 'uid'] + namespace_details = { + 'name': namespace.metadata.name, + 'status': namespace.status.phase + } + namespace_details.update({x: getattr(namespace.metadata, x, '') + for x in attrs}) + namespace_details['id'] = namespace_details['uid'] + return namespace_details diff --git a/app/discover/link_finders/find_implicit_links.py b/app/discover/link_finders/find_implicit_links.py new file mode 100644 index 0000000..01eaa7b --- /dev/null +++ b/app/discover/link_finders/find_implicit_links.py @@ -0,0 +1,128 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +from discover.link_finders.find_links import FindLinks + + +class FindImplicitLinks(FindLinks): + + def __init__(self): + super().__init__() + self.links = [] + self.constraint_attributes = self.get_constraint_attributes() + + def add_links(self): + self.log.info('adding implicit links') + self.get_existing_links() + self.get_transitive_closure() + + def get_constraint_attributes(self) -> list: + attributes = set() + for c in self.inv.find({'environment': self.get_env()}, + collection='clique_constraints'): + for a in c['constraints']: + attributes.add(a) + return list(attributes) + + def get_existing_links(self): + self.log.info('fetching existing links') + existing_links = self.inv.find({'environment': self.get_env()}, + collection='links') + for l in existing_links: + self.links.append({'pass': 0, 'link': l}) + + def constraints_match(self, link1, link2): + if 'attributes' not in link1 or 'attributes' not in link2: + return True + attr1 = link1['attributes'] + attr2 = link2['attributes'] + for a in self.constraint_attributes: + if a in attr1 and a in attr2 and attr1[a] != attr2[a]: + return False + return True + + def links_match(self, start, dest): + if start['link_type'] == dest['link_type']: + return False # obviously we cannot make an implicit link of this + if start['source_id'] == dest['target_id']: + return False # avoid cyclic links + if not self.constraints_match(start, dest): + return False + return start['target_id'] == dest['source_id'] + + def add_matching_links(self, link, pass_no): + self.log.debug('looking for matches for link: {};{}' + .format(link['source_id'], link['target_id'])) + matches = [l for l in self.links + if l['pass'] == 0 # take only original links + and self.links_match(link, l['link'])] + for l in matches: + implicit = self.add_implicit_link(link, l['link']) + self.links.append({'pass': pass_no, 'link': implicit}) + return len(matches) + + def get_link_constraint_attributes(self, link1, link2) -> dict: + attributes = {} + for a in self.constraint_attributes: + # constraints_match() verified the attribute values don't conflict + if a in link1.get('attributes', {}): + attributes[a] = link1['attributes'][a] + elif a in link2.get('attributes', {}): + attributes[a] = link2['attributes'][a] + return attributes + + @staticmethod + def get_attr(attr, link1, link2): + if attr not in link1 and attr not in link2: + return None + if attr not in link1: + return link2[attr] + if attr not in link2 or link1[attr] == link2[attr]: + return link1[attr] + return None + + def add_implicit_link(self, link1, link2): + link_type_from = link1['link_type'].split('-')[0] + link_type_to = link2['link_type'].split('-')[1] + link_type = '{}-{}'.format(link_type_from, link_type_to) + link_name = '' + state = 'down' \ + if link1['state'] == 'down' or link2['state'] == 'down' \ + else 'up' + link_weight = 0 # TBD + host = self.get_attr('host', link1, link2) + switch = self.get_attr('switch', link1, link2) + extra_attributes = self.get_link_constraint_attributes(link1, link2) + self.log.debug('adding implicit link: link type: {}, from: {}, to: {}' + .format(link_type, + link1['source_id'], + link2['target_id'])) + implicit = self.create_link(self.get_env(), + link1['source'], link1['source_id'], + link2['target'], link2['target_id'], + link_type, link_name, state, link_weight, + host=host, switch=switch, + implicit=True, + extra_attributes=extra_attributes) + return implicit + + def get_transitive_closure(self): + pass_no = 1 + while True: + match_count = 0 + last_pass_links = [l for l in self.links if l['pass'] == pass_no-1] + for l in last_pass_links: + match_count += self.add_matching_links(l['link'], pass_no) + self.log.info('Transitive closure pass #{}: ' + 'found {} implicit links' + .format(pass_no, match_count)) + if match_count == 0: + break + pass_no += 1 + self.log.info('done adding implicit links') diff --git a/app/discover/link_finders/find_links.py b/app/discover/link_finders/find_links.py index d234479..31d39e5 100644 --- a/app/discover/link_finders/find_links.py +++ b/app/discover/link_finders/find_links.py @@ -19,6 +19,7 @@ class FindLinks(Fetcher): def create_link(self, env, source, source_id, target, target_id, link_type, link_name, state, link_weight, host=None, switch=None, + implicit=False, extra_attributes=None): if extra_attributes is None: extra_attributes = {} @@ -27,9 +28,11 @@ class FindLinks(Fetcher): link = self.inv.create_link(env, source, source_id, target, target_id, link_type, link_name, state, link_weight, + implicit=implicit, source_label=source_label, target_label=target_label, host=host, switch=switch, extra_attributes=extra_attributes) if self.inv.monitoring_setup_manager: self.inv.monitoring_setup_manager.create_setup(link) + return link diff --git a/app/discover/link_finders/find_links_for_instance_vnics.py b/app/discover/link_finders/find_links_for_instance_vnics.py index 975ab1a..1dfb818 100644 --- a/app/discover/link_finders/find_links_for_instance_vnics.py +++ b/app/discover/link_finders/find_links_for_instance_vnics.py @@ -49,6 +49,8 @@ class FindLinksForInstanceVnics(FindLinks): network_id = net['network']['id'] v['network'] = network_id self.inv.set(v) + if self.inv.monitoring_setup_manager: + self.inv.monitoring_setup_manager.create_setup(instance) break state = "up" # TBD link_weight = 0 # TBD diff --git a/app/discover/scan_manager.py b/app/discover/scan_manager.py index 6c46d47..91dd06c 100644 --- a/app/discover/scan_manager.py +++ b/app/discover/scan_manager.py @@ -219,71 +219,74 @@ class ScanManager(Manager): for interval in self.INTERVALS.keys(): self._prepare_scheduled_requests_for_interval(interval) + def handle_scans(self): + self._prepare_scheduled_requests() + + # Find a pending request that is waiting the longest time + results = self.scans_collection \ + .find({'status': ScanStatus.PENDING.value, + 'submit_timestamp': {'$ne': None}}) \ + .sort("submit_timestamp", pymongo.ASCENDING) \ + .limit(1) + + # If no scans are pending, sleep for some time + if results.count() == 0: + time.sleep(self.interval) + else: + scan_request = results[0] + env = scan_request.get('environment') + scan_feature = EnvironmentFeatures.SCANNING + if not self.inv.is_feature_supported(env, scan_feature): + self.log.error("Scanning is not supported for env '{}'" + .format(scan_request.get('environment'))) + self._fail_scan(scan_request) + return + + scan_request['start_timestamp'] = datetime.datetime.utcnow() + scan_request['status'] = ScanStatus.RUNNING.value + self._update_document(scan_request) + + # Prepare scan arguments and run the scan with them + try: + scan_args = self._build_scan_args(scan_request) + + self.log.info("Starting scan for '{}' environment" + .format(scan_args.get('env'))) + self.log.debug("Scan arguments: {}".format(scan_args)) + result, message = ScanController().run(scan_args) + except ScanArgumentsError as e: + self.log.error("Scan request '{id}' " + "has invalid arguments. " + "Errors:\n{errors}" + .format(id=scan_request['_id'], + errors=e)) + self._fail_scan(scan_request) + except Exception as e: + self.log.exception(e) + self.log.error("Scan request '{}' has failed." + .format(scan_request['_id'])) + self._fail_scan(scan_request) + else: + # Check is scan returned success + if not result: + self.log.error(message) + self.log.error("Scan request '{}' has failed." + .format(scan_request['_id'])) + self._fail_scan(scan_request) + return + + # update the status and timestamps. + self.log.info("Request '{}' has been scanned. ({})" + .format(scan_request['_id'], message)) + end_time = datetime.datetime.utcnow() + scan_request['end_timestamp'] = end_time + self._complete_scan(scan_request, message) + def do_action(self): self._clean_up() try: while True: - self._prepare_scheduled_requests() - - # Find a pending request that is waiting the longest time - results = self.scans_collection \ - .find({'status': ScanStatus.PENDING.value, - 'submit_timestamp': {'$ne': None}}) \ - .sort("submit_timestamp", pymongo.ASCENDING) \ - .limit(1) - - # If no scans are pending, sleep for some time - if results.count() == 0: - time.sleep(self.interval) - else: - scan_request = results[0] - env = scan_request.get('environment') - scan_feature = EnvironmentFeatures.SCANNING - if not self.inv.is_feature_supported(env, scan_feature): - self.log.error("Scanning is not supported for env '{}'" - .format(scan_request.get('environment'))) - self._fail_scan(scan_request) - continue - - scan_request['start_timestamp'] = datetime.datetime.utcnow() - scan_request['status'] = ScanStatus.RUNNING.value - self._update_document(scan_request) - - # Prepare scan arguments and run the scan with them - try: - scan_args = self._build_scan_args(scan_request) - - self.log.info("Starting scan for '{}' environment" - .format(scan_args.get('env'))) - self.log.debug("Scan arguments: {}".format(scan_args)) - result, message = ScanController().run(scan_args) - except ScanArgumentsError as e: - self.log.error("Scan request '{id}' " - "has invalid arguments. " - "Errors:\n{errors}" - .format(id=scan_request['_id'], - errors=e)) - self._fail_scan(scan_request) - except Exception as e: - self.log.exception(e) - self.log.error("Scan request '{}' has failed." - .format(scan_request['_id'])) - self._fail_scan(scan_request) - else: - # Check is scan returned success - if not result: - self.log.error(message) - self.log.error("Scan request '{}' has failed." - .format(scan_request['_id'])) - self._fail_scan(scan_request) - continue - - # update the status and timestamps. - self.log.info("Request '{}' has been scanned. ({})" - .format(scan_request['_id'], message)) - end_time = datetime.datetime.utcnow() - scan_request['end_timestamp'] = end_time - self._complete_scan(scan_request, message) + self.handle_scans() finally: self._clean_up() diff --git a/app/discover/scan_metadata_parser.py b/app/discover/scan_metadata_parser.py index df27e18..8757f79 100644 --- a/app/discover/scan_metadata_parser.py +++ b/app/discover/scan_metadata_parser.py @@ -49,21 +49,28 @@ class ScanMetadataParser(MetadataParser): self.add_error('missing or empty fetcher in scanner {} type #{}' .format(scanner_name, str(type_index))) elif isinstance(fetcher, str): + error_str = None try: - module_name = ClassResolver.get_module_file_by_class_name(fetcher) + get_module = ClassResolver.get_module_file_by_class_name + module_name = get_module(fetcher) fetcher_package = module_name.split("_")[0] if package: fetcher_package = ".".join((package, fetcher_package)) - instance = ClassResolver.get_instance_of_class(package_name=fetcher_package, - module_name=module_name, - class_name=fetcher) - except ValueError: - instance = None - if not instance: + # get the fetcher qualified class but not a class instance + # instances will be created just-in-time (before fetching): + # this avoids init of access classes not needed in some envs + get_class = ClassResolver.get_fully_qualified_class + class_qualified = get_class(fetcher, fetcher_package, + module_name) + except ValueError as e: + class_qualified = None + error_str = str(e) + if not class_qualified: self.add_error('failed to find fetcher class {} in scanner {}' - ' type #{}' - .format(fetcher, scanner_name, type_index)) - scan_type[self.FETCHER] = instance + ' type #{} ({})' + .format(fetcher, scanner_name, type_index, + error_str)) + scan_type[self.FETCHER] = class_qualified elif isinstance(fetcher, dict): is_folder = fetcher.get('folder', False) if not is_folder: @@ -81,7 +88,6 @@ class ScanMetadataParser(MetadataParser): def validate_children_scanner(self, scanner_name: str, type_index: int, scanners: dict, scan_type: dict): - scanner = scanners[scanner_name] if 'children_scanner' in scan_type: children_scanner = scan_type.get('children_scanner') if not isinstance(children_scanner, str): diff --git a/app/discover/scanner.py b/app/discover/scanner.py index 1fbcc68..8aac40b 100644 --- a/app/discover/scanner.py +++ b/app/discover/scanner.py @@ -26,6 +26,10 @@ from utils.ssh_connection import SshError class Scanner(Fetcher): + + ENV_TYPE_OPENSTACK = 'OpenStack' + ENV_TYPE_KUBERNETES = 'Kubernetes' + config = None environment = None env = None @@ -82,16 +86,21 @@ class Scanner(Fetcher): def check_type_env(self, type_to_fetch): # check if type is to be run in this environment - if "environment_condition" not in type_to_fetch: - return True - env_cond = type_to_fetch.get("environment_condition", {}) + basic_cond = {'environment_type': self.ENV_TYPE_OPENSTACK} + env_cond = type_to_fetch.get("environment_condition", {}) \ + if "environment_condition" in type_to_fetch \ + else basic_cond if not env_cond: - return True + env_cond = basic_cond + if 'environment_type' not in env_cond: + env_cond.update(basic_cond) if not isinstance(env_cond, dict): self.log.warn('illegal environment_condition given ' 'for type {}'.format(type_to_fetch['type'])) return True conf = self.config.get_env_config() + if 'environment_type' not in conf: + conf.update(basic_cond) for attr, required_val in env_cond.items(): if attr == "mechanism_drivers": if "mechanism_drivers" not in conf: @@ -120,6 +129,9 @@ class Scanner(Fetcher): # get Fetcher instance fetcher = type_to_fetch["fetcher"] + if not isinstance(fetcher, Fetcher): + type_to_fetch['fetcher'] = fetcher() # make it an instance + fetcher = type_to_fetch["fetcher"] fetcher.set_env(self.get_env()) # get children_scanner instance @@ -254,7 +266,6 @@ class Scanner(Fetcher): def load_link_finders_metadata(self): parser = FindLinksMetadataParser() - conf = self.config.get_env_config() finders_file = os.path.join(self.get_run_app_path(), 'config', FindLinksMetadataParser.FINDERS_FILE) diff --git a/app/install/calipso-installer.py b/app/install/calipso-installer.py index 84b10da..78bb927 100644 --- a/app/install/calipso-installer.py +++ b/app/install/calipso-installer.py @@ -292,6 +292,22 @@ def start_ui(host, dbuser, dbpassword, webport, dbport): environment=[root_url, mongo_url, LDAP_CONFIG]) +def start_test(): + name = "calipso-test" + if container_started(name): + return + print("\nstarting container {}...\n".format(name)) + image_name = "korenlev/calipso:test" + download_image(image_name) + ports = {'22/tcp': 10022} + DockerClient.containers.run(image_name, + detach=True, + name=name, + ports=ports, + restart_policy=RESTART_POLICY, + environment=[PYTHON_PATH, MONGO_CONFIG], + volumes=calipso_volume) + # check and stop a calipso container by given name def container_stop(container_name): if not container_started(container_name, print_message=False): @@ -395,7 +411,7 @@ else: container = "" action = "" -container_names = ["calipso-ui", "calipso-scan", "calipso-listen", +container_names = ["calipso-ui", "calipso-scan", "calipso-test", "calipso-listen", "calipso-ldap", "calipso-api", "calipso-sensu", "calipso-mongo"] container_actions = ["stop", "start"] while action not in container_actions: @@ -460,6 +476,9 @@ if action == "start": if container == "calipso-scan" or container == "all": start_scan() time.sleep(1) + if container == "calipso-test" or container == "all": + start_test() + time.sleep(1) if container == "calipso-sensu" or container == "all": start_sensu(args.uchiwaport, args.sensuport, args.rabbitport, args.rabbitmport) time.sleep(1) diff --git a/app/install/db/clique_types.json b/app/install/db/clique_types.json index 77e2d7d..624de70 100644 --- a/app/install/db/clique_types.json +++ b/app/install/db/clique_types.json @@ -26,6 +26,23 @@ ], "name" : "vservice" }, +{ + "environment" : "config_based_example", + "focal_point_type" : "vservice", + "link_types" : [ + "vservice-vnic", + "vnic-vedge", + "vedge-otep", + "otep-vconnector", + "vconnector-host_pnic", + "host_pnic-network" + ], + "name" : "vservice_config_based", + "distribution" : "Mirantis", + "distribution_version" : "6.0", + "mechanism_drivers" : "OVS", + "type_drivers" : "vxlan" +}, { "environment" : "ANY", "focal_point_type" : "network", @@ -135,5 +152,14 @@ "vnic-vservice" ], "name" : "network" +}, +{ + "name" : "instance", + "use_implicit_links" : true, + "link_types" : [ + "instance-network" + ], + "environment" : "implicit-links-ex", + "focal_point_type" : "instance" } ] diff --git a/app/install/db/constants.json b/app/install/db/constants.json index 6912eeb..8ea89e9 100644 --- a/app/install/db/constants.json +++ b/app/install/db/constants.json @@ -58,6 +58,27 @@ ], "name" : "log_levels" }, +{ + "data" : [ + { + "label" : "OpenStack", + "value" : "OpenStack" + }, + { + "label" : "Kubernetes", + "value" : "Kubernetes" + }, + { + "label" : "VMware", + "value" : "VMware" + }, + { + "label" : "Bare-metal", + "value" : "Bare-metal" + } + ], + "name" : "environment_types" +}, { "data" : [ { @@ -529,6 +550,10 @@ "value" : "10239", "label" : "10239" }, + { + "label" : "10307", + "value" : "10307" + }, { "value" : "10918", "label" : "10918" @@ -727,6 +752,14 @@ { "label" : "switch", "value" : "switch" + }, + { + "value" : "namespace", + "label" : "namespace" + }, + { + "value" : "namespaces_folder", + "label" : "namespaces_folder" } ] }, diff --git a/app/install/db/environments_config.json b/app/install/db/environments_config.json index d7157e7..80bc6aa 100644 --- a/app/install/db/environments_config.json +++ b/app/install/db/environments_config.json @@ -37,7 +37,8 @@ "server_name" : "sensu_server", "env_type" : "production", "provision" : "None", - "name" : "Monitoring", + "name" : "Monitoring", + "install_monitoring_client": false, "ssh_port" : "20022", "rabbitmq_pass" : "dummy_pwd", "ssh_password" : "dummy_pwd", @@ -55,7 +56,7 @@ } ], "enable_monitoring" : true, - "name" : "DEMO-ENVIRONMENT-SCHEME", + "name" : "DEMO-OpenStack", "distribution" : "Mirantis", "distribution_version" : "8.0", "last_scanned" : "filled-by-scanning", @@ -74,6 +75,93 @@ "wNLeBJxNDyw8G7Ssg" ] }, - "type" : "environment" + "type" : "environment", + "environment_type" : "OpenStack" +}, +{ + "user" : "wNLeBJxNDyw8G7Ssg", + "name" : "DEMO-Kubernetes", + "last_scanned" : "filled-by-scanning", + "auth" : { + "view-env" : [ + "wNLeBJxNDyw8G7Ssg" + ], + "edit-env" : [ + "wNLeBJxNDyw8G7Ssg" + ] + }, + "type_drivers" : "vxlan", + "distribution_version" : "8.0", + "enable_monitoring" : true, + "operational" : "stopped", + "mechanism_drivers" : [ + "OVS" + ], + "type" : "environment", + "distribution" : "Mirantis", + "listen" : true, + "configuration" : [ + { + "user" : "adminuser", + "name" : "OpenStack", + "pwd" : "dummy_pwd", + "host" : "10.0.0.1", + "admin_token" : "dummy_token", + "port" : "5000" + }, + { + "host" : "10.56.20.78", + "name" : "Kubernetes", + "user" : "koren", + "token" : "baba-token-xyz", + "port" : "6443" + }, + { + "user" : "mysqluser", + "name" : "mysql", + "pwd" : "dummy_pwd", + "port" : "3307", + "host" : "10.0.0.1" + }, + { + "user" : "sshuser", + "name" : "CLI", + "pwd" : "dummy_pwd", + "host" : "10.0.0.1" + }, + { + "user" : "rabbitmquser", + "name" : "AMQP", + "pwd" : "dummy_pwd", + "port" : "5673", + "host" : "10.0.0.1" + }, + { + "name" : "Monitoring", + "install_monitoring_client": false, + "api_port" : 4567, + "ssh_port" : "20022", + "rabbitmq_pass" : "dummy_pwd", + "env_type" : "production", + "rabbitmq_port" : "5671", + "server_ip" : "10.0.0.1", + "config_folder" : "/local_dir/sensu_config", + "type" : "Sensu", + "provision" : "None", + "ssh_user" : "root", + "ssh_password" : "dummy_pwd", + "rabbitmq_user" : "sensu", + "server_name" : "sensu_server" + }, + { + "user" : "admin", + "name" : "ACI", + "pwd" : "dummy_pwd", + "host" : "10.1.1.104" + } + ], + "app_path" : "/home/scan/calipso_prod/app", + "scanned" : false, + "environment_type" : "Kubernetes" } ] diff --git a/app/install/db/monitoring_config_templates.json b/app/install/db/monitoring_config_templates.json index 9bddfa2..b5c47df 100644 --- a/app/install/db/monitoring_config_templates.json +++ b/app/install/db/monitoring_config_templates.json @@ -310,6 +310,34 @@ "monitoring_system" : "sensu", "type" : "client_check_link_vnic-vconnector.json" }, +{ + "side" : "client", + "order" : "1", + "condition" : { + "mechanism_drivers" : [ + "OVS" + ] + }, + "config" : { + "checks" : { + "{objtype}_{objid}" : { + "interval" : 15, + "command" : "check_vconnector_ovs.py {name}", + "standalone" : true, + "type": "metric", + "subscribers" : [ + "base" + ], + "handlers" : [ + "file", + "osdna-monitor" + ] + } + } + }, + "monitoring_system" : "sensu", + "type" : "client_check_vconnector_ovs.json" +}, { "side" : "client", "order" : "1", @@ -394,5 +422,28 @@ }, "monitoring_system" : "sensu", "type" : "client_check_vservice.json" +}, +{ + "side" : "client", + "order" : "1", + "config" : { + "checks" : { + "{objtype}_{objid}" : { + "standalone" : true, + "interval" : 15, + "command" : "PYTHONPATH=/etc/sensu/plugins check_instance_communications.py {services_and_vnics}", + "handlers" : [ + "file", + "osdna-monitor" + ], + "type" : "metric", + "subscribers" : [ + "base" + ] + } + } + }, + "monitoring_system" : "sensu", + "type" : "client_check_instance.json" } ] diff --git a/app/install/db/supported_environments.json b/app/install/db/supported_environments.json index c2c376b..baa3150 100644 --- a/app/install/db/supported_environments.json +++ b/app/install/db/supported_environments.json @@ -12,6 +12,21 @@ "monitoring" : true } }, + { + "environment" : { + "distribution_version" : [ + "10307" + ], + "distribution" : "Mercury", + "type_drivers" : "vlan", + "mechanism_drivers" : "OVS" + }, + "features" : { + "scanning" : true, + "monitoring" : false, + "listening" : true + } + }, { "environment" : { "distribution" : "Devstack", diff --git a/app/monitoring/checks/check_instance_communictions.py b/app/monitoring/checks/check_instance_communictions.py new file mode 100644 index 0000000..d3a94b7 --- /dev/null +++ b/app/monitoring/checks/check_instance_communictions.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### + +# find status of instance network +# For each instance vNIC - take the MAC address +# For each vService in the same network as the instance, +# use local_service_id attribute in the following command in the network node: +# "ip netns exec arp -n" +# look for the instance vNIC's mac_address to appear in the response +# for each mac_address: +# - if Flag 'C' = 'Complete' - mark result OK for that instance, +# - 'I' = 'Incomplete' - mark as 'warn', +# - no mac_address mark as 'error' + +import sys +import subprocess + +from binary_converter import binary2str + + +arp_headers = ['Address', 'HWtype', 'HWaddress', 'Flags', 'Mask', 'Iface'] +arp_mac_pos = arp_headers.index('HWaddress') +arp_flags_pos = arp_headers.index('Flags') + + +def check_vnic_tuple(vnic_and_service: str): + tuple_parts = vnic_and_service.split(',') + local_service_id = tuple_parts[0] + mac_address = tuple_parts[1] + check_output = None + try: + netns_cmd = 'ip netns exec {} arp -n'.format(local_service_id) + check_output = 'MAC={}, local_service_id={}\n'\ + .format(mac_address, local_service_id) + netns_out = subprocess.check_output([netns_cmd], + stderr=subprocess.STDOUT, + shell=True) + netns_out = binary2str(netns_out) + check_output += '{}\n'.format(netns_out) + netns_lines = netns_out.splitlines() + if not netns_lines or \ + netns_lines[0].endswith('No such file or directory'): + check_rc = 2 + else: + mac_found = False + flags = None + for l in netns_lines: + line_parts = l.split() + line_mac = line_parts[arp_mac_pos] + if len(line_parts) > arp_mac_pos and line_mac == mac_address: + mac_found = True + flags = line_parts[arp_flags_pos] + break + if mac_found: + check_rc = 1 if flags == 'I' else 0 + else: + check_rc = 2 + except subprocess.CalledProcessError as e: + check_output = str(e) + check_rc = 2 + return check_rc, check_output + + +if len(sys.argv) < 2: + print('usage: ' + sys.argv[0] + + ' ,[;<>,<>]...') + exit(1) + +rc = 0 +output = '' +vnics = str(sys.argv[1]).split(';') +for vnic_tuple in vnics: + tuple_ret, out = check_vnic_tuple(vnic_tuple) + rc = min(rc, tuple_ret) + output += out +print(output) +exit(rc) diff --git a/app/monitoring/checks/check_vconnector.py b/app/monitoring/checks/check_vconnector.py new file mode 100644 index 0000000..237a195 --- /dev/null +++ b/app/monitoring/checks/check_vconnector.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### + +# find status of vconnector +# vconnector object name defines name of bridge +# use "brctl showmacs ", return ERROR if 'No such device' is returned + +import sys +import subprocess + +from binary_converter import binary2str + + +if len(sys.argv) < 2: + print('usage: ' + sys.argv[0] + ' ') + exit(1) +bridge_name = str(sys.argv[1]) + +rc = 0 + +cmd = None +out = '' +try: + cmd = "brctl showmacs {}".format(bridge_name) + out = subprocess.check_output([cmd], + stderr=subprocess.STDOUT, + shell=True) + out = binary2str(out) + lines = out.splitlines() + if not lines or lines[0].endswith('No such device'): + rc = 2 + else: + print(out) +except subprocess.CalledProcessError as e: + rc = 2 + out = str(e) + +if rc != 0: + print('Failed to find vConnector {}:\n{}\n' + .format(bridge_name, out)) + +exit(rc) diff --git a/app/monitoring/handlers/handle_vconnector.py b/app/monitoring/handlers/handle_vconnector.py new file mode 100644 index 0000000..85ee05f --- /dev/null +++ b/app/monitoring/handlers/handle_vconnector.py @@ -0,0 +1,28 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +# handle monitoring event for pNIC objects + +from monitoring.handlers.monitoring_check_handler import MonitoringCheckHandler +from utils.special_char_converter import SpecialCharConverter + + +class HandleVconnector(MonitoringCheckHandler): + + def handle(self, obj_id, check_result): + object_id = obj_id[:obj_id.index('-')] + mac = obj_id[obj_id.index('-')+1:] + converter = SpecialCharConverter() + mac_address = converter.decode_special_characters(mac) + object_id += '-' + mac_address + doc = self.doc_by_id(object_id) + if not doc: + return 1 + self.keep_result(doc, check_result) + return check_result['status'] diff --git a/app/monitoring/handlers/monitor.py b/app/monitoring/handlers/monitor.py index 9caed74..2495110 100755 --- a/app/monitoring/handlers/monitor.py +++ b/app/monitoring/handlers/monitor.py @@ -12,11 +12,15 @@ # handle monitoring events import argparse +import datetime import json import sys +from discover.configuration import Configuration +from monitoring.handlers.monitoring_check_handler import MonitoringCheckHandler from utils.inventory_mgr import InventoryMgr from utils.mongo_access import MongoAccess +from utils.special_char_converter import SpecialCharConverter from utils.util import ClassResolver @@ -32,7 +36,9 @@ class Monitor: MongoAccess.set_config_file(self.args.mongo_config) self.inv = InventoryMgr() self.inv.set_collections(self.args.inventory) + self.configuration = Configuration() self.input_text = None + self.converter = SpecialCharConverter() def get_args(self): parser = argparse.ArgumentParser() @@ -125,13 +131,83 @@ class Monitor: return handler def get_handler(self, check_type, obj_type): - basic_handling_types = ['vedge', 'vservice'] + basic_handling_types = ['instance', 'vedge', 'vservice', 'vconnector'] if obj_type not in basic_handling_types: return self.get_handler_by_type(check_type, obj_type) from monitoring.handlers.basic_check_handler \ import BasicCheckHandler return BasicCheckHandler(self.args) + def check_link_interdependency_for(self, + object_id: str, + from_type: str=None, + to_type: str=None): + if from_type is not None and to_type is not None or \ + from_type is None and to_type is None: + raise ValueError('check_link_interdependency: ' + 'supply one of from_type/to_type') + obj_id = self.converter.decode_special_characters(object_id) + obj = self.inv.get_by_id(environment=self.args.env, item_id=obj_id) + if not obj: + self.inv.log.error('check_link_interdependency: ' + 'failed to find object with ID: {}' + .format(object_id)) + return + if 'status' not in obj: + return + id_attr = 'source_id' if from_type is None else 'target_id' + link_type = '{}-{}'.format( + from_type if from_type is not None else obj['type'], + to_type if to_type is not None else obj['type']) + condition = { + 'environment': self.args.env, + 'link_type': link_type, + id_attr: obj_id + } + link = self.inv.find_one(search=condition, collection='links') + if not link: + self.inv.log.error('check_link_interdependency: ' + 'failed to find {} link with {}: {}' + .format(link_type, id_attr, obj_id)) + return + other_id_attr = '{}_id' \ + .format('source' if from_type is not None else 'target') + other_obj = self.inv.get_by_id(environment=self.args.env, + item_id=link[other_id_attr]) + if not other_obj: + self.inv.log.error('check_link_interdependency: ' + 'failed to find {} with ID: {} (link type: {})' + .format(other_id_attr, link[other_id_attr], + link_type)) + return + if 'status' not in other_obj: + return + status = 'Warning' + if obj['status'] == 'OK' and other_obj['status'] == 'OK': + status = 'OK' + elif obj['status'] == 'OK' and other_obj['status'] == 'OK': + status = 'OK' + link['status'] = status + time_format = MonitoringCheckHandler.TIME_FORMAT + timestamp1 = obj['status_timestamp'] + t1 = datetime.datetime.strptime(timestamp1, time_format) + timestamp2 = other_obj['status_timestamp'] + t2 = datetime.datetime.strptime(timestamp2, time_format) + timestamp = max(t1, t2) + link['status_timestamp'] = datetime.datetime.strftime(timestamp, + time_format) + self.inv.set(link, self.inv.collections['links']) + + def check_link_interdependency(self, object_id: str, object_type: str): + conf = self.configuration.get_env_config() + if 'OVS' in conf['mechanism_drivers']: + if object_type == 'vedge': + self.check_link_interdependency_for(object_id, + to_type='host_pnic') + if object_type == 'host_pnic': + self.check_link_interdependency_for(object_id, + from_type='vedge') + def process_input(self): check_result_full = json.loads(self.input_text) check_client = check_result_full['client'] @@ -142,14 +218,19 @@ class Monitor: monitor.find_object_type_and_id(name) if 'environment' in check_client: self.args.env = check_client['environment'] + else: + raise ValueError('Check client should contain environment name') + self.configuration.use_env(self.args.env) check_handler = self.get_handler(check_type, object_type) if check_handler: check_handler.handle(object_id, check_result) + self.check_link_interdependency(object_id, object_type) def process_check_result(self): self.read_input() self.process_input() + monitor = Monitor() monitor.process_check_result() diff --git a/app/monitoring/handlers/monitoring_check_handler.py b/app/monitoring/handlers/monitoring_check_handler.py index 1436a46..c1f70fb 100644 --- a/app/monitoring/handlers/monitoring_check_handler.py +++ b/app/monitoring/handlers/monitoring_check_handler.py @@ -21,13 +21,13 @@ from utils.logging.full_logger import FullLogger from utils.special_char_converter import SpecialCharConverter from utils.string_utils import stringify_datetime -TIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z' SOURCE_SYSTEM = 'Sensu' ERROR_LEVEL = ['info', 'warn', 'error'] class MonitoringCheckHandler(SpecialCharConverter): STATUS_LABEL = ['OK', 'Warning', 'Error'] + TIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z' def __init__(self, args): super().__init__() @@ -61,7 +61,7 @@ class MonitoringCheckHandler(SpecialCharConverter): else status if status_text: doc['status_text'] = status_text - doc['status_timestamp'] = strftime(TIME_FORMAT, timestamp) + doc['status_timestamp'] = strftime(self.TIME_FORMAT, timestamp) if 'link_type' in doc: self.inv.write_link(doc) else: diff --git a/app/monitoring/setup/monitoring_check_handler.py b/app/monitoring/setup/monitoring_check_handler.py index c453439..d1b863d 100644 --- a/app/monitoring/setup/monitoring_check_handler.py +++ b/app/monitoring/setup/monitoring_check_handler.py @@ -8,7 +8,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 # ############################################################################### from monitoring.setup.monitoring_handler import MonitoringHandler -from utils.inventory_mgr import InventoryMgr from utils.special_char_converter import SpecialCharConverter @@ -28,14 +27,13 @@ class MonitoringCheckHandler(MonitoringHandler, SpecialCharConverter): type_str = values['check_type'] if 'check_type' in values else \ (o['type'] if 'type' in o else 'link_' + o['link_type']) file_type = 'client_check_' + type_str + '.json' - host = o['host'] + host = values['host'] if 'host' in values else o['host'] sub_dir = '/host/' + host content = self.prepare_config_file( file_type, {'side': 'client', 'type': file_type}) # need to put this content inside client.json file client_file = 'client.json' - host = o['host'] client_file_content = self.get_config_from_db(host, client_file) # merge checks attribute from current content into client.json checks = client_file_content['config']['checks'] \ @@ -53,3 +51,14 @@ class MonitoringCheckHandler(MonitoringHandler, SpecialCharConverter): } content = client_file_content self.write_config_file(client_file, sub_dir, host, content) + + def get_check_from_db(self, o, postfix=''): + client_config = self.get_config_from_db(o. get('host', ''), + 'client.json') + if not client_config: + return {} + checks = client_config.get('config', {}).get('checks', {}) + objid = self.encode_special_characters(o.get('id', '')) + object_check_id = '{}_{}{}'.format(o.get('type'), objid, postfix) + check = checks.get(object_check_id, {}) + return check diff --git a/app/monitoring/setup/monitoring_host.py b/app/monitoring/setup/monitoring_host.py index 9450cf6..0b9f420 100644 --- a/app/monitoring/setup/monitoring_host.py +++ b/app/monitoring/setup/monitoring_host.py @@ -12,6 +12,7 @@ import os from os.path import join, sep from monitoring.setup.monitoring_handler import MonitoringHandler +from monitoring.setup.sensu_client_installer import SensuClientInstaller RABBITMQ_CONFIG_FILE = 'rabbitmq.json' RABBITMQ_CONFIG_ATTR = 'rabbitmq' @@ -27,13 +28,14 @@ class MonitoringHost(MonitoringHandler): # add monitoring setup for remote host def create_setup(self, o): + host_id = o.get('host', '') + self.install_sensu_on_host(host_id) sensu_host_files = [ 'transport.json', 'rabbitmq.json', 'client.json' ] server_ip = self.env_monitoring_config['server_ip'] - host_id = o['host'] sub_dir = join('/host', host_id) config = copy.copy(self.env_monitoring_config) env_name = self.configuration.env_name @@ -88,3 +90,10 @@ class MonitoringHost(MonitoringHandler): # this configuration requires SSL # keep the path of the files for later use self.fetch_ssl_files.append(path) + + def install_sensu_on_host(self, host_id): + auto_install = self.env_monitoring_config \ + .get('install_monitoring_client', False) + if auto_install: + installer = SensuClientInstaller(self.env, host_id) + installer.install() diff --git a/app/monitoring/setup/monitoring_instance.py b/app/monitoring/setup/monitoring_instance.py new file mode 100644 index 0000000..b376441 --- /dev/null +++ b/app/monitoring/setup/monitoring_instance.py @@ -0,0 +1,67 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +from monitoring.setup.monitoring_simple_object import MonitoringSimpleObject + + +class MonitoringInstance(MonitoringSimpleObject): + + def __init__(self, env): + super().__init__(env) + + # monitoring setup for instance can only be done after vNIC is found + # and network for vNIC is set, so the first call will not do anything + def create_setup(self, instance: dict): + vnics = self.inv.find_items({ + 'environment': self.get_env(), + 'type': 'vnic', + 'vnic_type': 'instance_vnic', + 'id_path': {'$regex': '^{}/'.format(instance['id_path'])} + }) + for vnic in vnics: + self.add_instance_communication_monitoring(instance, vnic) + + # for instance we keep list of instance vNICs and services to use in call + # to check_instance_communications.py + # add this vNIC to the list with the corresponding + def add_instance_communication_monitoring(self, instance: dict, vnic: dict): + service = self.get_service_for_vnic(vnic) + if not service: + return + check = self.get_check_from_db(instance) + services_and_vnics = check.get('command', '') + if services_and_vnics: + services_and_vnics = \ + services_and_vnics[services_and_vnics.index('.py')+4:] + services_and_vnics_list = \ + services_and_vnics.split(';') if services_and_vnics \ + else [] + service_and_vnic = '{},{}'.format(service.get('local_service_id', ''), + vnic.get('id')) + if service_and_vnic in services_and_vnics_list: + return # we already have this tuple define + services_and_vnics_list.append(service_and_vnic) + values = { + 'objtype': 'instance', + 'objid': self.encode_special_characters(instance['id']), + 'host': service['host'], + 'services_and_vnics': ';'.join(services_and_vnics_list) + } + self.create_monitoring_for_object(instance, values) + + def get_service_for_vnic(self, vnic: dict) -> dict: + services = self.inv.find_items({'environment': self.get_env(), + 'type': 'vservice', + 'network': vnic.get('network', '')}) + if not services: + return {} + dhcp = next(s for s in services if s.get('service_type') == 'dhcp') + if dhcp: + return dhcp # If we have both DHCP and router, return the DHCP + return services[0] # currently only DHCP and router services diff --git a/app/monitoring/setup/monitoring_setup_manager.py b/app/monitoring/setup/monitoring_setup_manager.py index bc4fe01..8b7693a 100644 --- a/app/monitoring/setup/monitoring_setup_manager.py +++ b/app/monitoring/setup/monitoring_setup_manager.py @@ -11,12 +11,14 @@ from monitoring.setup.monitoring_handler import MonitoringHandler from monitoring.setup.monitoring_host import MonitoringHost +from monitoring.setup.monitoring_instance import MonitoringInstance from monitoring.setup.monitoring_link_vnic_vconnector \ import MonitoringLinkVnicVconnector from monitoring.setup.monitoring_pnic import MonitoringPnic from monitoring.setup.monitoring_otep import MonitoringOtep from monitoring.setup.monitoring_vedge import MonitoringVedge from monitoring.setup.monitoring_vnic import MonitoringVnic +from monitoring.setup.monitoring_vconnector import MonitoringVconnector from monitoring.setup.monitoring_vservice import MonitoringVservice @@ -31,7 +33,9 @@ class MonitoringSetupManager(MonitoringHandler): "otep": MonitoringOtep(env), "vedge": MonitoringVedge(env), "host_pnic": MonitoringPnic(env), + "instance": MonitoringInstance(env), "vnic": MonitoringVnic(env), + "vconnector": MonitoringVconnector(env), "vservice": MonitoringVservice(env), "vnic-vconnector": MonitoringLinkVnicVconnector(env)} diff --git a/app/monitoring/setup/monitoring_vconnector.py b/app/monitoring/setup/monitoring_vconnector.py new file mode 100644 index 0000000..9ddc6af --- /dev/null +++ b/app/monitoring/setup/monitoring_vconnector.py @@ -0,0 +1,24 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +from monitoring.setup.monitoring_simple_object import MonitoringSimpleObject + + +class MonitoringVconnector(MonitoringSimpleObject): + + # add monitoring setup for remote host + def create_setup(self, o): + type = 'vconnector' + env_config = self.configuration.get_env_config() + vpp_or_ovs = 'vpp' if 'VPP' in env_config['mechanism_drivers'] \ + else 'ovs' + type_str = '{}_{}'.format(type, vpp_or_ovs) + self.setup(type, o, values={'check_type': type_str, + 'name': o['name']}) + diff --git a/app/monitoring/setup/sensu_client_installer.py b/app/monitoring/setup/sensu_client_installer.py new file mode 100644 index 0000000..72a8bbb --- /dev/null +++ b/app/monitoring/setup/sensu_client_installer.py @@ -0,0 +1,158 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +import os.path +from pkg_resources import parse_version + +from monitoring.setup.monitoring_handler import MonitoringHandler +from utils.inventory_mgr import InventoryMgr + + +class SensuClientInstaller(MonitoringHandler): + + UBUNTU = 'ubuntu' + CENTOS = 'centos' + + INSTALL_CMD = { + UBUNTU: 'dpkg -i {}', + CENTOS: 'rpm -i {}' + } + PERMISSIONS_CMD = { + UBUNTU: '', + CENTOS: 'usermod -aG wheel sensu' + } + SUDOERS_FILE = '/etc/sudoers' + + available_downloads = {} + + def __init__(self, env: str, host_id: str): + super().__init__(env) + self.cli_ssh = self.get_ssh(host_id) + self.inv = InventoryMgr() + self.host = self.inv.get_by_id(env, host_id) + self.server = self.env_monitoring_config.get('server_ip') + self.server_cli_ssh = self.get_ssh(self.server) + self.ubuntu_dist = None + self.required_package = None + + def install(self): + pkg_to_install = self.get_pkg_to_install() + if not pkg_to_install: + return + try: + self.fetch_package(pkg_to_install) + self.install_package(pkg_to_install) + self.set_permissions() + except SystemError as e: + self.log.error('Sensu install on host {} failed: {}' + .format(self.host, str(e))) + return + + @staticmethod + def get_attr_from_output(output_lines: list, attr: str) -> str: + matches = [l for l in output_lines if l.startswith(attr)] + if not matches: + return '' + line = matches[0] + return SensuClientInstaller.get_attr_from_output_line(line) + + @staticmethod + def get_attr_from_output_line(output_line: str): + val = output_line[output_line.index(':')+1:].strip() + return val + + INSTALLED = 'Installed: ' + CANDIDATE = 'Candidate: ' + SENSU_DIR = '/opt/sensu' + SENSU_PKG_DIR = '/etc/sensu/pkg' + SENSU_PKG_DIR_LOCAL = '/tmp/sensu_pkg' + SENSU_VERSION_FILE = '/opt/sensu/version-manifest.txt' + + def find_available_downloads(self): + ls_output = self.server_cli_ssh.exec('ls -R {}' + .format(self.SENSU_PKG_DIR)) + ls_lines = ls_output.splitlines() + last_target_dir = None + for line in ls_lines: + if line[-4:] in ['/32:', '/64:']: + last_target_dir = line.replace(self.SENSU_PKG_DIR, '') + continue + elif last_target_dir: + target_dir = last_target_dir.strip(os.path.sep).strip(':') + self.available_downloads[target_dir] = line + last_target_dir = None + else: + last_target_dir = None + + def find_available_package(self, os_details: dict): + if not self.available_downloads: + self.find_available_downloads() + distribution = os_details['ID'] + version = os_details['version'].split()[-2].lower() + arch = os_details['architecure'][-2:] + download_dir = os.path.join(distribution, version, arch) + download_file = self.available_downloads.get(download_dir) + full_path = '' if not download_file \ + else os.path.join(self.SENSU_PKG_DIR, download_dir, download_file) + return download_file, full_path + + @staticmethod + def find_available_version(download_file: str) -> str: + ver = download_file.replace('sensu', '').strip('-_') + ver = ver[:ver.index('-')] + return ver + + def get_pkg_to_install(self) -> str: + if self.provision == self.provision_levels['none']: + return '' + if not self.host: + return '' + supported_os = [self.UBUNTU, self.CENTOS] + distribution = self.host['OS']['ID'] + if distribution not in [self.UBUNTU, self.CENTOS]: + self.log.error('Sensu client auto-install only supported for: {}' + .format(', '.join(supported_os))) + return '' + cmd = 'if [ -d {} ]; then head -1 {} | sed "s/sensu //"; fi' \ + .format(self.SENSU_DIR, self.SENSU_VERSION_FILE) + installed_version = self.cli_ssh.exec(cmd).strip() + os_details = self.host['OS'] + available_pkg, pkg_path = self.find_available_package(os_details) + available_version = self.find_available_version(available_pkg) + if parse_version(available_version) <= parse_version(installed_version): + return '' + return pkg_path + + def get_local_path(self, pkg_to_install: str): + return os.path.join(self.SENSU_PKG_DIR_LOCAL, + os.path.basename(pkg_to_install)) + + def fetch_package(self, pkg_to_install: str): + self.make_directory(self.SENSU_PKG_DIR_LOCAL) + self.get_file(self.server, pkg_to_install, + self.get_local_path(pkg_to_install)) + local_path = self.get_local_path(pkg_to_install) + self.copy_to_remote_host(self.host['host'], + local_path=local_path, + remote_path=local_path) + + def install_package(self, pkg_to_install): + local_path = self.get_local_path(pkg_to_install) + install_cmd = self.INSTALL_CMD[self.host['OS']['ID']] + self.cli_ssh.exec(install_cmd.format(local_path)) + + def set_permissions(self): + cmd = self.PERMISSIONS_CMD[self.host['OS']['ID']] + if cmd: + self.cli_ssh.exec(cmd) + # add to sudoers file + sudoer_permission = 'sensu ALL=(ALL) NOPASSWD: ALL' + sudoer_cmd = 'grep --silent -w sensu {} || echo "{}" >> {}'\ + .format(self.SUDOERS_FILE, sudoer_permission, self.SUDOERS_FILE) + self.cli_ssh.exec(sudoer_cmd) diff --git a/app/test/api/responders_test/resource/test_clique_types.py b/app/test/api/responders_test/resource/test_clique_types.py index f5e331e..5e52cea 100644 --- a/app/test/api/responders_test/resource/test_clique_types.py +++ b/app/test/api/responders_test/resource/test_clique_types.py @@ -17,10 +17,17 @@ from unittest.mock import patch class TestCliqueTypes(TestBase): - def test_get_clique_types_list_without_env_name(self): - self.validate_get_request(clique_types.URL, - params={}, - expected_code=base.BAD_REQUEST_CODE) + @patch(base.RESPONDER_BASE_READ) + def test_get_all_clique_types_list(self, read): + self.validate_get_request( + clique_types.URL, + params={}, + mocks={ + read: clique_types.CLIQUE_TYPES + }, + expected_code=base.SUCCESSFUL_CODE, + expected_response=clique_types.CLIQUE_TYPES_RESPONSE + ) def test_get_clique_types_with_invalid_filter(self): self.validate_get_request(clique_types.URL, @@ -53,6 +60,28 @@ class TestCliqueTypes(TestBase): expected_code=base.SUCCESSFUL_CODE ) + def test_get_clique_type_with_insufficient_configuration(self): + self.validate_get_request( + clique_types.URL, + params={ + "distribution_version": base.CORRECT_DIST_VER, + }, + expected_code=base.BAD_REQUEST_CODE + ) + + @patch(base.RESPONDER_BASE_READ) + def test_get_clique_type_with_correct_configuration(self, read): + self.validate_get_request( + clique_types.URL, + params=clique_types.TEST_CONFIGURATION, + mocks={ + read: clique_types.CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION + }, + expected_response=clique_types. + CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION_RESPONSE, + expected_code=base.SUCCESSFUL_CODE + ) + def test_get_clique_types_list_with_wrong_focal_point_type(self): self.validate_get_request(clique_types.URL, params={ @@ -204,9 +233,53 @@ class TestCliqueTypes(TestBase): body=json.dumps(clique_types.NON_DICT_CLIQUE_TYPE), expected_code=base.BAD_REQUEST_CODE) - def test_post_clique_type_without_env_name(self): + @patch(base.RESPONDER_BASE_CHECK_ENVIRONMENT_NAME) + def test_post_clique_type_with_reserved_env_name(self, check_env_name): + self.validate_post_request( + clique_types.URL, + mocks={ + check_env_name: True + }, + body=json.dumps(clique_types.CLIQUE_TYPE_WITH_RESERVED_NAME), + expected_code=base.BAD_REQUEST_CODE + ) + + def test_post_clique_type_without_env_name_and_configuration(self): + self.validate_post_request( + clique_types.URL, + body=json.dumps(clique_types.CLIQUE_TYPE_WITHOUT_ENV_NAME_AND_CONF), + expected_code=base.BAD_REQUEST_CODE + ) + + def test_post_clique_type_with_both_env_name_and_configuration(self): + self.validate_post_request( + clique_types.URL, + body=json.dumps( + clique_types.CLIQUE_TYPE_WITH_BOTH_ENV_AND_CONF), + expected_code=base.BAD_REQUEST_CODE + ) + + @patch(base.RESPONDER_BASE_CHECK_ENVIRONMENT_NAME) + def test_post_clique_type_with_insufficient_configuration(self, check_env_name): + self.validate_post_request( + clique_types.URL, + mocks={ + check_env_name: True + }, + body=json.dumps(clique_types.CLIQUE_TYPE_WITH_INSUFFICIENT_CONF), + expected_code=base.BAD_REQUEST_CODE + ) + + @patch(base.RESPONDER_BASE_READ) + def test_post_clique_type_with_duplicate_configuration(self, read): + data = clique_types.CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION[0] + resp = clique_types.CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION_RESPONSE + test_data = self.get_updated_data(data, deleted_keys=['id']) self.validate_post_request(clique_types.URL, - body=json.dumps(clique_types.CLIQUE_TYPE_WITHOUT_ENVIRONMENT), + body=json.dumps(test_data), + mocks={ + read: resp, + }, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_CHECK_ENVIRONMENT_NAME) @@ -231,6 +304,17 @@ class TestCliqueTypes(TestBase): CLIQUE_TYPE_WITH_WRONG_FOCAL_POINT_TYPE), expected_code=base.BAD_REQUEST_CODE) + @patch(base.RESPONDER_BASE_READ) + def test_post_clique_type_with_duplicate_focal_point_type(self, read): + test_data = self.get_updated_data(clique_types.CLIQUE_TYPE, + updates={'name': 'test-name'}) + self.validate_post_request(clique_types.URL, + body=json.dumps(test_data), + mocks={ + read: [clique_types.CLIQUE_TYPE], + }, + expected_code=base.BAD_REQUEST_CODE) + def test_post_clique_type_without_link_types(self): self.validate_post_request(clique_types.URL, body=json.dumps( @@ -255,6 +339,18 @@ class TestCliqueTypes(TestBase): body=json.dumps(clique_types.CLIQUE_TYPE_WITHOUT_NAME), expected_code=base.BAD_REQUEST_CODE) + def test_post_clique_type_with_wrong_mechanism_drivers(self): + self.validate_post_request(clique_types.URL, + body=json.dumps(clique_types. + CLIQUE_TYPE_WITH_WRONG_MECH_DRIVERS), + expected_code=base.BAD_REQUEST_CODE) + + def test_post_clique_type_with_wrong_type_drivers(self): + self.validate_post_request(clique_types.URL, + body=json.dumps(clique_types. + CLIQUE_TYPE_WITH_WRONG_TYPE_DRIVERS), + expected_code=base.BAD_REQUEST_CODE) + @patch(base.RESPONDER_BASE_CHECK_ENVIRONMENT_NAME) @patch(base.RESPONDER_BASE_WRITE) def test_post_clique_type(self, write, check_environment_name): diff --git a/app/test/api/responders_test/resource/test_environment_configs.py b/app/test/api/responders_test/resource/test_environment_configs.py index 6356f06..4405f2b 100644 --- a/app/test/api/responders_test/resource/test_environment_configs.py +++ b/app/test/api/responders_test/resource/test_environment_configs.py @@ -9,7 +9,9 @@ ############################################################################### import json +from api.responders.resource.environment_configs import EnvironmentConfigs from test.api.responders_test.test_data import base +from test.api.responders_test.test_data.base import CONSTANTS_BY_NAMES from test.api.test_base import TestBase from test.api.responders_test.test_data import environment_configs from utils.constants import EnvironmentFeatures @@ -23,35 +25,25 @@ class TestEnvironmentConfigs(TestBase): def test_get_environment_configs_list(self, read): self.validate_get_request(environment_configs.URL, params={}, - mocks={ - read: environment_configs.ENV_CONFIGS - }, + mocks={read: environment_configs.ENV_CONFIGS}, expected_code=base.SUCCESSFUL_CODE, expected_response=environment_configs. - ENV_CONFIGS_RESPONSE - ) + ENV_CONFIGS_RESPONSE) def test_get_environment_configs_list_with_invalid_filters(self): self.validate_get_request(environment_configs.URL, - params={ - "unknown": "unknown" - }, + params={"unknown": "unknown"}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_name(self, read): + mocks = {read: environment_configs.ENV_CONFIGS_WITH_SPECIFIC_NAME} self.validate_get_request(environment_configs.URL, - params={ - "name": environment_configs.NAME - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_NAME - }, + params={"name": environment_configs.NAME}, + mocks=mocks, expected_code=base.SUCCESSFUL_CODE, expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_NAME[0] - ) + ENV_CONFIGS_WITH_SPECIFIC_NAME[0]) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_unknown_name(self, read): @@ -82,193 +74,151 @@ class TestEnvironmentConfigs(TestBase): @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_distribution(self, read): + config = environment_configs.ENV_CONFIGS_WITH_SPECIFIC_DISTRIBUTION + config_response = \ + environment_configs.ENV_CONFIGS_WITH_SPECIFIC_DISTRIBUTION_RESPONSE self.validate_get_request(environment_configs.URL, params={ "distribution": environment_configs. CORRECT_DISTRIBUTION }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_DISTRIBUTION - }, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_DISTRIBUTION_RESPONSE) + expected_response=config_response) def test_get_environment_configs_list_with_wrong_mechanism_driver(self): + config = environment_configs.WRONG_MECHANISM_DRIVER self.validate_get_request(environment_configs.URL, - params={ - "mechanism_drivers": - environment_configs.WRONG_MECHANISM_DRIVER - }, + params={"mechanism_drivers": config}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_mechanism_driver(self, read): + mechanism = environment_configs.CORRECT_MECHANISM_DRIVER + config = environment_configs.ENV_CONFIGS_WITH_SPECIFIC_MECHANISM_DRIVER + config_response = environment_configs.\ + ENV_CONFIGS_WITH_SPECIFIC_MECHANISM_DRIVER_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "mechanism_drivers": - environment_configs.CORRECT_MECHANISM_DRIVER - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_MECHANISM_DRIVER - }, + params={"mechanism_drivers": mechanism}, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_MECHANISM_DRIVER_RESPONSE - ) + expected_response=config_response) def test_get_environment_configs_list_with_wrong_type_driver(self): + driver = environment_configs.WRONG_TYPE_DRIVER self.validate_get_request(environment_configs.URL, - params={ - "type_drivers": - environment_configs.WRONG_TYPE_DRIVER - }, + params={"type_drivers": driver}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_type_driver(self, read): + driver = environment_configs.CORRECT_TYPE_DRIVER + config = environment_configs.ENV_CONFIGS_WITH_SPECIFIC_TYPE_DRIVER + config_response = environment_configs.\ + ENV_CONFIGS_WITH_SPECIFIC_TYPE_DRIVER_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "type_drivers": - environment_configs.CORRECT_TYPE_DRIVER - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_TYPE_DRIVER - }, + params={"type_drivers": driver}, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_TYPE_DRIVER_RESPONSE + expected_response=config_response ) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_user(self, read): + config = environment_configs.ENV_CONFIGS_WITH_SPECIFIC_USER + config_response = \ + environment_configs.ENV_CONFIGS_WITH_SPECIFIC_USER_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "user": environment_configs.USER - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_USER - }, + params={"user": environment_configs.USER}, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_USER_RESPONSE - ) + expected_response=config_response) def test_get_environment_configs_list_with_non_bool_listen(self): self.validate_get_request(environment_configs.URL, - params={ - "listen": environment_configs.NON_BOOL_LISTEN - }, + params={"listen": environment_configs. + NON_BOOL_LISTEN}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_bool_listen(self, read): + config = environment_configs.ENV_CONFIGS_WITH_SPECIFIC_LISTEN + config_response = \ + environment_configs.ENV_CONFIGS_WITH_SPECIFIC_LISTEN_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "listen": environment_configs.BOOL_LISTEN - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_LISTEN - }, + params={"listen": environment_configs. + BOOL_LISTEN}, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_LISTEN_RESPONSE - ) + expected_response=config_response) def test_get_environment_configs_list_with_non_bool_scanned(self): self.validate_get_request(environment_configs.URL, - params={ - "scanned": environment_configs. - NON_BOOL_SCANNED - }, + params={"scanned": environment_configs. + NON_BOOL_SCANNED}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_bool_scanned(self, read): + config = environment_configs.ENV_CONFIGS_WITH_SPECIFIC_SCANNED + config_response = \ + environment_configs.ENV_CONFIGS_WITH_SPECIFIC_SCANNED_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "scanned": environment_configs.BOOL_SCANNED - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_SCANNED - }, + params={"scanned": environment_configs. + BOOL_SCANNED}, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_SCANNED_RESPONSE + expected_response=config_response ) - def test_get_environment_configs_list_with_non_bool_monitoring_setup_done(self): + def test_get_env_configs_list_with_non_bool_monitoring_setup_done(self): self.validate_get_request(environment_configs.URL, - params={ - "listen": environment_configs. - NON_BOOL_MONITORING_SETUP_DONE - }, + params={"listen": environment_configs. + NON_BOOL_MONITORING_SETUP_DONE}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) - def test_get_environment_configs_list_with_bool_monitoring_setup_done(self, read): + def test_get_environment_configs_list_with_bool_monitoring_setup_done(self, + read): + config = environment_configs.\ + ENV_CONFIGS_WITH_SPECIFIC_MONITORING_SETUP_DONE + config_response = environment_configs.\ + ENV_CONFIGS_WITH_SPECIFIC_MONITORING_SETUP_DONE_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "scanned": environment_configs. - BOOL_MONITORING_SETUP_DONE - }, - mocks={ - read: environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_MONITORING_SETUP_DONE - }, + params={"scanned": environment_configs. + BOOL_MONITORING_SETUP_DONE}, + mocks={read: config}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_WITH_SPECIFIC_MONITORING_SETUP_DONE_RESPONSE - ) + expected_response=config_response) def test_get_environment_configs_list_with_non_int_page(self): self.validate_get_request(environment_configs.URL, - params={ - "page": base.NON_INT_PAGE - }, + params={"page": base.NON_INT_PAGE}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_int_page(self, read): + config_response = environment_configs.ENV_CONFIGS_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "page": base.INT_PAGE - }, - mocks={ - read: environment_configs.ENV_CONFIGS - }, + params={"page": base.INT_PAGE}, + mocks={read: environment_configs.ENV_CONFIGS}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_RESPONSE - ) + expected_response=config_response) def test_get_environment_configs_list_with_non_int_page_size(self): self.validate_get_request(environment_configs.URL, - params={ - "page_size": base.NON_INT_PAGESIZE - }, + params={"page_size": base.NON_INT_PAGESIZE}, expected_code=base.BAD_REQUEST_CODE) @patch(base.RESPONDER_BASE_READ) def test_get_environment_configs_list_with_int_page_size(self, read): + config_response = environment_configs.ENV_CONFIGS_RESPONSE self.validate_get_request(environment_configs.URL, - params={ - "page_size": base.INT_PAGESIZE - }, - mocks={ - read: environment_configs.ENV_CONFIGS - }, + params={"page_size": base.INT_PAGESIZE}, + mocks={read: environment_configs.ENV_CONFIGS}, expected_code=base.SUCCESSFUL_CODE, - expected_response=environment_configs. - ENV_CONFIGS_RESPONSE - ) + expected_response=config_response) def test_post_environment_config_without_app_path(self): test_data = self.get_updated_data(environment_configs.ENV_CONFIG, @@ -292,8 +242,9 @@ class TestEnvironmentConfigs(TestBase): expected_code=base.BAD_REQUEST_CODE) def test_post_environment_config_with_wrong_distribution(self): + dist = environment_configs.WRONG_DISTRIBUTION test_data = self.get_updated_data(environment_configs.ENV_CONFIG, - updates={"distribution": environment_configs.WRONG_DISTRIBUTION}) + updates={"distribution": dist}) self.validate_post_request(environment_configs.URL, body=json.dumps(test_data), expected_code=base.BAD_REQUEST_CODE) @@ -306,8 +257,9 @@ class TestEnvironmentConfigs(TestBase): expected_code=base.BAD_REQUEST_CODE) def test_post_environment_config_with_wrong_listen(self): + listen_val = environment_configs.NON_BOOL_LISTEN test_data = self.get_updated_data(environment_configs.ENV_CONFIG, - updates={"listen": environment_configs.NON_BOOL_LISTEN}) + updates={"listen": listen_val}) self.validate_post_request(environment_configs.URL, body=json.dumps(test_data), expected_code=base.BAD_REQUEST_CODE) @@ -320,10 +272,10 @@ class TestEnvironmentConfigs(TestBase): expected_code=base.BAD_REQUEST_CODE) def test_post_environment_config_with_wrong_mechanism_driver(self): + mechanism = environment_configs.WRONG_MECHANISM_DRIVER test_data = self.get_updated_data(environment_configs.ENV_CONFIG, updates={ - "mechanism_drivers": - [environment_configs.WRONG_MECHANISM_DRIVER] + "mechanism_drivers": [mechanism] }) self.validate_post_request(environment_configs.URL, body=json.dumps(test_data), @@ -344,19 +296,17 @@ class TestEnvironmentConfigs(TestBase): expected_code=base.BAD_REQUEST_CODE) def test_post_environment_config_with_wrong_scanned(self): + scanned_val = environment_configs.NON_BOOL_SCANNED test_data = self.get_updated_data(environment_configs.ENV_CONFIG, - updates={ - "scanned": environment_configs.NON_BOOL_SCANNED - }) + updates={"scanned": scanned_val}) self.validate_post_request(environment_configs.URL, body=json.dumps(test_data), expected_code=base.BAD_REQUEST_CODE) def test_post_environment_config_with_wrong_last_scanned(self): + scanned_val = base.WRONG_FORMAT_TIME test_data = self.get_updated_data(environment_configs.ENV_CONFIG, - updates={ - "last_scanned": base.WRONG_FORMAT_TIME - }) + updates={"last_scanned": scanned_val}) self.validate_post_request(environment_configs.URL, body=json.dumps(test_data), expected_code=base.BAD_REQUEST_CODE) @@ -376,16 +326,81 @@ class TestEnvironmentConfigs(TestBase): expected_code=base.BAD_REQUEST_CODE) def test_post_environment_config_with_wrong_type_drivers(self): + driver = environment_configs.WRONG_TYPE_DRIVER + test_data = self.get_updated_data(environment_configs.ENV_CONFIG, + updates={"type_drivers": [driver]}) + self.validate_post_request(environment_configs.URL, + body=json.dumps(test_data), + expected_code=base.BAD_REQUEST_CODE) + + def test_post_environment_config_with_duplicate_configurations(self): + test_data = self.get_updated_data(environment_configs.ENV_CONFIG) + test_data["configuration"].append({ + "name": "OpenStack" + }) + self.validate_post_request(environment_configs.URL, + body=json.dumps(test_data), + expected_code=base.BAD_REQUEST_CODE) + + def test_post_environment_config_with_empty_configuration(self): + test_data = self.get_updated_data(environment_configs.ENV_CONFIG) + test_data["configuration"].append({}) + self.validate_post_request(environment_configs.URL, + body=json.dumps(test_data), + expected_code=base.BAD_REQUEST_CODE) + + def test_post_environment_config_with_unknown_configuration(self): + test_data = self.get_updated_data(environment_configs.ENV_CONFIG) + test_data["configuration"].append({ + "name": "Unknown configuration", + }) + self.validate_post_request(environment_configs.URL, + body=json.dumps(test_data), + expected_code=base.BAD_REQUEST_CODE) + + def test_post_environment_config_without_required_configurations(self): + for env_type in CONSTANTS_BY_NAMES["environment_types"]: + required_conf_list = ( + EnvironmentConfigs.REQUIRED_CONFIGURATIONS_NAMES.get(env_type, + []) + ) + if required_conf_list: + test_data = \ + self.get_updated_data(environment_configs.ENV_CONFIG) + test_data['environment_type'] = env_type + test_data['configuration'] = [ + c + for c in test_data['configuration'] + if c['name'] != required_conf_list[0] + ] + + self.validate_post_request(environment_configs.URL, + body=json.dumps(test_data), + expected_code=base.BAD_REQUEST_CODE) + + def test_post_environment_config_with_incomplete_configuration(self): test_data = self.get_updated_data(environment_configs.ENV_CONFIG, updates={ - "type_drivers": [environment_configs.WRONG_TYPE_DRIVER] + "configuration": [{ + "host": "10.56.20.239", + "name": "mysql", + "user": "root" + }, { + "name": "OpenStack", + "host": "10.56.20.239", + }, { + "host": "10.56.20.239", + "name": "CLI", + "user": "root" + }] }) self.validate_post_request(environment_configs.URL, body=json.dumps(test_data), expected_code=base.BAD_REQUEST_CODE) - def mock_validate_env_config_with_supported_envs(self, scanning, - monitoring, listening): + @staticmethod + def mock_validate_env_config_with_supported_envs(scanning, monitoring, + listening): InventoryMgr.is_feature_supported_in_env = \ lambda self, matches, feature: { EnvironmentFeatures.SCANNING: scanning, @@ -396,11 +411,12 @@ class TestEnvironmentConfigs(TestBase): @patch(base.RESPONDER_BASE_WRITE) def test_post_environment_config(self, write): self.mock_validate_env_config_with_supported_envs(True, True, True) + post_body = json.dumps(environment_configs.ENV_CONFIG) self.validate_post_request(environment_configs.URL, mocks={ write: None }, - body=json.dumps(environment_configs.ENV_CONFIG), + body=post_body, expected_code=base.CREATED_CODE) def test_post_unsupported_environment_config(self): @@ -421,10 +437,11 @@ class TestEnvironmentConfigs(TestBase): "listening": False } ] + mock_validate = self.mock_validate_env_config_with_supported_envs + config = environment_configs.ENV_CONFIG for test_case in test_cases: - self.mock_validate_env_config_with_supported_envs(test_case["scanning"], - test_case["monitoring"], - test_case["listening"]) + mock_validate(test_case["scanning"], test_case["monitoring"], + test_case["listening"]) self.validate_post_request(environment_configs.URL, - body=json.dumps(environment_configs.ENV_CONFIG), + body=json.dumps(config), expected_code=base.BAD_REQUEST_CODE) diff --git a/app/test/api/responders_test/test_data/base.py b/app/test/api/responders_test/test_data/base.py index b99d5bb..6d2422a 100644 --- a/app/test/api/responders_test/test_data/base.py +++ b/app/test/api/responders_test/test_data/base.py @@ -16,14 +16,14 @@ UNAUTHORIZED_CODE = "401" CREATED_CODE = "201" ENV_NAME = "Mirantis-Liberty-API" -UNKNOWN_ENV = "Unkown-Environment" +UNKNOWN_ENV = "Unknown-Environment" NON_INT_PAGE = 1.4 INT_PAGE = 1 NON_INT_PAGESIZE = 2.4 INT_PAGESIZE = 2 WRONG_LINK_TYPE = "instance-host" -CORRECT_LINK_TYPE= "instance-vnic" +CORRECT_LINK_TYPE = "instance-vnic" WRONG_LINK_STATE = "wrong" CORRECT_LINK_STATE = "up" @@ -41,7 +41,7 @@ WRONG_TYPE_DRIVER = "wrong_type" CORRECT_TYPE_DRIVER = "local" WRONG_MECHANISM_DRIVER = "wrong-mechanism-dirver" -CORRECT_MECHANISM_DRIVER = "ovs" +CORRECT_MECHANISM_DRIVER = "OVS" WRONG_LOG_LEVEL = "wrong-log-level" CORRECT_LOG_LEVEL = "critical" @@ -71,16 +71,32 @@ NON_DICT_OBJ = "" CONSTANTS_BY_NAMES = { "link_types": [ "instance-vnic", - "otep-vconnector", - "otep-host_pnic", + "vnic-instance", + "vnic-vconnector", + "vconnector-vnic", + "vconnector-vedge", + "vedge-vconnector", + "vedge-host_pnic", + "host_pnic-vedge", "host_pnic-network", + "network-host_pnic", "vedge-otep", - "vnic-vconnector", + "otep-vedge", + "otep-vconnector", + "vconnector-otep", + "otep-host_pnic", + "host_pnic-otep", "vconnector-host_pnic", - "vconnector-vedge", + "host_pnic-vconnector", "vnic-vedge", - "vedge-host_pnic", - "vservice-vnic" + "vedge-vnic", + "vservice-vnic", + "vnic-vservice", + "switch_pnic-host_pnic", + "host_pnic-switch_pnic", + "switch_pnic-switch_pnic", + "switch_pnic-switch", + "switch-switch_pnic" ], "link_states": [ "up", @@ -117,9 +133,9 @@ CONSTANTS_BY_NAMES = { "flat" ], "mechanism_drivers": [ - "ovs", - "vpp", - "LinuxBridge", + "OVS", + "VPP", + "LXB", "Arista", "Nexus" ], @@ -155,6 +171,10 @@ CONSTANTS_BY_NAMES = { "Mirantis", "RDO" ], + "distribution_versions": [ + "8.0", + "9.0" + ], "environment_operational_status": [ "stopped", "running", @@ -168,6 +188,30 @@ CONSTANTS_BY_NAMES = { ], "environment_monitoring_types": [ "Sensu" + ], + "scans_statuses": [ + "draft", + "pending", + "running", + "completed", + "completed_with_errors", + "failed", + "aborted" + ], + "configuration_targets": [ + "AMQP", + "CLI", + "ACI", + "mysql", + "OpenStack", + "Monitoring", + "Kubernetes" + ], + "environment_types": [ + "OpenStack", + "Kubernetes", + "VMware", + "Bare-metal" ] } @@ -175,7 +219,8 @@ CONSTANTS_BY_NAMES = { RESPONDER_BASE_PATH = "api.responders.responder_base.ResponderBase" RESPONDER_BASE_GET_OBJECTS_LIST = RESPONDER_BASE_PATH + ".get_objects_list" RESPONDER_BASE_GET_OBJECT_BY_ID = RESPONDER_BASE_PATH + ".get_object_by_id" -RESPONDER_BASE_CHECK_ENVIRONMENT_NAME = RESPONDER_BASE_PATH + ".check_environment_name" +RESPONDER_BASE_CHECK_ENVIRONMENT_NAME = \ + RESPONDER_BASE_PATH + ".check_environment_name" RESPONDER_BASE_READ = RESPONDER_BASE_PATH + ".read" RESPONDER_BASE_WRITE = RESPONDER_BASE_PATH + ".write" RESPONDER_BASE_AGGREGATE = RESPONDER_BASE_PATH + ".aggregate" diff --git a/app/test/api/responders_test/test_data/clique_types.py b/app/test/api/responders_test/test_data/clique_types.py index ae962ce..0791bdf 100644 --- a/app/test/api/responders_test/test_data/clique_types.py +++ b/app/test/api/responders_test/test_data/clique_types.py @@ -8,13 +8,18 @@ # http://www.apache.org/licenses/LICENSE-2.0 # ############################################################################### from test.api.responders_test.test_data import base - +from test.api.responders_test.test_data.base import WRONG_MECHANISM_DRIVER, \ + CORRECT_MECHANISM_DRIVER, CORRECT_TYPE_DRIVER, WRONG_TYPE_DRIVER, \ + CORRECT_DISTRIBUTION, CORRECT_DIST_VER URL = "/clique_types" WRONG_ID = base.WRONG_OBJECT_ID NONEXISTENT_ID = "58ca73ae3a8a836d10ff3b44" CORRECT_ID = base.CORRECT_OBJECT_ID +SAMPLE_IDS = ['58ca73ae3a8a836d10ff3b80', '58ca73ae3a8a836d10ff3b81'] + +RESERVED_ENV_NAME = 'ANY' WRONG_FOCAL_POINT_TYPE = base.WRONG_OBJECT_TYPE CORRECT_FOCAL_POINT_POINT_TYPE = base.CORRECT_OBJECT_TYPE @@ -23,25 +28,52 @@ WRONG_LINK_TYPE = base.WRONG_LINK_TYPE NONEXISTENT_LINK_TYPE = "otep-host_pnic" CORRECT_LINK_TYPE = base.CORRECT_LINK_TYPE +CLIQUE_TYPE = { + "environment": "Mirantis-Liberty-API", + "name": "instance_vconnector_clique", + "link_types": [ + "instance-vnic", + "vnic-vconnector" + ], + "focal_point_type": "instance" +} + +TEST_CONFIGURATION = { + "distribution": CORRECT_DISTRIBUTION, + "distribution_version": CORRECT_DIST_VER, + "mechanism_drivers": CORRECT_MECHANISM_DRIVER, + "type_drivers": CORRECT_TYPE_DRIVER +} + + +def get_payload(update: dict = None, delete: list = None): + payload = CLIQUE_TYPE.copy() + if update: + payload.update(update) + if delete: + for k in delete: + del payload[k] + return payload + + CLIQUE_TYPES_WITH_SPECIFIC_ID = [ - { - "environment": "Mirantis-Liberty-API", - "focal_point_type": "host_pnic", - "id": CORRECT_ID - } + get_payload(update={'id': CORRECT_ID}) +] + +CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION = [ + get_payload(update={'id': SAMPLE_IDS[0], + **TEST_CONFIGURATION}, + delete=['environment']) ] +CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION_RESPONSE = { + "clique_types": CLIQUE_TYPES_WITH_SPECIFIC_CONFIGURATION +} + CLIQUE_TYPES_WITH_SPECIFIC_FOCAL_POINT_TYPE = [ - { - "environment": "Mirantis-Liberty-API", - "focal_point_type": CORRECT_FOCAL_POINT_POINT_TYPE, - "id": "58ca73ae3a8a836d10ff3b80" - }, - { - "environment": "Mirantis-Liberty-API", - "focal_point_type": CORRECT_FOCAL_POINT_POINT_TYPE, - "id": "58ca73ae3a8a836d10ff3b81" - } + get_payload(update={'id': _id, + 'focal_point_type': CORRECT_FOCAL_POINT_POINT_TYPE}) + for _id in SAMPLE_IDS ] CLIQUE_TYPES_WITH_SPECIFIC_FOCAL_POINT_TYPE_RESPONSE = { @@ -49,20 +81,9 @@ CLIQUE_TYPES_WITH_SPECIFIC_FOCAL_POINT_TYPE_RESPONSE = { } CLIQUE_TYPES_WITH_SPECIFIC_LINK_TYPE = [ - { - "environment": "Mirantis-Liberty-API", - "link_types": [ - CORRECT_LINK_TYPE - ], - "id": "58ca73ae3a8a836d10ff3b80" - }, - { - "environment": "Mirantis-Liberty-API", - "link_types": [ - CORRECT_LINK_TYPE - ], - "id": "58ca73ae3a8a836d10ff3b81" - } + get_payload(update={'id': _id, + 'link_types': [CORRECT_LINK_TYPE]}) + for _id in SAMPLE_IDS ] CLIQUE_TYPES_WITH_SPECIFIC_LINK_TYPE_RESPONSE = { @@ -70,16 +91,7 @@ CLIQUE_TYPES_WITH_SPECIFIC_LINK_TYPE_RESPONSE = { } CLIQUE_TYPES = [ - { - "environment": "Mirantis-Liberty-API", - "focal_point_type": "vnic", - "id": "58ca73ae3a8a836d10ff3b80" - }, - { - "environment": "Mirantis-Liberty-API", - "focal_point_type": "vnic", - "id": "58ca73ae3a8a836d10ff3b81" - } + get_payload(update={'id': _id}) for _id in SAMPLE_IDS ] CLIQUE_TYPES_RESPONSE = { @@ -88,83 +100,48 @@ CLIQUE_TYPES_RESPONSE = { NON_DICT_CLIQUE_TYPE = base.NON_DICT_OBJ -CLIQUE_TYPE_WITHOUT_ENVIRONMENT = { - "name": "instance_vconnector_clique", - "link_types": [ - "instance-vnic", - "vnic-vconnector" - ], - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITH_RESERVED_NAME = get_payload( + update={'environment': RESERVED_ENV_NAME} +) -CLIQUE_TYPE_WITH_UNKNOWN_ENVIRONMENT = { - "environment": base.UNKNOWN_ENV, - "id": "589a3969761b0555a3ef6093", - "name": "instance_vconnector_clique", - "link_types": [ - "instance-vnic", - "vnic-vconnector" - ], - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITHOUT_ENV_NAME_AND_CONF = get_payload( + delete=['environment'] +) -CLIQUE_TYPE_WITHOUT_FOCAL_POINT_TYPE = { - "environment": "Mirantis-Liberty-API", - "name": "instance_vconnector_clique", - "link_types": [ - "instance-vnic", - "vnic-vconnector" - ] -} +CLIQUE_TYPE_WITH_BOTH_ENV_AND_CONF = get_payload( + update=TEST_CONFIGURATION +) -CLIQUE_TYPE_WITH_WRONG_FOCAL_POINT_TYPE = { - "environment": "Mirantis-Liberty-API", - "name": "instance_vconnector_clique", - "link_types": [ - "instance-vnic", - "vnic-vconnector" - ], - "focal_point_type": WRONG_FOCAL_POINT_TYPE -} +CLIQUE_TYPE_WITH_INSUFFICIENT_CONF = get_payload( + update={'distribution_version': CORRECT_DIST_VER} +) -CLIQUE_TYPE_WITHOUT_LINK_TYPES = { - "environment": "Mirantis-Liberty-API", - "name": "instance_vconnector_clique", - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITH_UNKNOWN_ENVIRONMENT = get_payload( + update={'environment': base.UNKNOWN_ENV} +) -CLIQUE_TYPE_WITH_NON_LIST_LINK_TYPES = { - "environment": "Mirantis-Liberty-API", - "name": "instance_vconnector_clique", - "link_types": "instance-vnic", - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITHOUT_FOCAL_POINT_TYPE = get_payload(delete=['focal_point_type']) -CLIQUE_TYPE_WITH_WRONG_LINK_TYPE = { - "environment": "Mirantis-Liberty-API", - "name": "instance_vconnector_clique", - "link_types": [ - WRONG_LINK_TYPE, - "vnic-vconnector" - ], - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITH_WRONG_FOCAL_POINT_TYPE = get_payload( + update={'focal_point_type': WRONG_FOCAL_POINT_TYPE} +) -CLIQUE_TYPE_WITHOUT_NAME = { - "environment": "Mirantis-Liberty-API", - "link_types": [ - "instance-vnic", - "vnic-vconnector", - ], - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITHOUT_LINK_TYPES = get_payload(delete=['link_types']) -CLIQUE_TYPE = { - "environment": "Mirantis-Liberty-API", - "name": "instance_vconnector_clique", - "link_types": [ - "instance-vnic", - "vnic-vconnector" - ], - "focal_point_type": "instance" -} +CLIQUE_TYPE_WITH_NON_LIST_LINK_TYPES = get_payload( + update={'link_types': "instance-vnic"} +) + +CLIQUE_TYPE_WITH_WRONG_LINK_TYPE = get_payload( + update={'link_types': [WRONG_LINK_TYPE, "vnic-vconnector"]} +) + +CLIQUE_TYPE_WITHOUT_NAME = get_payload(delete=['name']) + +CLIQUE_TYPE_WITH_WRONG_MECH_DRIVERS = get_payload( + update={'mechanism_drivers': WRONG_MECHANISM_DRIVER} +) + +CLIQUE_TYPE_WITH_WRONG_TYPE_DRIVERS = get_payload( + update={'type_drivers': WRONG_TYPE_DRIVER} +) \ No newline at end of file diff --git a/app/test/api/responders_test/test_data/environment_configs.py b/app/test/api/responders_test/test_data/environment_configs.py index 4cea105..3e976ec 100644 --- a/app/test/api/responders_test/test_data/environment_configs.py +++ b/app/test/api/responders_test/test_data/environment_configs.py @@ -201,6 +201,7 @@ ENV_CONFIG = { "provision": "None", "env_type": "development", "name": "Monitoring", + "install_monitoring_client": True, "api_port": "4567", "rabbitmq_port": "5671", "rabbitmq_pass": "sensuaccess", @@ -218,12 +219,13 @@ ENV_CONFIG = { "last_scanned": "2017-03-16T11:14:54Z", "listen": True, "mechanism_drivers": [ - "ovs" + "OVS" ], "name": "Mirantis-Liberty", "operational": "running", "scanned": True, "type": "environment", "type_drivers": "vxlan", - "user": "WS7j8oTbWPf3LbNne" + "user": "WS7j8oTbWPf3LbNne", + "environment_type": "OpenStack" } diff --git a/app/test/api/test_base.py b/app/test/api/test_base.py index 33185ec..edc59ae 100644 --- a/app/test/api/test_base.py +++ b/app/test/api/test_base.py @@ -34,8 +34,10 @@ class TestBase(TestCase): self.original_auth_method = AuthenticationMiddleware.process_request AuthenticationMiddleware.process_request = mock_auth_method - ResponderBase.get_constants_by_name = MagicMock(side_effect= - lambda name: base.CONSTANTS_BY_NAMES[name]) + ResponderBase.get_constants_by_name = MagicMock( + side_effect=lambda name: base.CONSTANTS_BY_NAMES[name] + ) + # mock mongo access MongoAccess.mongo_connect = MagicMock() MongoAccess.db = MagicMock() @@ -47,8 +49,8 @@ class TestBase(TestCase): log_level = 'debug' self.app = App(log_level=log_level).get_app() - def validate_get_request(self, url, params={}, headers=None, mocks={}, - side_effects={}, + def validate_get_request(self, url, params=None, headers=None, mocks=None, + side_effects=None, expected_code=base.SUCCESSFUL_CODE, expected_response=None): self.validate_request("GET", url, params, headers, "", @@ -59,25 +61,27 @@ class TestBase(TestCase): def validate_request(self, action, url, params, headers, body, mocks, side_effects, expected_code, expected_response): - for mock_method, mock_data in mocks.items(): - mock_method.return_value = mock_data + if mocks: + for mock_method, mock_data in mocks.items(): + mock_method.return_value = mock_data - for mock_method, side_effect in side_effects.items(): - mock_method.side_effect = side_effect + if side_effects: + for mock_method, side_effect in side_effects.items(): + mock_method.side_effect = side_effect result = self.simulate_request(action, url, params=params, headers=headers, body=body) self.assertEqual(result.status, expected_code) if expected_response: self.assertEqual(result.json, expected_response) - def validate_post_request(self, url, headers={}, body="", mocks={}, - side_effects={}, + def validate_post_request(self, url, headers=None, body="", mocks=None, + side_effects=None, expected_code=base.CREATED_CODE, expected_response=None): self.validate_request("POST", url, {}, headers, body, mocks, side_effects, expected_code, expected_response) - def validate_delete_request(self, url, params={}, headers={}, mocks={}, - side_effects={}, + def validate_delete_request(self, url, params=None, headers=None, mocks=None, + side_effects=None, expected_code=base.SUCCESSFUL_CODE, expected_response=None): self.validate_request("DELETE", url, params, headers, "", mocks, side_effects, diff --git a/app/test/fetch/api_fetch/test_api_access.py b/app/test/fetch/api_fetch/test_api_access.py index 0effc0e..440b730 100644 --- a/app/test/fetch/api_fetch/test_api_access.py +++ b/app/test/fetch/api_fetch/test_api_access.py @@ -7,9 +7,9 @@ # which accompanies this distribution, and is available at # # http://www.apache.org/licenses/LICENSE-2.0 # ############################################################################### -from unittest.mock import MagicMock, Mock - +import copy import requests +from unittest.mock import MagicMock, Mock from discover.fetchers.api.api_access import ApiAccess from test.fetch.api_fetch.test_data.api_access import * @@ -35,38 +35,45 @@ class TestApiAccess(TestFetch): def test_parse_illegal_time(self): time = self.api_access.parse_time(ILLEGAL_TIME) - self.assertEqual(time, None, "Can't get None when the time format is wrong") + self.assertEqual(time, None, + "Can't get None when the time format is wrong") def test_get_existing_token(self): self.api_access.tokens = VALID_TOKENS token = self.api_access.get_existing_token(PROJECT) - self.assertNotEqual(token, VALID_TOKENS[PROJECT], "Can't get existing token") + self.assertNotEqual(token, VALID_TOKENS[PROJECT], + "Can't get existing token") def test_get_nonexistent_token(self): self.api_access.tokens = EMPTY_TOKENS token = self.api_access.get_existing_token(TEST_PROJECT) - self.assertEqual(token, None, "Can't get None when the token doesn't " + - "exist in tokens") + self.assertEqual(token, None, + "Can't get None when the token doesn't exist " + "in tokens") def test_v2_auth(self): self.api_access.get_existing_token = MagicMock(return_value=None) self.response.json = Mock(return_value=CORRECT_AUTH_CONTENT) # mock authentication info from OpenStack Api - token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, TEST_BODY) + token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, + TEST_BODY) self.assertNotEqual(token_details, None, "Can't get the token details") def test_v2_auth_with_error_content(self): self.api_access.get_existing_token = MagicMock(return_value=None) self.response.json = Mock(return_value=ERROR_AUTH_CONTENT) # authentication content from OpenStack Api will be incorrect - token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, TEST_BODY) - self.assertIs(token_details, None, "Can't get None when the content is wrong") + token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, + TEST_BODY) + self.assertIs(token_details, None, + "Can't get None when the content is wrong") def test_v2_auth_with_error_token(self): self.response.status_code = requests.codes.bad_request self.response.json = Mock(return_value=ERROR_TOKEN_CONTENT) # authentication info from OpenStack Api will not contain token info - token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, TEST_BODY) + token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, + TEST_BODY) self.assertIs(token_details, None, "Can't get None when the content " + "doesn't contain any token info") @@ -78,12 +85,13 @@ class TestApiAccess(TestFetch): # the time will not be parsed self.api_access.parse_time = MagicMock(return_value=None) - token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, TEST_BODY) + token_details = self.api_access.v2_auth(TEST_PROJECT, TEST_HEADER, + TEST_BODY) # reset original parse_time method self.api_access.parse_time = original_method - self.assertIs(token_details, None, "Can't get None when the time in token " + - "can't be parsed") + self.assertIs(token_details, None, + "Can't get None when the time in token can't be parsed") def test_v2_auth_pwd(self): self.response.json = Mock(return_value=CORRECT_AUTH_CONTENT) @@ -92,20 +100,30 @@ class TestApiAccess(TestFetch): self.assertNotEqual(token, None, "Can't get token") def test_get_url(self): - self.response.json = Mock(return_value=GET_CONTENT) + get_response = copy.deepcopy(self.response) + get_response.status_code = requests.codes.ok + self.requests_get = requests.get + requests.get = MagicMock(return_value=get_response) + get_response.json = Mock(return_value=GET_CONTENT) result = self.api_access.get_url(TEST_URL, TEST_HEADER) # check whether it returns content message when the response is correct self.assertNotEqual(result, None, "Can't get content when the " "response is correct") + requests.get = self.requests_get def test_get_url_with_error_response(self): - self.response.status_code = requests.codes.bad_request - self.response.json = Mock(return_value=None) - self.response.text = "Bad request" + get_response = copy.deepcopy(self.response) + get_response.status_code = requests.codes.bad_request + get_response.text = "Bad request" + get_response.json = Mock(return_value=GET_CONTENT) + self.requests_get = requests.get + requests.get = MagicMock(return_value=get_response) + # the response will be wrong result = self.api_access.get_url(TEST_URL, TEST_HEADER) self.assertEqual(result, None, "Result returned" + "when the response status is not 200") + requests.get = self.requests_get def test_get_region_url(self): region_url = self.api_access.get_region_url(REGION_NAME, SERVICE_NAME) @@ -120,23 +138,30 @@ class TestApiAccess(TestFetch): def test_get_region_url_without_service_endpoint(self): # error service doesn't exist in region service endpoints - region_url = self.api_access.get_region_url(REGION_NAME, ERROR_SERVICE_NAME) - self.assertIs(region_url, None, "Can't get None with wrong service name") + region_url = self.api_access.get_region_url(REGION_NAME, + ERROR_SERVICE_NAME) + self.assertIs(region_url, None, + "Can't get None with wrong service name") def test_region_url_nover(self): - # mock return value of get_region_url, which has something starting from v2 + # mock return value of get_region_url, + # which has something starting from v2 self.api_access.get_region_url = MagicMock(return_value=REGION_URL) - region_url = self.api_access.get_region_url_nover(REGION_NAME, SERVICE_NAME) + region_url = self.api_access.get_region_url_nover(REGION_NAME, + SERVICE_NAME) # get_region_nover will remove everything from v2 - self.assertNotIn("v2", region_url, "Can't get region url without v2 info") + self.assertNotIn("v2", region_url, + "Can't get region url without v2 info") def test_get_service_region_endpoints(self): region = REGIONS[REGION_NAME] - result = self.api_access.get_service_region_endpoints(region, SERVICE_NAME) + result = self.api_access.get_service_region_endpoints(region, + SERVICE_NAME) self.assertNotEqual(result, None, "Can't get service endpoint") def test_get_service_region_endpoints_with_nonexistent_service(self): region = REGIONS[REGION_NAME] - result = self.api_access.get_service_region_endpoints(region, ERROR_SERVICE_NAME) + get_endpoints = self.api_access.get_service_region_endpoints + result = get_endpoints(region, ERROR_SERVICE_NAME) self.assertIs(result, None, "Can't get None when the service name " + "doesn't exist in region's services") diff --git a/app/test/fetch/api_fetch/test_api_fetch_project_hosts.py b/app/test/fetch/api_fetch/test_api_fetch_project_hosts.py index da3df17..784079e 100644 --- a/app/test/fetch/api_fetch/test_api_fetch_project_hosts.py +++ b/app/test/fetch/api_fetch/test_api_fetch_project_hosts.py @@ -7,6 +7,7 @@ # which accompanies this distribution, and is available at # # http://www.apache.org/licenses/LICENSE-2.0 # ############################################################################### +import copy from unittest.mock import MagicMock from discover.fetchers.api.api_fetch_project_hosts import ApiFetchProjectHosts from test.fetch.test_fetch import TestFetch @@ -36,23 +37,28 @@ class TestApiFetchProjectHosts(TestFetch): "type in host_type") def test_add_host_type_with_existent_host_type(self): + fetch_host_os_details = self.fetcher.fetch_host_os_details + self.fetcher.fetch_host_os_details = MagicMock() # add nonexistent host type to host type HOST_DOC["host_type"] = [NONEXISTENT_TYPE] # try to add existing host type self.fetcher.add_host_type(HOST_DOC, NONEXISTENT_TYPE, HOST_ZONE) - self.assertEqual(len(HOST_DOC['host_type']), 1, "Add duplicate host type") + self.assertEqual(len(HOST_DOC['host_type']), 1, + "Add duplicate host type") + self.fetcher.fetch_host_os_details = fetch_host_os_details def test_add_compute_host_type(self): - HOST_DOC['host_type'] = [] + doc = copy.deepcopy(HOST_DOC) + doc['host_type'] = [] # clear zone - HOST_DOC['zone'] = None + doc['zone'] = None # add compute host type - self.fetcher.add_host_type(HOST_DOC, COMPUTE_TYPE, HOST_ZONE) + self.fetcher.add_host_type(doc, COMPUTE_TYPE, HOST_ZONE) # for compute host type, zone information will be added - self.assertEqual(HOST_DOC['zone'], HOST_ZONE, "Can't update zone " + - "name for compute node") - self.assertEqual(HOST_DOC['parent_id'], HOST_ZONE, "Can't update parent_id " + - "for compute node") + self.assertEqual(doc['zone'], HOST_ZONE, + "Can't update zone name for compute node") + self.assertEqual(doc['parent_id'], HOST_ZONE, + "Can't update parent_id for compute node") def test_fetch_compute_node_ip_address(self): # mock ip address information fetched from DB @@ -78,16 +84,24 @@ class TestApiFetchProjectHosts(TestFetch): def test_get_host_details(self): # test node have nova-conductor attribute, controller type will be added + fetch_host_os_details = self.fetcher.fetch_host_os_details + self.fetcher.fetch_host_os_details = MagicMock() result = self.fetcher.get_host_details(AVAILABILITY_ZONE, HOST_NAME) self.assertIn("Controller", result['host_type'], "Can't put controller type " + "in the compute node host_type") + self.fetcher.fetch_host_os_details = fetch_host_os_details def test_get_hosts_from_az(self): + fetch_host_os_details = self.fetcher.fetch_host_os_details + self.fetcher.fetch_host_os_details = MagicMock() result = self.fetcher.get_hosts_from_az(AVAILABILITY_ZONE) self.assertNotEqual(result, [], "Can't get hosts information from " "availability zone") + self.fetcher.fetch_host_os_details = fetch_host_os_details def test_get_for_region(self): + fetch_host_os_details = self.fetcher.fetch_host_os_details + self.fetcher.fetch_host_os_details = MagicMock() # mock region url for nova node self.fetcher.get_region_url = MagicMock(return_value=REGION_URL) # mock the response from OpenStack Api @@ -96,6 +110,7 @@ class TestApiFetchProjectHosts(TestFetch): result = self.fetcher.get_for_region(self.region, TOKEN) self.assertNotEqual(result, [], "Can't get hosts information for region") + self.fetcher.fetch_host_os_details = fetch_host_os_details def test_get_for_region_without_token(self): self.fetcher.get_region_url = MagicMock(return_value=REGION_URL) @@ -112,6 +127,8 @@ class TestApiFetchProjectHosts(TestFetch): self.assertEqual(result, [], "Can't get [] when the response is wrong") def test_get_for_region_with_error_hypervisors_response(self): + fetch_host_os_details = self.fetcher.fetch_host_os_details + self.fetcher.fetch_host_os_details = MagicMock() self.fetcher.get_region_url = MagicMock(return_value=REGION_URL) # mock error hypervisors response from OpenStack Api side_effect = [AVAILABILITY_ZONE_RESPONSE, HYPERVISORS_ERROR_RESPONSE] @@ -120,6 +137,7 @@ class TestApiFetchProjectHosts(TestFetch): result = self.fetcher.get_for_region(self.region, TOKEN) self.assertNotEqual(result, [], "Can't get hosts information when " + "the hypervisors response is wrong") + self.fetcher.fetch_host_os_details = fetch_host_os_details def test_get(self): original_method = self.fetcher.get_for_region @@ -140,6 +158,15 @@ class TestApiFetchProjectHosts(TestFetch): result = self.fetcher.get(PROJECT_NAME) self.assertEqual(result, [], "Can't get [] when the token is invalid") + def test_fetch_host_os_details(self): + original_method = self.fetcher.run + self.fetcher.run = MagicMock(return_value=OS_DETAILS_INPUT) + doc = {'host': 'host1'} + self.fetcher.fetch_host_os_details(doc) + self.assertEqual(doc.get('OS', {}), OS_DETAILS) + self.fetcher.run = original_method + + def tearDown(self): super().tearDown() ApiFetchProjectHosts.v2_auth_pwd = self._v2_auth_pwd diff --git a/app/test/fetch/api_fetch/test_data/api_fetch_host_project_hosts.py b/app/test/fetch/api_fetch/test_data/api_fetch_host_project_hosts.py index 3ef1ac7..ba42590 100644 --- a/app/test/fetch/api_fetch/test_data/api_fetch_host_project_hosts.py +++ b/app/test/fetch/api_fetch/test_data/api_fetch_host_project_hosts.py @@ -223,3 +223,24 @@ GET_FOR_REGION_INFO = [ "zone": "osdna-zone" } ] + +OS_DETAILS_INPUT = """ +NAME="Ubuntu" +VERSION="16.04 LTS (Xenial Xerus)" +ID=ubuntu +ID_LIKE=debian +PRETTY_NAME="Ubuntu 16.04 LTS" +VERSION_ID="16.04" +HOME_URL="http://www.ubuntu.com/" +SUPPORT_URL="http://help.ubuntu.com/" +BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" +UBUNTU_CODENAME=xenial +ARCHITECURE=x86_64 +""" +OS_DETAILS = { + 'name': 'Ubuntu', + 'version': '16.04 LTS (Xenial Xerus)', + 'ID': 'ubuntu', + 'ID_LIKE': 'debian', + 'architecure': 'x86_64' +} diff --git a/app/test/fetch/link_finders/__init__.py b/app/test/fetch/link_finders/__init__.py new file mode 100644 index 0000000..b0637e9 --- /dev/null +++ b/app/test/fetch/link_finders/__init__.py @@ -0,0 +1,9 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### diff --git a/app/test/fetch/link_finders/test_data/__init__.py b/app/test/fetch/link_finders/test_data/__init__.py new file mode 100644 index 0000000..b0637e9 --- /dev/null +++ b/app/test/fetch/link_finders/test_data/__init__.py @@ -0,0 +1,9 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### diff --git a/app/test/fetch/link_finders/test_data/test_find_implicit_links.py b/app/test/fetch/link_finders/test_data/test_find_implicit_links.py new file mode 100644 index 0000000..aef20f6 --- /dev/null +++ b/app/test/fetch/link_finders/test_data/test_find_implicit_links.py @@ -0,0 +1,303 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +ENV = 'env1' +CLIQUE_CONSTRAINTS = [ + { + 'focal_point_type': 'instance', + 'constraints': ['network'] + }, + { + 'focal_point_type': 'dummy1', + 'constraints': [] + }, + { + 'focal_point_type': 'dummy2', + 'constraints': ['network', 'dummy_constraint'] + }, + { + 'focal_point_type': 'dummy3', + 'constraints': ['dummy_constraint2'] + } +] +CONSTRAINTS = ['network', 'dummy_constraint', 'dummy_constraint2'] + +LINK_ATTRIBUTES_NONE = {} +LINK_ATTRIBUTES_NONE_2 = {} +LINK_ATTRIBUTES_EMPTY = {'attributes': []} +LINK_ATTR_V1 = {'attributes': {'network': 'v1'}} +LINK_ATTR_V1_2 = {'attributes': {'network': 'v1'}} +LINK_ATTR_V2 = {'attributes': {'network': 'v2'}} +LINK_ATTR_V1_AND_A2V2 = {'attributes': {'network': 'v1', 'attr2': 'v2'}} + +LINK_TYPE_1 = { + 'link_type': 'instance-vnic', + 'source_id': 'instance1', + 'target_id': 'vnic1' +} +LINK_TYPE_1_REVERSED = { + 'link_type': 'instance-vnic', + 'source_id': 'vnic1', + 'target_id': 'instance1' +} +LINK_TYPE_1_2 = { + 'link_type': 'instance-vnic', + 'source_id': 'instance1', + 'target_id': 'vnic2' +} +LINK_TYPE_2 = { + 'link_type': 'vnic-vconnector', + 'source_id': 'vnic1', + 'target_id': 'vconnector1' +} +LINK_TYPE_3 = { + 'implicit': True, + 'link_type': 'instance-vconnector', + 'source_id': 'instance1', + 'target_id': 'vconnector1' +} +LINK_TYPE_4_NET1 = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'instance-host_pnic', + 'source': 'instance1_dbid', + 'source_id': 'instance1', + 'target': 'host_pnic1_dbid', + 'target_id': 'host_pnic1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_TYPE_5_NET2 = { + 'environment': ENV, + 'link_type': 'host_pnic-switch', + 'source_id': 'host_pnic1', + 'target': 'switch1_dbid', + 'target_id': 'switch1', + 'host': 'host2', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID2'} +} +LINK_TYPE_6_NET1 = { + 'environment': ENV, + 'link_type': 'host_pnic-switch', + 'source': 'host_pnic1_dbid', + 'source_id': 'host_pnic1', + 'target': 'switch2_dbid', + 'target_id': 'switch2', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_TYPE_7_NET1 = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'instance-switch', + 'source': 'instance1_dbid', + 'source_id': 'instance1', + 'target': 'switch2_dbid', + 'target_id': 'switch2', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} + +LINK_FULL_A2B = { + 'environment': ENV, + 'link_type': 'instance-vnic', + 'source': 'instance1_dbid', + 'source_id': 'instance1', + 'target': 'vnic1_dbid', + 'target_id': 'vnic1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_B2C = { + 'environment': ENV, + 'link_type': 'vnic-vconnector', + 'source': 'vnic1_dbid', + 'source_id': 'vnic1', + 'target': 'vconnector1_dbid', + 'target_id': 'vconnector1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_C2D = { + 'environment': ENV, + 'link_type': 'vconnector-vedge', + 'source': 'vconnector1_dbid', + 'source_id': 'vconnector1', + 'target': 'vedge1_dbid', + 'target_id': 'vedge1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_D2E = { + 'environment': ENV, + 'link_type': 'vedge-otep', + 'source': 'vedge1_dbid', + 'source_id': 'vedge1', + 'target': 'otep1_dbid', + 'target_id': 'otep1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_A2C = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'instance-vconnector', + 'source': 'instance1_dbid', + 'source_id': 'instance1', + 'target': 'vconnector1_dbid', + 'target_id': 'vconnector1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_B2D = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'vnic-vedge', + 'source': 'vnic1_dbid', + 'source_id': 'vnic1', + 'target': 'vedge1_dbid', + 'target_id': 'vedge1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_C2E = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'vconnector-otep', + 'source': 'vconnector1_dbid', + 'source_id': 'vconnector1', + 'target': 'otep1_dbid', + 'target_id': 'otep1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_A2D = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'instance-vedge', + 'source': 'instance1_dbid', + 'source_id': 'instance1', + 'target': 'vedge1_dbid', + 'target_id': 'vedge1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_B2E = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'vnic-otep', + 'source': 'vnic1_dbid', + 'source_id': 'vnic1', + 'target': 'otep1_dbid', + 'target_id': 'otep1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +LINK_FULL_A2E = { + 'environment': ENV, + 'implicit': True, + 'link_type': 'instance-otep', + 'source': 'instance1_dbid', + 'source_id': 'instance1', + 'target': 'otep1_dbid', + 'target_id': 'otep1', + 'host': 'host1', + 'link_name': '', + 'state': 'up', + 'source_label': '', + 'target_label': '', + 'link_weight': 0, + 'attributes': {'network': 'netID1'} +} +BASE_LINKS = [ + {'pass': 0, 'link': LINK_FULL_A2B}, + {'pass': 0, 'link': LINK_FULL_B2C}, + {'pass': 0, 'link': LINK_FULL_C2D}, + {'pass': 0, 'link': LINK_FULL_D2E}, +] +IMPLICIT_LINKS = [ + [ + {'pass': 1, 'link': LINK_FULL_A2C}, + {'pass': 1, 'link': LINK_FULL_B2D}, + {'pass': 1, 'link': LINK_FULL_C2E}, + ], + [ + {'pass': 2, 'link': LINK_FULL_A2D}, + {'pass': 2, 'link': LINK_FULL_B2E}, + ], + [ + {'pass': 3, 'link': LINK_FULL_A2E}, + ], + [] +] diff --git a/app/test/fetch/link_finders/test_find_implicit_links.py b/app/test/fetch/link_finders/test_find_implicit_links.py new file mode 100644 index 0000000..9931688 --- /dev/null +++ b/app/test/fetch/link_finders/test_find_implicit_links.py @@ -0,0 +1,107 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +import bson + +from discover.link_finders.find_implicit_links import FindImplicitLinks +from test.fetch.test_fetch import TestFetch +from unittest.mock import MagicMock +from test.fetch.link_finders.test_data.test_find_implicit_links import * + +from utils.inventory_mgr import InventoryMgr + + +class TestFindImplicitLinks(TestFetch): + + def setUp(self): + super().setUp() + self.configure_environment() + self.fetcher = FindImplicitLinks() + self.fetcher.set_env(ENV) + self.fetcher.constraint_attributes = ['network'] + self.original_write_link = self.inv.write_link + self.inv.write_link = lambda x: x + self.original_objectid = bson.ObjectId + bson.ObjectId = lambda x: x + + def tearDown(self): + super().tearDown() + bson.ObjectId = self.original_objectid + self.inv.write_link = self.original_write_link + + def test_get_constraint_attributes(self): + original_find = InventoryMgr.find + InventoryMgr.find = MagicMock(return_value=CLIQUE_CONSTRAINTS) + constraint_types = self.fetcher.get_constraint_attributes() + self.assertEqual(sorted(constraint_types), sorted(CONSTRAINTS)) + InventoryMgr.find = original_find + + def test_constraints_match(self): + matcher = self.fetcher.constraints_match + self.assertTrue(matcher(LINK_ATTRIBUTES_NONE, LINK_ATTRIBUTES_NONE_2)) + self.assertTrue(matcher(LINK_ATTRIBUTES_NONE, LINK_ATTRIBUTES_EMPTY)) + self.assertTrue(matcher(LINK_ATTRIBUTES_NONE, LINK_ATTR_V1)) + self.assertTrue(matcher(LINK_ATTRIBUTES_EMPTY, LINK_ATTR_V1)) + self.assertTrue(matcher(LINK_ATTR_V1, LINK_ATTR_V1_2)) + self.assertTrue(matcher(LINK_ATTR_V1, + LINK_ATTR_V1_AND_A2V2)) + self.assertFalse(matcher(LINK_ATTR_V1, LINK_ATTR_V2)) + + def test_links_match(self): + matcher = self.fetcher.links_match + self.assertFalse(matcher(LINK_TYPE_1, LINK_TYPE_1_2)) + self.assertFalse(matcher(LINK_TYPE_1, LINK_TYPE_1_REVERSED)) + self.assertFalse(matcher(LINK_TYPE_4_NET1, LINK_TYPE_5_NET2)) + self.assertFalse(matcher(LINK_TYPE_1_2, LINK_TYPE_2)) + self.assertTrue(matcher(LINK_TYPE_1, LINK_TYPE_2)) + + def test_get_link_constraint_attributes(self): + getter = self.fetcher.get_link_constraint_attributes + self.assertEqual(getter(LINK_TYPE_1, LINK_TYPE_1_2), {}) + self.assertEqual(getter(LINK_TYPE_1, LINK_TYPE_4_NET1), + LINK_TYPE_4_NET1.get('attributes')) + self.assertEqual(getter(LINK_TYPE_4_NET1, LINK_TYPE_1), + LINK_TYPE_4_NET1.get('attributes')) + self.assertEqual(getter(LINK_TYPE_1, LINK_TYPE_5_NET2), + LINK_TYPE_5_NET2.get('attributes')) + self.assertEqual(getter(LINK_TYPE_4_NET1, LINK_TYPE_6_NET1), + LINK_TYPE_4_NET1.get('attributes')) + + def test_get_attr(self): + getter = self.fetcher.get_attr + self.assertIsNone(getter('host', {}, {})) + self.assertIsNone(getter('host', {'host': 'v1'}, {'host': 'v2'})) + self.assertEqual(getter('host', {'host': 'v1'}, {}), 'v1') + self.assertEqual(getter('host', {}, {'host': 'v2'}), 'v2') + self.assertEqual(getter('host', {'host': 'v1'}, {'host': 'v1'}), 'v1') + + def test_add_implicit_link(self): + original_write_link = self.inv.write_link + self.inv.write_link = lambda x: x + original_objectid = bson.ObjectId + bson.ObjectId = lambda x: x + add_func = self.fetcher.add_implicit_link + self.assertEqual(add_func(LINK_TYPE_4_NET1, LINK_TYPE_6_NET1), + LINK_TYPE_7_NET1) + bson.ObjectId = original_objectid + self.inv.write_link = original_write_link + + def test_get_transitive_closure(self): + self.fetcher.links = [ + {'pass': 0, 'link': LINK_FULL_A2B}, + {'pass': 0, 'link': LINK_FULL_B2C}, + {'pass': 0, 'link': LINK_FULL_C2D}, + {'pass': 0, 'link': LINK_FULL_D2E}, + ] + self.fetcher.get_transitive_closure() + for pass_no in range(1, len(IMPLICIT_LINKS)): + implicit_links = [l for l in self.fetcher.links + if l['pass'] == pass_no] + self.assertEqual(implicit_links, IMPLICIT_LINKS[pass_no-1], + 'incorrect links for pass #{}'.format(pass_no)) diff --git a/app/test/scan/test_data/configurations.py b/app/test/scan/test_data/configurations.py index 96dbc23..044ff0b 100644 --- a/app/test/scan/test_data/configurations.py +++ b/app/test/scan/test_data/configurations.py @@ -47,6 +47,7 @@ CONFIGURATIONS = { "provision": "Deploy", "env_type": "development", "name": "Monitoring", + "install_monitoring_client": True, "rabbitmq_port": "5672", "rabbitmq_pass": "osdna", "rabbitmq_user": "sensu", diff --git a/app/test/scan/test_data/scanner.py b/app/test/scan/test_data/scanner.py index 23838aa..500021d 100644 --- a/app/test/scan/test_data/scanner.py +++ b/app/test/scan/test_data/scanner.py @@ -17,6 +17,19 @@ METADATA = { "scanners_package": "discover", "scanners": {} } +LINK_FINDERS_METADATA = { + "finders_package": "discover.link_finders", + "base_finder": "FindLinks", + "link_finders": [ + "FindLinksForInstanceVnics", + "FindLinksForOteps", + "FindLinksForVconnectors", + "FindLinksForVedges", + "FindLinksForVserviceVnics", + "FindLinksForPnics", + "FindImplicitLinks" + ] +} TYPE_TO_FETCH = { "type": "host_pnic", diff --git a/app/test/scan/test_scan_metadata_parser.py b/app/test/scan/test_scan_metadata_parser.py index 91c11ef..5d91306 100644 --- a/app/test/scan/test_scan_metadata_parser.py +++ b/app/test/scan/test_scan_metadata_parser.py @@ -104,6 +104,8 @@ class TestScanMetadataParser(TestScan): 'input': METADATA_SCANNER_INCORRECT_FETCHER, 'msg': 'failed to find fetcher class f1 ' 'in scanner ScanAggregate type #1' + ' (could not import module discover.fetchers.f1.f1: ' + 'No module named \'discover.fetchers.f1\')' }, { 'input': METADATA_SCANNER_WITH_INCORRECT_CHILD, diff --git a/app/test/scan/test_scanner.py b/app/test/scan/test_scanner.py index 4a7536e..e93a35b 100644 --- a/app/test/scan/test_scanner.py +++ b/app/test/scan/test_scanner.py @@ -10,6 +10,9 @@ from discover.scanner import Scanner from test.scan.test_scan import TestScan from unittest.mock import MagicMock, patch + +from discover.link_finders.find_links_metadata_parser \ + import FindLinksMetadataParser from discover.scan_metadata_parser import ScanMetadataParser from test.scan.test_data.scanner import * from monitoring.setup.monitoring_setup_manager import MonitoringSetupManager @@ -19,7 +22,10 @@ class TestScanner(TestScan): def setUp(self): super().setUp() - ScanMetadataParser.parse_metadata_file = MagicMock(return_value=METADATA) + ScanMetadataParser.parse_metadata_file = \ + MagicMock(return_value=METADATA) + FindLinksMetadataParser.parse_metadata_file = \ + MagicMock(return_value=LINK_FINDERS_METADATA) self.scanner = Scanner() self.scanner.set_env(self.env) MonitoringSetupManager.create_setup = MagicMock() diff --git a/app/test/verify.sh b/app/test/verify.sh index a7ac9a2..681b5ed 100755 --- a/app/test/verify.sh +++ b/app/test/verify.sh @@ -11,4 +11,8 @@ set -o errexit set -o nounset set -o pipefail +PYTHONPATH=$PWD/app python3 -m unittest discover -s app/test/api +PYTHONPATH=$PWD/app python3 -m unittest discover -s app/test/event_based_scan PYTHONPATH=$PWD/app python3 -m unittest discover -s app/test/fetch +PYTHONPATH=$PWD/app python3 -m unittest discover -s app/test/scan +PYTHONPATH=$PWD/app python3 -m unittest discover -s app/test/utils diff --git a/app/utils/api_access_base.py b/app/utils/api_access_base.py new file mode 100644 index 0000000..31f50b4 --- /dev/null +++ b/app/utils/api_access_base.py @@ -0,0 +1,51 @@ +############################################################################### +# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) # +# and others # +# # +# All rights reserved. This program and the accompanying materials # +# are made available under the terms of the Apache License, Version 2.0 # +# which accompanies this distribution, and is available at # +# http://www.apache.org/licenses/LICENSE-2.0 # +############################################################################### +import requests + +from discover.configuration import Configuration +from discover.fetcher import Fetcher + + +class ApiAccessBase(Fetcher): + + CONNECT_TIMEOUT = 5 + + def __init__(self, api_name=None, config=None): + super().__init__() + if api_name is None: + raise ValueError('ApiAccessBase: api_name must be defined') + self.config = {api_name: config} if config else Configuration() + self.api_config = self.config.get(api_name) + if self.api_config is None: + raise ValueError('ApiAccessBase: section "{}" missing in config' + .format(api_name)) + self.host = self.api_config.get('host', '') + self.port = self.api_config.get('port', '') + if not (self.host and self.port): + raise ValueError('Missing definition of host or port ' + + 'for {} API access' + .format(api_name)) + + def get_rel_url(self, relative_url, headers): + req_url = self.base_url + relative_url + return self.get_url(req_url, headers) + + def get_url(self, req_url, headers): + response = requests.get(req_url, headers=headers) + if response.status_code != requests.codes.ok: + # some error happened + if 'reason' in response: + msg = ', reason: {}'.format(response.reason) + else: + msg = ', response: {}'.format(response.text) + self.log.error('req_url: {} {}'.format(req_url, msg)) + return None + ret = response.json() + return ret diff --git a/app/utils/inventory_mgr.py b/app/utils/inventory_mgr.py index 722d0aa..bbc5542 100644 --- a/app/utils/inventory_mgr.py +++ b/app/utils/inventory_mgr.py @@ -265,6 +265,7 @@ class InventoryMgr(MongoAccess, metaclass=Singleton): # source_label, target_label: labels for the ends of the link (optional) def create_link(self, env, src, source_id, target, target_id, link_type, link_name, state, link_weight, + implicit=False, source_label="", target_label="", host=None, switch=None, extra_attributes=None): @@ -282,6 +283,7 @@ class InventoryMgr(MongoAccess, metaclass=Singleton): "link_weight": link_weight, "source_label": source_label, "target_label": target_label, + "implicit": implicit, "attributes": extra_attributes if extra_attributes else {} } if host: @@ -347,16 +349,18 @@ class InventoryMgr(MongoAccess, metaclass=Singleton): if not env_config: return False - # Workaround for mechanism_drivers field type - mechanism_driver = env_config['mechanism_drivers'][0] \ - if isinstance(env_config['mechanism_drivers'], list) \ - else env_config['mechanism_drivers'] + # Workarounds for mechanism_drivers and distribution_version field types + mechanism_driver = env_config.get('mechanism_drivers') + if isinstance(mechanism_driver, list): + mechanism_driver = mechanism_driver[0] + env_distribution_version = env_config.get('distribution_version') + if isinstance(env_distribution_version, list): + env_distribution_version = env_distribution_version[0] full_env = { - 'environment.distribution': env_config['distribution'], - 'environment.distribution_version': - {"$in": [env_config['distribution_version']]}, - 'environment.type_drivers': env_config['type_drivers'], + 'environment.distribution': env_config.get('distribution'), + 'environment.distribution_version': env_distribution_version, + 'environment.type_drivers': env_config.get('type_drivers'), 'environment.mechanism_drivers': mechanism_driver } return self.is_feature_supported_in_env(full_env, feature) @@ -394,8 +398,10 @@ class InventoryMgr(MongoAccess, metaclass=Singleton): self.log.error("failed to find master parent " + master_parent_id) return False - folder_id_path = "/".join((master_parent["id_path"], o["parent_id"])) - folder_name_path = "/".join((master_parent["name_path"], o["parent_text"])) + folder_id_path = "/".join((master_parent["id_path"], + o["parent_id"])) + folder_name_path = "/".join((master_parent["name_path"], + o["parent_text"])) folder = { "environment": parent["environment"], "parent_id": master_parent_id, diff --git a/app/utils/mongo_access.py b/app/utils/mongo_access.py index d4599f1..75c265c 100644 --- a/app/utils/mongo_access.py +++ b/app/utils/mongo_access.py @@ -36,8 +36,10 @@ class MongoAccess(DictNamingConverter): def __init__(self): super().__init__() - self.log_file = os.path.join(FileLogger.LOG_DIRECTORY, - MongoAccess.LOG_FILENAME) + log_dir = FileLogger.LOG_DIRECTORY \ + if os.path.isdir(FileLogger.LOG_DIRECTORY) \ + else os.path.abspath('.') + self.log_file = os.path.join(log_dir, MongoAccess.LOG_FILENAME) try: self.log = FileLogger(self.log_file) diff --git a/app/utils/ssh_connection.py b/app/utils/ssh_connection.py index e9dd39a..b9b1cde 100644 --- a/app/utils/ssh_connection.py +++ b/app/utils/ssh_connection.py @@ -22,6 +22,7 @@ class SshConnection(BinaryConverter): max_call_count_per_con = 100 timeout = 15 # timeout for exec in seconds + CONNECT_TIMEOUT = 5 DEFAULT_PORT = 22 @@ -118,7 +119,8 @@ class SshConnection(BinaryConverter): pkey=k, port=self.port if self.port is not None else self.DEFAULT_PORT, - password=self.pwd, timeout=30) + password=self.pwd, + timeout=self.CONNECT_TIMEOUT) else: port = None try: @@ -127,7 +129,7 @@ class SshConnection(BinaryConverter): username=self.user, password=self.pwd, port=port, - timeout=30) + timeout=self.CONNECT_TIMEOUT) except paramiko.ssh_exception.AuthenticationException: self.log.error('Failed SSH connect to host {}, port={}' .format(self.host, port)) diff --git a/app/utils/util.py b/app/utils/util.py index ae7b518..17a31c0 100644 --- a/app/utils/util.py +++ b/app/utils/util.py @@ -47,7 +47,6 @@ class ClassResolver: class_name = ''.join(name_parts) return class_name - @staticmethod def get_fully_qualified_class(class_name: str = None, package_name: str = "discover", @@ -58,8 +57,9 @@ class ClassResolver: module_name = ".".join(module_parts) try: class_module = importlib.import_module(module_name) - except ImportError: - raise ValueError('could not import module {}'.format(module_name)) + except ImportError as e: + raise ValueError('could not import module {}: {}' + .format(module_name, str(e))) clazz = getattr(class_module, class_name) return clazz @@ -74,7 +74,8 @@ class ClassResolver: class_name = ClassResolver.get_class_name_by_module(module_name) if class_name in ClassResolver.instances: return 'instance', ClassResolver.instances[class_name] - clazz = ClassResolver.get_fully_qualified_class(class_name, package_name, + clazz = ClassResolver.get_fully_qualified_class(class_name, + package_name, module_name) return 'class', clazz diff --git a/docs/_static/favicon.ico b/docs/_static/favicon.ico deleted file mode 100755 index bbe55ab40de1dca529711bd956dd395f831c8661..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 diff --git a/docs/_static/my-styles.css b/docs/_static/my-styles.css deleted file mode 100644 index 8feb45b..0000000 --- a/docs/_static/my-styles.css +++ /dev/null @@ -1,33 +0,0 @@ -body { - font-family: Helvetica, sans-serif; - font-size: 16px; -} - -body a { - color: #27CCC0; -} - -body a:hover { - color: #676767; -} - -.navbar-brand img { - height: 200%; - margin-top: -5%; -} - -.navbar, h1, h2, h3, h4, h5, h6 { - font-family: Helvetica, sans-serif; -} - -.navbar-text{ - color: #676767; -} - -.navbar-form.navbar-right{ - padding: 0; -} - -.navbar-form .form-control{ - width: 150px; -} diff --git a/docs/_static/opnfv-logo.png b/docs/_static/opnfv-logo.png deleted file mode 100644 index 1519503eba764f7a00877b9b8bdbbd37fd3707c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2829 zcmV+o3-a`dP)3)28sjxMC?FF++Bq$U6w!I|Q zuDk75d^``ll?O5~(CmjEDa)%lO*g>n_g{0#>mC}Gzk+T4rzf9>j53xroI0y~C_9nZ zRT`GLg0kl=wSC&o>6~=+jNzR71<#dp4To_2s0>t*!h`9cI?8$fX~Qs`rR1m400P?y z90%)qtm)id4ONiKpFsI}ZSK@iJ|1rbWk*!DU!d(zDwO-{0ftjgEE_w%;rV)uW5>yH z_exeI%QmujpMCMW4sNM^@?x)fLqOrhd{$9sTgQ`d%yCO<1Iu4R`O_B4UJp!A_62MX zv+dC{T~-}GLx+x;{ijz!sH5z=g`on8=PSHb0@Q#SaG3%t>jDJstyjW^fI6$;(C9VJ zM0+-BvHTu^?J(N@qDGm&V(fERuzosQRFSAa>*vWrfXJ0P?>aF7?>Ukt-*BC%M;idD zR})ZIu_ASxwrtR%$Ly%uwx-ywh|=kCy{aTtUB<3KB~XF4LO2cx3OQ&Lq?yxFVUVVp z0PEI0KSd4M#7I7+3(=OHPzP?sW6{8s*)F2yL=?p|oPJ~?`#D}}PV%!7PnCdm2ZMFk zW>V&_r_iP-9Vh7N0H%W`WFN{S(M)#H$rw-?2dl-hr#TA2Yp8sVw>mO79!D;2$j(C9 zzXy*$kkgBc&!cDaj~~4?%jjHLfvo_Dkm|Ke`S>rtaK&a?_58uB@A@?~_QQr_jA4r% zdo6L~(X+|q1$xR6wDO0o6BtGDy;|9Z8x6|M}356(@zSPXM%I z0Lusl0BW2ws#XdW$sw*J3o5uE4yIuhY3{5zlq-KbOpogcel|5sNqChP?l1?Huz=hO z3SQz!l7IoUeXMDtEbxn7>nNR~-uQD!D>F?@CkV2w46eFk7TlE;cNI&vfdHD!z_ z;-^n$4()d+RT3Nj{MYwKT=-mO$Li`vcN)ExjLy|D=p^S*?wC11I3%$KjPkiq9dic& zD1XFAINVJI`no{?+x)D;i*#V%#b0@^6+U-r5gc9;H_K&CRFHYaqspI@xpfrruA!jPbh-F;K8f!CJmzV zLU^o+ux2fL(BTYxUP&*N3GW6};H`XywCO?Ilt`dZ<@y1lkihEFYh6s!Cok30j1p@| zA*PCL7qX^OJS8L`Cu6zNLM4H9hooAZa`}@)!U0$bFcXy=K$sXnq37#@mx`sb0!4-h zfeLNEv8FIi;>F96e%vf)rl-oBrvk7d@g%V6_BVf7| zS9#?9)}X;>(XRIvx@+2+Chn!X=v9g*FSX8@n+oz`TlVDdw|;)?Qi7qA@?Piv_~kSp zz&N9Wpt$LZ@;^pTT&l=jY6Ntv!S~(!0Ta?)fhieeICo6MH?;1D1P$l8DC}dpX`5a~ zALHCbvB>*ip9$1haUlorIZDD~fXnDY0!+y*J);b_d;*^%R6~F(+Hr^uC68UD{MqKZ zyQ#Xn1?sk9Ky^fF%h*#DhDrm}69BE&;9s04v@Bh*TZP#G|!E+Ltr=`%PvYj2Zzz=`e#qSKRysVIIQ8#7S=4&P4ul z16;dqQw`0;M;E8cz{eLz0YHF%!Pmr+uvP zEG{6yZ@RHP70GX%dWv-m-sHwqFa7pYIh`H<7f$Y9Kl$`$%G98dx#an({(_lPu>y#%;AjQuVEuIY|;4s81w z#Z9+x0(6IfO6rah*C;7Q>2IAZ=A_a?j=YvVm5$`A=Xk(NjTP=x_bf}^Nv%B}fOYWx z-+$w4&SwN*t#-g;MKm(5?=ac1cqys-LMUztGL*=J3S^`(fvTgaU|;f5s$9OWDi9=I z1mFZYUJgA`4`A^D8XT2Wv*9PAp~W{FPBzFLX_p|XyY7n$pqd*&g_%8ysUC{WH7f9A z{3JO6UdmNy&)G-!?s6LASmZx|h}zZ%u#N#NN6`>B>G!PgVok2wT@V%84C-F@)68XM zGW#x-jYI{2;|u+SY#vZP0L5w;Oh|yY!hN&Wg1h=3z#0Nr=i>Rt>A6e%UKe}1!$6_^ zyY2!|KE8hcHS9CJx}hwxL|L2>K%N3nzR5u_jZQK!y-@we@hOeIt`Go*-YJIn>X1b) zcSps7k=C}`RwbZX)CLv6gAir@0^=XP_$PXk@XgyVD}%}x-+6=`IL7!&&~sY=n5Ri( zAYfsMQAU@D!Ifo|}iQURGX*Df~iL*>ymsNDu7Cs_;TR&=~wSP z9+T$^YHUmnj8!iS9oRm+UBb=MKy;;sk-xOF8-RYdS%B~4aLpauf1?pPG zRovzD3f;9+c%BL+9>i4$h%21{H=dY~eDumzpn~LuFa55oXP~o9(&iJ!@#?aOQNC#m ze6EpDkzx5k3v5joGO*Bjy-? v documentation" by default. -# html_title = 'OpenDaylight Documentation v0.3.0' - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = '_static/opnfv-logo.png' - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -html_favicon = '_static/favicon.ico' - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not None, a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -# The empty string is equivalent to '%b %d, %Y'. -# html_last_updated_fmt = None - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# 'ja' uses this config value. -# 'zh' user can custom change `jieba` dictionary path. -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'OPNFV' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - #'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - #'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - #'preamble': '', - - # Latex figure (float) alignment - #'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'OPNFV.tex', 'OPNFV Documentation', - 'OPNFV Project', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'OPNFVDocs', 'OPNFV Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'OPNFVDocs', 'OPNFV Documentation', - author, 'OPNFV', 'One line description of project.', - 'Miscellaneous'), -] - -html_sidebars = {'**': ['localtoc.html', 'relations.html'],} -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - -# intersphinx_mapping = -# {'RTD':('http://opnfvdocsdemo.readthedocs.io/projects/', None)} diff --git a/docs/release/scenarios/os-nosdn-calipso-noha/apex-scenario-guide.rst b/docs/development/apex-scenario-guide.rst similarity index 100% rename from docs/release/scenarios/os-nosdn-calipso-noha/apex-scenario-guide.rst rename to docs/development/apex-scenario-guide.rst diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 7e960d8..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. This work is licensed under a Creative Commons Attribution 4.0 International License. -.. http://creativecommons.org/licenses/by/4.0 -.. (c) OPNFV and others. - -===================== -Calipso documentation -===================== - -.. toctree:: - :maxdepth: 1 - - release/index.rst diff --git a/docs/release/Calipso-usage-stories.rst b/docs/release/Calipso-usage-stories.rst new file mode 100644 index 0000000..4c0c753 --- /dev/null +++ b/docs/release/Calipso-usage-stories.rst @@ -0,0 +1,446 @@ +***The following are fake stories, although providing real examples of +real problems that are faced today by cloud providers, and showing +possible resolutions provided by Calipso:*** + +***Enterprise use-case story (Calipso ‘S’ release):*** + +Moz is a website publishing and managing product, Moz provides +reputation and popularity tracking, helps with distributions, listing, +and ratings and provides content distributions for industry marketing. + +Moz considers moving their main content distribution application to be +hosted on https://www.dreamhost.com/, which provides shared and +dedicated IaaS and PaaS hosting based on OpenStack. + +As a major milestone for Moz’s due diligence for choosing Dreamhost, Moz +acquires a shared hosting facility from Dreamhost, that is +cost-effective and stable, it includes 4 mid-sized Web-servers, 4 +large-sized Application-servers and 2 large-sized DB servers, connected +using several networks, with some security services. + +Dreamhost executives instruct their infrastructure operations department +to make sure proper SLA and Monitoring is in-place so the due diligence +and final production deployment of Moz’s services in the Dreamhost +datacenter goes well and that Moz’s engineers receive excellent service +experience. + +Moz received the following SLA with their current VPS contract: + +- 97-day money back guarantee, in case of a single service down event + or any dissatisfaction. + +- 99.5 % uptime/availability with a weekly total downtime of 30 + minutes. + +- 24/7/365 on-call service with a total of 6 hours MTTR. + +- Full HA for all networking services. + +- Managed VPS using own Control Panel IaaS provisioning with overall + health visibility. + +- Scalable RAM, starts with 1GB can grow per request to 16GB from + within control panel. + +- Guaranteed usage of SSD or equivalent speeds, storage capacity from + 30GB to 240GB. + +- Backup service based on cinder-backup and Ceph’s dedicated backup + volumes, with restoration time below 4 hours. + +Dreamhost‘s operations factored all requirement and has decided to +include real-time monitoring and analysis for the VPS for Moz. + +One of the tools used now for Moz environment in Dreamhost is Calipso +for virtual networking. + +Here are some benefits provided by Calipso for Dreamhost operations +during service cycles: + +*Reporting:* + +Special handling of virtual networking is in place: + +- Dreamhost designed a certain virtual networking setup and + connectivity that provides the HA and performance required by the SLA + and decided on several physical locations for Moz’s virtual servers + in different availability zones. + +- Scheduling of discovery has been created, Calipso takes a snapshot of + Moz’s environment every Sunday at midnight, reporting on connectivity + among all 20 servers (10 main and 10 backups) and overall health of + that connectivity. + +- Every Sunday morning at 8am, before the week’s automatic + snapshotting, the NOC administrator runs a manual discovery and saves + that snapshot, she then runs a comparison check against last week’s + snapshot and against initial design to find any gaps or changes that + might happen due to other shared services deployments, virtual + instances and their connectivity are analyzed and reported with + Calipso’s topology and health monitoring. + +- Reports are saved for a bi-weekly reporting sent to Moz’s networking + engineers. + + *Change management:* + + If infrastructure changes needs to happen on any virtual service + (routers, switches, firewalls etc.) or on any physical server or + physical switch the following special guidelines apply: + +- Run a search on Calipso for the name of the virtual service, switch + or host. Lookup if Moz environment is using this object (using the + object’s attributes). + +- Using Calipso’s impact analysis, fill a report stating all Moz’s + objects, on which host, connected to which switch that is affected by + the planed change. + +- Run clique-type scan, using the specific object as ‘focal-point’ to + create a dedicated topology with accompanied health report before + conducting the change itself, use this a *pre snapshot*. + +- Simulate the change, using Moz’s testing environment only, make sure + HA services are in places and downtime is confirmed to be in the SLA + boundaries. + +- Using all reports provided by Calipso, along with application and + storage reports, send a detailed change request to NOC and later to + the end-customer for review. + +- During the change, make sure HA is operational, by running the same + clique-type snapshotting every 10 minutes and running a comparison. + +- NOC, while waiting for the change to complete, looks at Calipso’s + dashboard focused on MOZ’s environment, monitoring results for + service down event (as expected), impact on other objects in the + service chain - the entire Calipso clique for that object (as + expected). + +- Once operations has reported back to NOC about change done, run the + same snapshotting again as *post snapshot* and run a comparison to + make sure all virtual networking are back to the ‘as designed’ stage + and all networking services are back. + +**Example snapshot taken at one stage on Calipso for the Moz virtual +networking:** + +|image0| + + *Troubleshooting:* + + Dreamhost NOC uses Calipso dashboards for Moz’s environment for + their daily health-check. Troubleshooting starts in two cases: + +1. When a failure is detected on Calipso for any of Moz’s objects on + their virtual networking topologies, + +2. When a service case has been opened by Moz with “High Priority, + service down” flag. + +3. Networking department needs to know which virtual services are + connected to which ACI switches ports. + + The following actions are taken, using Calipso dashboards: + +- Kickoff a discovery through Calipso API for all objects related to + Moz. + +- For a service request with no Calipso error detected: using Calipso’s + impact analysis, create all cliques for all objects as focal point. + +- For an error detected by Calipso: using Calipso’s impact analysis, + create cliques for objects with errors as focal point. + +- Resulted cliques are then analyzed using detailed messaging facility + in Calipso (looking deeply into any message generated regarding the + related objects). + +- Report with ACI ports to virtual services mappings is sent to + networking department for further analysis. + + |image1| + +- If this is a failure on any physical device (host or switch) and/or + on any physical NIC (switch or host side), Calipso immediately points + this out and using the specific set of messages generated the + administrator can figure out the root cause (like optical failure, + driver, disconnect etc.). + +- In virtual object failures Calipso saves time pinpointing the servers + where erroneous objects are running, and their previous and new + connectivity details. + +- Calipso alerts on dependencies for : + +1. All related objects in the clique for that objects. + +2. Related hosts + +3. Related projects and networks + +4. Related application (\* in case Murano app has been added) + +- Administrators connects directly to the specific servers and now, + using the specific object attributes can start he’s manual + troubleshooting (actual fixing of the software issues is not + currently part of the Calipso features). + +- The NOC operators approves closing the service ticket only when all + related Calipso cliques are showing up as healthy and connectivity is + back to it’s original “as designed” stage, using Calipso older + snapshots. + +**Lookup of message – to – graph object in messaging facility:** + +|image2| + +**Finding the right object related to a specific logging/monitoring +message**: + +|image3| + +***Service Provider use-case story (Calipso ‘P’ release):*** + +BoingBoing is a specialized video casting service and blogging site. It +is using several locations to run their service (regional hubs and +central corporate campus, some hosted and some are private). + +BoingBoing contracted AT&T to build an NFV service for them, deployed on +2 new hosted regional hubs, to be brought up dynamically for special +sporting, news or cloture events. On each one of the 2 hosted virtual +environments the following service chain is created: + +1. Two vyatta 5600 virtual routers are front-end routing aggregation + function. + +2. Two Steelhead virtual wan acceleration appliances connected to + central campus for accelerating and caching of video casting + services. + +3. Two f5 BIG-IP Traffic Management (load balancing) virtual appliances. + +4. Two Cisco vASA for virtual firewall and remote-access VPN services. + +As a major milestone for BoingBoing’s due diligence for choosing AT&T +NFV service, BoingBoing acquires 2 shared hosting facilities and +automatic service from AT&T, that is cost-effective and stable, it +includes This NFV service consist of a total of 16 virtual appliance +across those 2 sites, to be created on-demand and maintained with a +certain SLA once provisioned, all NFV devices are connected using +several networks, provisioned using VPP ml2 on an OpenStack based +environment.. + +AT&T executives instruct their infrastructure operations department to +make sure proper SLA and Monitoring is in-place so the due diligence and +final production deployment of BoingBoing’s services in the AT&T +datacenters goes well and that BoingBoing’s engineers receive excellent +service experience. + +BoingBoing received the following SLA with their current VPS contract: + +- 30-day money back guarantee, in case of a single service down event + or any dissatisfaction. + +- 99.9 % uptime/availability with a weekly total downtime of 10 + minutes. + +- 24/7/365 on-call service with a total of 2 hours MTTR. + +- Full HA for all networking services. + +- Managed service using Control Panel IaaS provisioning with overall + health visibility. + +- Dedicated RAM, from16GB to 64GB from within control panel. + +- Guaranteed usage of SSD or equivalent speeds, storage capacity from + 10GB to 80GB. + +- Backup service based on cinder-backup and Ceph’s dedicated backup + volumes, with restoration time below 4 hours. + +- End-to-end throughput from central campus to dynamically created + regional sites to be always above 2Gbps, including all devices on the + service chain and the virtual networking in place. + +AT&T’s operations factored all requirement and has decided to include +real-time monitoring and analysis for the NFV environment for +BoingBoing. + +One of the tools used now for BoingBoing environment in AT&T is Calipso +for virtual networking. + +Here are some benefits provided by Calipso for AT&T operations during +service cycles: + +*Reporting:* + +Special handling of virtual networking is in place: + +- AT&T designed a certain virtual networking (SFC) setup and + connectivity that provides the HA and performance required by the SLA + and decided on several physical locations for BoingBoing’s virtual + appliances in different availability zones. + +- Scheduling of discovery has been created, Calipso takes a snapshot of + BoingBoing’s environment every Sunday at midnight, reporting on + connectivity among all 16 instances (8 per regional site, 4 pairs on + each) and overall health of that connectivity. + +- Every Sunday morning at 8am, before the week’s automatic + snapshotting, the NOC administrator runs a manual discovery and saves + that snapshot, she then runs a comparison check against last week’s + snapshot and against initial design to find any gaps or changes that + might happen due to other shared services deployments, virtual + instances and their connectivity are analyzed and reported with + Calipso’s topology and health monitoring. + +- Reports are saved for a bi-weekly reporting sent to BoingBoing’s + networking engineers. + +- Throughput is measured by a special traffic sampling technology + inside the VPP virtual switches and sent back to Calipso for + references to virtual objects and topological inventory. Dependencies + are analyzed so SFC topologies are now visualized across all sites + and includes graphing facility on the Calipso UI to visualize the + throughput. + + *Change management:* + + If infrastructure changes needs to happen on any virtual service + (NFV virtual appliances, internal routers, switches, firewalls etc.) + or on any physical server or physical switch the following special + guidelines apply: + +- Run a lookup on Calipso search-engine for the name of the virtual + service, switch or host, including names of NFV appliances as updated + in the Calipso inventory by the NFV provisioning application. Lookup + if BoingBoing environment is using this object (using the object’s + attributes). + + **Running a lookup on Calipso search-engine** + +|image4| + +- Using Calipso’s impact analysis, fill a report stating all + BoingBoing’s objects, on which host, connected to which switch that + is affected by the planed change. + +- Run clique-type scan, using the specific object as ‘focal-point’ to + create a dedicated topology with accompanied health report before + conducting the change itself, use this a *pre snapshot*. + +- Simulate the change, using BoingBoing’s testing environment only, + make sure HA services are in places and downtime is confirmed to be + in the SLA boundaries. + +- Using all reports provided by Calipso, along with application and + storage reports, send a detailed change request to NOC and later to + the end-customer for review. + +- During the change, make sure HA is operational, by running the same + clique-type snapshotting every 10 minutes and running a comparison. + +- NOC, while waiting for the change to complete, looks at Calipso’s + dashboard focused on BoingBoing’s environment, monitoring results for + SFC service down event (as expected), impact on other objects in the + service chain - the entire Calipso clique for that object (as + expected). + +- Once operations has reported back to NOC about change done, run the + same snapshotting again as *post snapshot* and run a comparison to + make sure all virtual networking are back to the ‘as designed’ stage + and all networking services are back. + +**Example snapshot taken at one stage for the BoingBoing virtual +networking and SFC:** + +|image5| + + *Troubleshooting:* + + AT&T NOC uses Calipso dashboards for BoingBoing’s environment for + their daily health-check. Troubleshooting starts in two cases: + +1. When a failure is detected on Calipso for any of BoingBoing’s objects + on their virtual networking topologies, + +2. When a service case has been opened by BoingBoing with “High + Priority, SFC down” flag. + + The following actions are taken, using Calipso dashboards: + +- Kickoff a discovery through Calipso API for all objects related to + BoingBoing. + +- For a service request with no Calipso error detected: using Calipso’s + impact analysis, create all cliques for all objects as focal point. + +- For an error detected by Calipso: using Calipso’s impact analysis, + create cliques for objects with errors as focal point. + +- Resulted cliques are then analyzed using detailed messaging facility + in Calipso (looking deeply into any message generated regarding the + related objects). + +- If this is a failure on any physical device (host or switch) and/or + on any physical NIC (switch or host side), Calipso immediately points + this out and using the specific set of messages generated the + administrator can figure out the root cause (like optical failure, + driver, disconnect etc.). + +- In virtual object failures Calipso saves time pinpointing the servers + where erroneous objects are running, and their previous and new + connectivity details. + +- \*Sources of alerts ...OpenStack, Calipso’s and Sensu are built-in + sources, other NFV related monitoring and alerting sources can be + added to Calipso messaging system. + +- Calipso alerts on dependencies for : + +1. All related objects in the clique for that objects. + +2. Related hosts + +3. Related projects and networks + +4. Related NFV service and SFC (\* in case NFV tacker has been added) + +- Administrators connects directly to the specific servers and now, + using the specific object attributes can start he’s manual + troubleshooting (actual fixing of the software issues is not + currently part of the Calipso features). + +- The NOC operators approves closing the service ticket only when all + related Calipso cliques are showing up as healthy and connectivity is + back to it’s original “as designed” stage, using Calipso older + snapshots. + +**Calipso’s monitoring dashboard shows virtual services are back to +operational state:** + +|image6| + +.. |image0| image:: media/image101.png + :width: 7.14372in + :height: 2.84375in +.. |image1| image:: media/image102.png + :width: 6.99870in + :height: 2.87500in +.. |image2| image:: media/image103.png + :width: 6.50000in + :height: 0.49444in +.. |image3| image:: media/image104.png + :width: 6.50000in + :height: 5.43472in +.. |image4| image:: media/image105.png + :width: 7.24398in + :height: 0.77083in +.. |image5| image:: media/image106.png + :width: 6.50000in + :height: 3.58611in +.. |image6| image:: media/image107.png + :width: 7.20996in + :height: 2.94792in diff --git a/docs/release/admin-guide.rst b/docs/release/admin-guide.rst index edf7b00..3529e77 100644 --- a/docs/release/admin-guide.rst +++ b/docs/release/admin-guide.rst @@ -923,7 +923,7 @@ Event-based handling details +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | # | Event name | AMQP event | Handler | Workflow | Scans | Notes | +==========================+===========================+=====================================+=========================================+==================================================================================================================================================================================================================================================================================+======================================================================================================+==========================================================================================================================================================================================================================================================================================================================================+ -| **Instance** | +| **Instance** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 1 | Create Instance | compute.instance.create.end | EventInstanceAdd | 1. Get *instances\_root* from inventory | **Yes** | ** ** | | | | | | | | | @@ -969,7 +969,7 @@ Event-based handling details | | | | | | | | | | | | | 2. Execute *self.delete\_handler()* | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Instance Lifecycle** | +| **Instance Lifecycle** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 4 | Instance Down | compute.instance.shutdown.start | **Not implemented** | | | | | | | | | | | | @@ -981,7 +981,7 @@ Event-based handling details | | | | | | | | | | | compute.instance.suspend.end | | | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Region** | +| **Region** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 6 | Add Region | servergroup.create | **Not implemented** | | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -991,7 +991,7 @@ Event-based handling details +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 8 | Delete Region | servergroup.delete | **Not implemented** | ** ** | ** ** | ** ** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Network** | +| **Network** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 9 | Add Network | network.create.end | EventNetworkAdd | 1. If network with specified *id* already exists, log error and **return None** | **No** | ** ** | | | | | | | | | @@ -1015,7 +1015,7 @@ Event-based handling details | | | | | | | | | | | | | 2. Execute *self.delete\_handler()* | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Subnet** | +| **Subnet** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 12 | Add Subnet | subnet.create.end | EventSubnetAdd | 1. Get *network\_document* from db | **Yes** {cliques: 1} | 1. I don’t fully understand what `*these lines* `__ do. We make sure *ApiAccess.regions* variable is not empty, but why? The widespread usage of static variables is not a good sign anyway. | | | | | | | | | @@ -1069,7 +1069,7 @@ Event-based handling details | | | | | | | | | | | | | 6. If no subnets are left in *network\_document*, delete related vservice dhcp, port and vnic documents | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Port** | +| **Port** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 15 | Create Port | port.create.end | EventPortAdd | 1. Check if ports folder exists, create if not. | **Yes** {cliques: 1} | 1. The port and (maybe) port folder will still persist in db even if we abort the execution on step 6. See idea 1 for details. | | | | | | | | | @@ -1127,7 +1127,7 @@ Event-based handling details | | | | | | | | | | | | | 6. Execute *self.delete\_handler(vnic)* *for vnic* | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Router** | +| **Router** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 18 | Add Router | router.create.end | EventRouterAdd | 1. Get *host* by id from db | **Yes** {cliques: 1} | 1. Looks like code author confused a lot of stuff here. This class needs to be reviewed thoroughly. | | | | | | | | | @@ -1193,7 +1193,7 @@ Event-based handling details | | | | | | | | | | | | | 2. Execute *self.delete\_handler()* | | | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **Router Interface** | +| **Router Interface** | +--------------------------+---------------------------+-------------------------------------+-----------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 21 | Add Router Interface | router.interface.create | EventInterfaceAdd | 1. Get *network\_doc* from db based on subnet id from interface payload | **Yes** {cliques: 1} | 1. Log message states that we should abort interface adding, though the code does nothing to support that. Moreover, router\_doc can’t be empty at that moment because it’s referenced before. | | | | | | | | | diff --git a/docs/release/apex-scenario-guide.rst b/docs/release/apex-scenario-guide.rst new file mode 100644 index 0000000..c240b0a --- /dev/null +++ b/docs/release/apex-scenario-guide.rst @@ -0,0 +1,282 @@ +| Calipso.io +| Installation Guide + +|image0| + +Project “Calipso” tries to illuminate complex virtual networking with +real time operational state visibility for large and highly distributed +Virtual Infrastructure Management (VIM). + +We believe that Stability is driven by accurate Visibility. + +Calipso provides visible insights using smart discovery and virtual +topological representation in graphs, with monitoring per object in the +graph inventory to reduce error vectors and troubleshooting, maintenance +cycles for VIM operators and administrators. + +Table of Contents + +Calipso.io Installation Guide 1 + +1 Pre Requisites 3 + +1.1 Pre Requisites for Calipso “all in one” application 3 + +1.2 Pre Requisites for Calipso UI application 3 + +2 Installation Option used with Apex 4 + +2.1 Micro Services App, single line install 4 + +3 OPNFV Scenario 5 + +3.1 APEX automatic configurator and setup 5 + +3.2 Apex scenario 5 + +3.3 Calipso functest 6 + +TBD 6 + +Pre Requisites +=============== + +Pre Requisites for Calipso “all in one” application +---------------------------------------------------- + + Calipso’s main application is written with Python3.5 for Linux + Servers, tested successfully on Centos 7.3 and Ubuntu 16.04. When + running using micro-services many of the required software packages + and libraries are delivered per micro service, but for an “all in + one” application case there are several dependencies. + + Here is a list of the required software packages, and the official + supported steps required to install them: + +1. Python3.5.x for Linux : + https://docs.python.org/3.5/using/unix.html#on-linux + +2. Pip for Python3 : https://docs.python.org/3/installing/index.html + +3. Python3 packages to install using pip3 : + + **sudo pip3 install falcon (>1.1.0)** + + **sudo pip3 install pymongo (>3.4.0)** + + **sudo pip3 install gunicorn (>19.6.0)** + + **sudo pip3 install ldap3 (>2.1.1)** + + **sudo pip3 install setuptools (>34.3.2)** + + **sudo pip3 install python3-dateutil (>2.5.3-2)** + + **sudo pip3 install bcrypt (>3.1.1)** + + **sudo pip3 install bson** + + **sudo pip3 install websocket** + + **sudo pip3 install datetime** + + **sudo pip3 install typing** + + **sudo pip3 install kombu** + + **sudo pip3 install boltons** + + **sudo pip3 install paramiko** + + **sudo pip3 install requests ** + + **sudo pip3 install httplib2** + + **sudo pip3 install mysql.connector** + + **sudo pip3 install xmltodict** + + **sudo pip3 install cryptography** + + **sudo pip3 install docker** + +1. Git : https://git-scm.com/book/en/v2/Getting-Started-Installing-Git + +2. Docker : https://docs.docker.com/engine/installation/ + +Pre Requisites for Calipso UI application +------------------------------------------ + + Calipso UI is developed and maintained using Meteor Framework + (https://www.meteor.com/tutorials). For stability and manageability + reasons we decided to always build the latest Calipso UI as a Docker + container pre-parameterized for stable and supported behavior. The + required steps for installing the Calipso UI with several options + are listed below. + +Installation Option used with Apex +================================== + +Micro Services App, single line install +--------------------------------------- + + For most users, this will be the fastest and more reliable install + option. We currently have Calipso divided into 7 major containers, + those are installed using a single installer. The Calipso containers + are pre-packaged and fully customized per our design needs. Here are + the required steps for installation using this option: + +1. Follow steps 1- 5 per section 2.1 above. + +2. Install Docker : https://docs.docker.com/engine/installation/ + +3. Install the following python3 libraries using pip3 : docker, pymongo + +4. Although Calipso installer can download all needed containers, if + they doesn’t exist locally already, we recommend doing a manual + download of all 7 containers, providing better control and logging: + + **sudo docker login** # use your DockerHub username and password to + login. + + **sudo docker pull korenlev/calipso:scan** # scan container used to + scan VIM + + **sudo docker pull korenlev/calipso:listen** # listen container to + attach to VIM’s BUS. + + **sudo docker pull korenlev/calipso:api** # api container for + application integration + + **sudo docker pull korenlev/calipso:sensu** # sensu server container + for monitoring + + **sudo docker pull korenlev/calipso:mongo** # calipso mongo DB + container + + **sudo docker pull korenlev/calipso:ui** # calipso ui container + + **sudo docker pull korenlev/calipso:ldap** # calipso ldap container + +1. Check that all containers were downloaded and registered + successfully: + + **sudo docker images** + + Expected results (As of Aug 2017): + + **REPOSITORY TAG IMAGE ID CREATED SIZE** + + **korenlev/calipso listen 12086aaedbc3 6 hours ago 1.05GB** + + **korenlev/calipso api 34c4c6c1b03e 6 hours ago 992MB** + + **korenlev/calipso scan 1ee60c4e61d5 6 hours ago 1.1GB** + + **korenlev/calipso sensu a8a17168197a 6 hours ago 1.65GB** + + **korenlev/calipso mongo 17f2d62f4445 22 hours ago 1.31GB** + + **korenlev/calipso ui ab37b366e812 11 days ago 270MB** + + **korenlev/calipso ldap 316bc94b25ad 2 months ago 269MB** + +1. Run the calipso installer using single line arguments: + + **python3 calipso/app/install/calipso-installer.py--command + start-all --copy q** + + This should launch all calipso modules in sequence along with all + needed configuration files placed in /home/calipso. + +OPNFV Scenario +=============== + +Although calipso is designed for any VIM and for enterprise use-cases +too, service providers can use additional capability to install calipso +with Apex for OPNFV. + +APEX automatic configurator and setup +------------------------------------- + + When using apex to install OPNFV, the Triple-O based OpenStack is + installed automatically and calipso installation can be initiated + automatically after apex completes the VIM installation process for + a certain scenario. + + In this case setup\_apex\_environment.py can be used for creating a + new environment automatically into mongoDB and UI of Calipso + (instead of using the calipso UI to do that as typical user would + do), then detailed scanning can start immediately, the following + options are available for setup\_apex\_environment.py: + + **-m [MONGO\_CONFIG], --mongo\_config [MONGO\_CONFIG]** + + **name of config file with MongoDB server access details** + + **(Default: /local\_dir/calipso\_mongo\_access.conf)** + + **-d [CONFIG\_DIR], --config\_dir [CONFIG\_DIR]** + + **path to directory with config data (Default:** + + **/home/calipso/apex\_setup\_files)** + + **-i [INSTALL\_DB\_DIR], --install\_db\_dir [INSTALL\_DB\_DIR]** + + **path to directory with DB data (Default:** + + **/home/calipso/Calipso/app/install/db)** + + **-a [APEX], --apex [APEX]** + + **name of environment to Apex host** + + **-e [ENV], --env [ENV]** + + **name of environment to create(Default: Apex-Euphrates)** + + **-l [LOGLEVEL], --loglevel [LOGLEVEL]** + + **logging level (default: "INFO")** + + **-f [LOGFILE], --logfile [LOGFILE]** + + **log file (default:** + + **"/home/calipso/log/apex\_environment\_fetch.log")** + + **-g [GIT], --git [GIT]** + + **URL to clone Git repository (default:** + + **https://git.opnfv.org/calipso)** + +Apex scenario +------------- + + Starting Euphrates 1.0 the following scenario added with Apex + installer: + + **os-nosdn-calipso-noha** + + Following CI jobs defined: + + https://build.opnfv.org/ci/job/calipso-verify-euphrates/ + + https://build.opnfv.org/ci/job/apex-testsuite-os-nosdn-calipso-noha-baremetal-euphrates/ + + https://build.opnfv.org/ci/job/apex-os-nosdn-calipso-noha-baremetal-euphrates/ + + Note: destination deploy server needs to have pre-requisites + detailed above. + +Calipso functest +---------------- + +TBD +---- + +.. |image0| image:: media/image1.png + :width: 6.50000in + :height: 4.27153in diff --git a/docs/release/developer-guide.pdf b/docs/release/developer-guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ed302eb43adabd5e7c53c60f56ce1154de267a7 GIT binary patch literal 252310 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�C2R~i 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∈wxsdJJ}GFb^H)R*Im&snwn+}Bg5>lQlP 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

owO}C{_A}2>{2I^?UumnI1 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, `Scanners configuration + file structure <#the-scanners-configuration-file-structure>`__) that + use fetchers to get all needed data on objects of the topology; + +- tracking live events that modifies the topology in any way (by adding + new object, updating existing or deleting them) using a suite of + event handlers and event listeners; + +- managing the aforementioned suites using specialized manager scripts + (*scan\_manager.py* and *event\_manager.py*) + +‘Tests’ package +~~~~~~~~~~~~~~~ + +‘Tests’ package contains unit tests for main Calipso components: API, +event handlers, fetchers, scanners and utils. + +Other packages +~~~~~~~~~~~~~~ + +***Install*** + +Installation and deployment scripts (with initial data for Calipso +database). + +***Monitoring*** + +Monitoring configurations, checks and handlers (see +`Monitoring <#monitoring>`__ section and Monitoring Guide document). + +***Utils*** + +Utility modules for app-wide use (inventory manager, mongo access, +loggers, etc.). + +Scanning Guide +============== + + Introduction to scanning +------------------------- + +Architecture overview +~~~~~~~~~~~~~~~~~~~~~ + +Calipso backend will scan any OpenStack environment to discover the +objects that it is made of, and place the objects it discovered in a +MongoDB database. + +Following discovery of objects, Calipso will: + +| Find what links exist between these objects, and save these links to + MongoDB as well. +| For example, it will create a pnic-network link from a pNIC (physical + NIC) and the network it is connected to. + +Based on user definitions, it will create a 'clique' for each object +using the links it previously found. These cliques are later used to +present graphs for objects being viewed in the Calipso UI. This is not a +clique by graph theory definition, but more like the social definition +of clique: a graph of related, interconnected nodes. + +  + +OpenStack Scanning is done using the following methods, in order of +preference: + +1. OpenStack API + +2. MySQL DB - fetch any extra detail we can from the infrastructure + MySQL DB used by OpenStack + +3. CLI - connect by SSH to the hosts in the OpenStack environment to run + commands, e.g. ifconfig, that will provide the most in-depth details. + +  + +| *Note*: 'environment' in Calipso means a single deployment of + OpenStack, possibly containing multiple tenants (projects), hosts and + instances (VMs). A single Calipso instance can handle multiple + OpenStack environments.  +| However, we expect that typically Calipso will reside inside an + OpenStack control node and will handle just that node's OpenStack + environment. + +  + +***Environment*** + +| The Calipso scan script, written in Python, is called scan.py. +| It uses Python 3, along with the following libraries: + +- pymongo - for MongoDB access + +- mysql-connector - For MySQL DB access + +- paramiko - for SSH access + +- requests - For handling HTTP requests and responses to the OpenStack + API + +- xmltodict - for handling XML output of CLI commands + +- cryptography - used by Paramiko + +See Calipso installation guide for environment setup instructions. + +***Configuration*** + +The configuration for accessing the OpenStack environment, by API, DB or +SSH, is saved in the Calipso MongoDB *“environments\_config”* +collection. + +Calipso can work with a remote MongoDB instance, the details of which +are read from a configuration file (default: */etc/calipso/mongo.conf*). + +| The first column is the configuration key while the second is the + configuration value, in the case the value is the server host name or + IP address. +| Other possible keys for MongoDB access: + +- port: IP port number + +- Other parameters for the PyMongo MongoClient class constructor + +Alternate file location can be specified using the CLI -m parameter. + +Scanning concepts +~~~~~~~~~~~~~~~~~ + +***DB Schema*** + +Objects are stored in the inventory collection, named *“inventory”* by +default, along with the accompanying collections, named by +default: \ *"links", "cliques", "clique\_types" and +"clique\_constraints"*. For development, separate sets of collections +can be defined per environment (collection names are created by +appending the default collection name to the alternative inventory +collection name). + +The inventory, links and cliques collections are all designed to work +with a multi-environment scenario, so documents are marked with an +*"environment"* attribute. + +The clique\_types collection allows Calipso users (typically +administrators) to define how the "clique" graphs are to be defined.  + +It defines a set of link types to be traversed when an object such as an +instance is clicked in the UI (therefore referred to as the focal +point). See "Clique Scanning" below. This definition can differ between +environments. + +Example: for focal point type "instance", the link types are often set +to + +- instance-vnic + +- vnic-vconnector + +- vconnector-vedge + +- vedge-pnic + +- pnic-network + +| The clique\_constraints collection defines a constraint on links + traversed for a specific clique when starting from a given focal + point.  +| For example: instance cliques are constrained to a specific + network. If we wouldn't have this constraint, the resulting graph + would stretch to include objects from neighboring networks that are + not really related to the instance. + +\ ***Hierarchy of Scanning*** + +The initial scanning is done hierarchically, starting from the +environment level and discovering lower levels in turn. + +Examples: + +- Under environment we scan for regions and projects (tenants). + +- Under availability zone we have hosts, and under hosts we have + instances and host services + +The actual scanning order is not always same as the logical hierarchical +order of objects, to improve scanning performance. + +Some objects are referenced multiple times in the hierarchy. For +example, hosts are always in an availability zone, but can also be part +of a host aggregate. Such extra references are saved as references to +the main object. + +***Clique Scanning*** + +| For creating cliques based on the discovered objects and links, clique + types need to be defined for the given environment. +| A clique type specifies the list of link types used in building a + clique for a specific focal point object type. + +For example, it can define that for instance objects we want to have the +following link types: + +- instance-vnic + +- vnic-vconnector + +- vconnector-vedge + +- vedge-pnic + +- pnic-network + +  + +As in many cases the same clique types are used, default clique types +will be provided with a new Calipso deployment. + +\ ***Clique creation algorithm*** + +- For each clique type CT: + + - For each focal point object F of the type specified as the clique + type focal point type: + + - Create a new clique C + + - Add F to the list of objects included in the clique + + - For each link type X-Y of the link types in CT: + + - Find all the source objects of type x that are already + included in the clique + + - For each such source object S: + + - for all links L of type X-Y that have S as their source + + - Add the object T of type Y that is the target in L to the + list of objects included in the clique + + - Add L to the list of links in the clique C + +How to run scans +---------------- + +For running environment scans Calipso uses a specialized daemon script +called *scan manager*. If Calipso application is deployed in docker +containers, scan manager will run inside the *calipso-scan* container. + +Scan manager uses MongoDB connection to fetch requests for environment +scans and execute them by running a *scan* script. It also performs +extra checks and procedures connected to scan failure/completion, such +as marking *environment* as scanned and reporting errors (see +`details <#scan-manager>`__). + +Scan script workflow: + +1. Loads specific scanners definitions from a predefined metadata file + (which can be extended in order to support scanning of new object + types). + +2. Runs the root scanner and then children scanners recursively (see + `Hierarchy of scanning <#Hierarchy_of_scanning>`__) + + a. Scanners do all necessary work to insert objects in *inventory*. + +3. Finalizes the scan and publishes successful scan completion. + +Scan manager +~~~~~~~~~~~~ + +Scan manager is a script which purpose is to manage the full lifecycle +of scans requested through API. It runs indefinitely while: + +1. Polling the database (*scans* and *scheduled\_scans* collections) for + new and scheduled scan requests; + +2. Parsing their configurations; + +3. Running the scans; + +4. Logging the results. + +Scan manager can be run in a separate container provided that it has +connection to the database and the topology source system. + +Monitoring +---------- + +***Monitoring Subsystem Overview*** + +Calipso monitoring uses Sensu to remotely track actual state of hosts. + +A Sensu server is installed as a Docker image along with the other +Calipso components. + +  + +Remote hosts send check events to the Sensu server.  + +We use a filtering of events such that the first occurrence of a check +is always used, after that cases where status is unchanged are ignored. + +When handling a check event, the Calipso Sensu handlers will find the +matching Calipso object, and update its status. + +We also keep the timestamp of the last status update, along with the +full check output. + +Setup of checks and handlers code on the server and the remote hosts can +be done by Calipso. It is also possible to have this done using another +tool, e.g. Ansible or Puppet. + +More info is available in Monitoring Guide document. + +  + +***Package Structure*** + +Monitoring package is divided like this: + +1.      Checks: these are the actual check scripts that will be run on +the hosts; + +2.      Handlers: the code that does handling of check events; + +3.      Setup: code for setting up handlers and checks. + +Events Guide +============ + +Introduction +------------ + +Events +~~~~~~ + +Events in general sense are any changes to the monitored topology +objects that are trackable by Calipso. We currently support subscription +to Neutron notification queues for several OpenStack distributions as a +source of events. + +The two core concepts of working with events are *listening to events* +and *event handling*, so the main module groups in play are the *event +listener* and *event handlers*. + +Event listeners +~~~~~~~~~~~~~~~ + +An event listener is a module that handles connection to the event +source, listening to the new events and routing them to respective event +handlers. + +An event listener class should be designed to run indefinitely in +foreground or background (daemon) while maintaining a connection to the +source of events (generally a message queue like RabbitMQ or Apache +Kafka). Each incoming event is examined and, if it has the correct +format, is routed to the corresponding event handler class. The routing +can be accomplished through a dedicated event router class using a +metadata file and a metadata parser (see `Metadata +parsers <#metadata-parsers>`__). + +Event handlers +~~~~~~~~~~~~~~ + +An event handler is a specific class that parses the incoming event +payload and performs a certain CUD (Create/Update/Delete) operation on +zero or more database objects. Event handler should be independent of +the event listener implementation. + +Event manager +~~~~~~~~~~~~~ + +Event manager is a script which purpose is to manage event listeners. It +runs indefinitely and performs the following operations: + +1. Starts a process for each valid entry in *environments\_config* + collection that is scanned (*scanned == true*) and has the *listen* + flag set to *true*; + +2. Checks the *operational* statuses of event listeners and updating + them in *environments\_config* collection; + +3. Stops the event listeners that no longer qualify for listening (see + step 1); + +4. Restarts the event listeners that quit unexpectedly; + +5. Repeats steps 1-5 + +Event manager can be run in a separate container provided that it has +connection to the database and to all events source systems that event +listeners use. + +Contribution +~~~~~~~~~~~~ + +You can contribute to Calipso *events* system in several ways: + +- create custom event handlers for an existing listener; + +- create custom event listeners and reuse existing handlers; + +- create custom event handlers and listeners. + +See `Creating new event handlers <#creating-new-event-handlers>`__ and +`Creating new event listeners <#creating-new-event-listeners>`__ for the +respective guides. + +Contribution +============ + +This section covers the designed approach to contribution to Calipso. + +The main scenario of contribution consists of introducing a new *object* +type to the discovery engine, defining *links* that connect this new +object to existing ones, and describing a *clique* (or cliques) that +makes use of the object and its links. Below we describe how this +scenario should be implemented, step-by-step. + +*Note*: Before writing any new code, you need to create your own +environment using UI (see User Guide document) or API (see the API guide +doc). Creating an entry directly in *“environments\_config”* collection +is not recommended. + +Creating new object types +------------------------- + +Before you proceed with creation of new object type, you need to make +sure the following requirements are met: + +- New object type has a unique name and purpose + +- New object type has an existing parent object type + +First of all, you need to create a fetcher that will take care of +getting info on objects of the new type, processing it and adding new +entries in Calipso database. + +Creating new fetchers +~~~~~~~~~~~~~~~~~~~~~ + +A fetcher is a common name for a class that handles fetching of all +objects of a certain type that have a common parent object. The source +of this data may be already implemented in Calipso (like OpenStack API, +CLI and DB sources) or you may create one yourself. + +***Common fetchers*** + +Fetchers package structure should adhere to the following pattern (where +*%source\_name%* is a short prefix like *api, cli, db*): + +- app + + - discover + + - fetchers + + - *%source\_name%* + + - *%source\_name%*\ \_\ *%fetcher\_name%.*\ py + +If you reuse the existing data source, your new fetcher should subclass +the class located in *%source\_name%\_access* module inside the +*%source\_name%* directory. + +Fetcher class name should repeat the module name, except in CamelCase +instead of snake\_case. + +Example: if you are adding a new cli fetcher, you should subclass +*CliAccess* class found by *app/discover/fetchers/cli/cli\_access.py* +path. If the module is named *cli\_fetch\_new\_objects.py*, fetcher +class should be named *CliFetchNewObjects*. + +If you are creating a fetcher that uses new data source, you may +consider adding an “access” class for this data source to store +convenience methods. In this case, the “access” class should subclass +the base Fetcher class (found in *app/discover/fetcher.py*) and the +fetcher class should subclass the “access” class. + +All business logic of a fetcher should be defined inside the overridden +method from base Fetcher class *get(self, parent\_id)*. You should use +the second argument that is automatically passed by parent scanner to +get the parent entity from database and any data you may need. This +method has to return a list of new objects (dicts) that need to be +inserted in Calipso database. Their parent object should be passed along +other fields (see example). + +*Note*: types of returned objects should match the one their fetcher is +designed for. + +***Example***: + +**app/discover/fetchers/cli/cli\_fetch\_new\_objects.py** + + | **from** discover.fetchers.cli.cli\_access **import** CliAccess + | **from** utils.inventory\_mgr **import** InventoryMgr + | **class** CliFetchNewObjects(CliAccess): + | **def** \_\_init\_\_(self): + | super().\_\_init\_\_() + | self.inv = InventoryMgr() + | **def** get(self, parent\_id): + | parent = self.inv.get\_by\_id(self.env, parent\_id) + | *# do something + *\ objects = [{**"type"**: **"new\_type"**, **"id"**: **"1234"**, + **"parent"**: parent}, + | {**"type"**: **"new\_type"**, **"id"**: **"2345"**, **"parent"**: + parent}] + | **return** objects + +This is an example of a fetcher that deals with the objects of type +*“new\_type”*. It uses the parent id to fetch the parent object, then +performs some operations in order to fetch the new objects and +ultimately returns the objects list, at which point it has gathered all +required information. + +\ ***Folder fetcher*** + +A special type of fetchers is the folder fetcher. It serves as a dummy +object used to aggregate objects in a specific point in objects +hierarchy. If you would like to logically separate children objects from +parent, you may use folder fetcher found at +*app/discover/fetchers/folder\_fetcher.py*. + +Usage is described `here <#Folder_scanner>`__. + +The scanners configuration file structure +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Scanners.json** (full path *app/config/scanners.json*) is an essential +configuration file that defines scanners hierarchy. It has a forest +structure, meaning that it is a set of trees, where each tree has a +*root* scanner, potentially many levels of *children* scanners and +pointers from parent scanners to children scanners. Scanning hierarchy +is described `here <#Hierarchy_of_scanning>`__. + +A scanner is essentially a list of fetchers with configuration (we’ll +call those **Fetch types**). Fetch types can be **Simple** and +**Folder**, described below. + +***Simple fetch type*** + +A simple fetch type looks like this: + + | { + | **"type"**: **"project"**, + | **"fetcher"**: **"ApiFetchProjects"**, + | **"object\_id\_to\_use\_in\_child"**: **"name"**, + + | **"environment\_condition"**: { + | **"mechanism\_drivers"**: **"VPP" + ** }, + | **"children\_scanner"**: **"ScanProject" + **} + +Supported fields include: + +- *“fetcher”* – class name of fetcher that the scanner uses; + +- *“type”* – object type that the fetcher works with; + +- *“children\_scanner”* – (optional) full name of a scanner that should + run after current one finishes; + +- *“environment\_condition”* – (optional) specific constraints that + should be checked against the environment in *environments\_config* + collection before execution; + +- *“object\_id\_to\_use\_in\_child*\ ” – (optional) which parent field + should be passed as parent id to the fetcher (default: “id”). + + \ ***Folder fetch type*** + +Folder fetch types deal with folder fetchers (described +`here <#Folder_fetcher>`__) and have a slightly different structure: + + | { + | **"type"**: **"aggregates\_folder"**, + | **"fetcher"**: { + | **"folder"**: **true**, + | **"types\_name"**: **"aggregates"**, + | **"parent\_type"**: **"region" + **}, + + **"object\_id\_to\_use\_in\_child"**: **"name"**, + + | **"environment\_condition"**: { + | **"mechanism\_drivers"**: **"VPP" + ** }, + | **"children\_scanner"**: **"ScanAggregatesRoot" + **} + +The only difference is that *“fetcher”* field is now a dictionary with +the following fields: + +- *“folder”* – should always be **true**; + +- *“types\_name”* – type name in plural (with added ‘s’) of objects + that serve as folder’s children + +- *“parent\_type”* – folder’s parent type (basically the parent type of + folder’s objects). + +Updating scanners +~~~~~~~~~~~~~~~~~ + +After creating a new fetcher, you should integrate it into scanners +hierarchy. There are several possible courses of action: + +***Add new scanner as a child of an existing one*** + +If the parent type of your newly added object type already has a +scanner, you can add your new scanner as a child of an existing one. +There are two ways to do that: + +1. Add new scanner as a *“children\_scanner”* field to parent scanner + + ***Example*** + + Before: + + | **"ScanHost"**: [ + | { + | **"type"**: **"host"**, + | **"fetcher"**: **"ApiFetchProjectHosts"**, + | } + | ], + + After: + + | **"ScanHost"**: [ + | { + | **"type"**: **"host"**, + | **"fetcher"**: **"ApiFetchProjectHosts"**, + | **"children\_scanner"**: **"NewTypeScanner" + **} + | ], + | **"NewTypeScanner"**: [ + | { + | **"type"**: **"new\_type"**, + | **"fetcher"**: **"CliFetchNewType" + **} + | ] + +1. Add new fetch type to parent scanner (in case if children scanner + already exists) + + ***Example*** + + Before: + + | **"ScanHost"**: [ + | { + | **"type"**: **"host"**, + | **"fetcher"**: **"ApiFetchProjectHosts"**, + | **"children\_scanner"**: **"ScanHostPnic" + **} + | ], + + After: + + | **"ScanHost"**: [ + | { + | **"type"**: **"host"**, + | **"fetcher"**: **"ApiFetchProjectHosts"**, + | **"children\_scanner"**: **"ScanHostPnic" + **}, + | { + | **"type"**: **"new\_type"**, + | **"fetcher"**: **"CliFetchNewType" + **} + | ], + +***Add new scanner and set an existing one as a child*** + +***Example*** + + Before: + + | **"ScanHost"**: [ + | { + | **"type"**: **"host"**, + | **"fetcher"**: **"ApiFetchProjectHosts"**, + | **"children\_scanner"**: **"ScanHostPnic" + **} + | ], + + After: + + | **"NewTypeScanner"**: [ + | { + | **"type"**: **"new\_type"**, + | **"fetcher"**: **"CliFetchNewType"**, + | **"children\_scanner"**: **"ScanHost" + **} + | ] + + | **"ScanHost"**: [ + | { + | **"type"**: **"host"**, + | **"fetcher"**: **"ApiFetchProjectHosts"**, + | **"children\_scanner"**: **"ScanHostPnic" + **} + | ], + +***Other cases*** + +You may choose to combine approaches or use none of them and create an +isolated scanner if needed. + +Updating constants collection +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before testing your new scanner and fetcher you need to add the newly +created object type to *“constants”* collection in Calipso database: + +1. **constants.object\_types** document + + Append a *{“value”: “new\_type”, “label”: “new\_type”}* object to + **data** list. + +1. **constants.scan\_object\_types** document + + Append a *{“value”: “new\_type”, “label”: “new\_type”}* object to + **data** list. + +1. **constants.object\_types\_for\_links** document + + If you’re planning to build links using this object type (you + probably are), append a *{“value”: “new\_type”, “label”: + “new\_type”}* object to **data** list. + +Setting up monitoring +~~~~~~~~~~~~~~~~~~~~~ + +In order to setup monitoring for the new object type you have defined, +you’ll need to add a Sensu check: + +1. Add a check script in app/monitoring/checks: + + a. | Checks should return the following values: + | 0: **OK** + | 1: **Warning** + | 2: **Error** + + b. Checks can print the underlying query results to stdout. Do so + within reason, as this output is later stored in the DB, so avoid + giving too much output; + + c. Test your script on a remote host: + + i. Write it in */etc/sensu/plugins* directory; + + ii. Update the Sensu configuration on the remote host to run this + check; + + iii. Add the check in the “checks” section of + */etc/sensu/conf.d/client.json*; + + iv. The name under which you save the check will be used by the + handler to determine the DB object that it relates to; + + v. Restart the client with the command: *sudo service + sensu-client restart*; + + vi. Check the client log file to see the check is run and + produces the expected output (in */var/log/sensu* directory). + + d. Add the script to the source directory (*app/monitoring/checks*). + +2. Add a handler in app/monitoring/handlers: + + a. If you use a standard check naming scheme and check an object, the + *BasicCheckHandler* can take care of this, but add the object type + in *basic\_handling\_types* list in *get\_handler()*; + + b. If you have a more complex naming scheme, override + MonitoringCheckHandler. See HandleOtep for example. + +3. If you deploy monitoring using Calipso: + + a. Add the check in the *monitoring\_config\_templates* collection. + +*Check Naming* + +The check name should start with the type of the related object, +followed by an underscore (“\_”). For example, the name for a check +related to an OTEP (type “otep”)  will start with “otep\_“. It should +then be followed by the object ID. + +  + +For checks related to links, the check name will have this +format:
link\_\_\_ + +Creating new link types +----------------------- + +After you’ve added a new object type you may consider adding new link +types to connect objects of new type to existing objects in topology. +Your new object type may serve as a *source* and/or *target* type for +the new link type. + +The process of new link type creation includes several steps: + +1. Write a link finder class; + +2. Add the link finder class to the link finders configuration file; + +3. Update *“constants”* collection with the new link types. + +Writing link finder classes +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A new link finder class should: + +1. Subclass *app.discover.link\_finders.FindLinks* class; + +2. Be located in the *app.discover.link\_finders* package; + +3. Define an instance method called *add\_links(self)* with no + additional arguments. This method is the only entry point for link + finder classes. + +*FindLinks* class provides access to inventory manager to its subclasses +which they should use to their advantage. It also provides a convenience +method *create\_links(self, …)* for saving links to database. It is +reasonable to call this method at the end of *add\_links* method. + +You may opt to add more than one link type at a time in a single link +finder. + +***Example*** + + | **from** discover.find\_links **import** FindLinks + | **class** FindLinksForNewType(FindLinks): + | **def** add\_links(self): + | new\_objects = self.inv.find\_items({\ **"environment"**: + self.get\_env(), + | **"type"**: **"new\_type"**}) + | **for** new\_object **in** new\_objects: + | old\_object = self.inv.get\_by\_id(environment=self.get\_env(), + | item\_id=new\_object[**"old\_object\_id"**]) + | link\_type = **"old\_type-new\_type" + **\ link\_name = **"{}-{}"**.format(old\_object[**"name"**], + new\_object[**"name"**]) + | state = **"up"** *# TBD + *\ link\_weight = 0 *# TBD + *\ self.create\_link(env=self.get\_env(), + | source=old\_object[**"\_id"**], + | source\_id=old\_object[**"id"**], + | target=new\_object[**"\_id"**], + | target\_id=new\_object[**"id"**], + | link\_type=link\_type, + | link\_name=link\_name, + | state=state, + | link\_weight=link\_weight) + +Updating the link finders configuration file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Default link finders configuration file can be found at +*/app/config/link\_finders.json* and has the following structure: + + | { + | **"finders\_package"**: **"discover.link\_finders"**, + | **"base\_finder"**: **"FindLinks"**, + | **"link\_finders"**: [ + | **"FindLinksForInstanceVnics"**, + | **"FindLinksForOteps"**, + | **"FindLinksForPnics"**, + | **"FindLinksForVconnectors"**, + | **"FindLinksForVedges"**, + | **"FindLinksForVserviceVnics" + **] + | } + +File contents: + +- *finders\_package* – python path to the package that contains link + finders (relative to $PYTHONPATH environment variable); + +- *base\_finder* – base link finder class name; + +- *link\_finders* – class names of actual link finders. + +If your new fetcher meets the requirements described in `Writing link +finder classes <#writing-link-finder-classes>`__ section, you can append +its name to the *“link\_finders”* list in *link\_finders.json* file. + +Updating constants collection +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before testing your new links finder, you need to add the newly created +link types to *“constants”* collection in Calipso database: + +1. **constants.link\_types** document + + Append a *{“value”: “source\_type-target\_type”, “label”: + “source\_type-target\_type”}* object to **data** list for each new + link type. + +Creating custom link finders configuration file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you consider writing a custom list finders configuration file, you +should also follow the guidelines from 4.2.1-4.2.3 while designing link +finder classes and including them in the new link finders source file. + +The general approach is the following: + +1. Custom configuration file should have the same key structure with the + basic one; + +2. You should create a *base\_finder* class that subclasses the basic + FindLinks class (see `Writing link finder + classes <#writing-link-finder-classes>`__); + +3. Your link finder classes should be located in the same package with + your *base\_finder* class; + +4. Your link finder classes should subclass your *base\_finder* class + and override the *add\_links(self)* method. + +Creating new clique types +------------------------- + +Two steps in creating new clique types and including them in clique +finder are: + +1. Designing new clique types + +2. Updating clique types collection + +Designing new clique types +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A clique type is basically a list of links that will be traversed during +clique scans (see `Clique creation algorithm <#clique_creation>`__). The +process of coming up with clique types involves general networking +concepts knowledge as well as expertise in monitored system details +(e.g. OpenStack distribution specifics). In a nutshell, it is not a +trivial process, so the clique design should be considered carefully. + +The predefined clique types (in *clique\_types* collection) may give you +some idea about the rationale behind clique design. + +Updating clique types collection +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +After designing the new clique type, you need to update the +*clique\_types* collection in order for the clique finder to use it. For +this purpose, you should add a document of the following structure: + + {  + +     "environment": "ANY",  + +     "link\_types": [ + +         "instance-vnic",  + +         "vnic-vconnector",  + +         "vconnector-vedge",  + +         "vedge-otep",  + +         "otep-vconnector",  + +         "vconnector-host\_pnic",  + +         "host\_pnic-network" + +     ],  + +     "name": "instance",  + +     "focal\_point\_type": "instance" + + } + +Document fields are: + +- *environment* – can either hold the environment name, for which the + new clique type is designed, or **“ANY”** if the new clique type + should be added to all environments; + +- *name* – display name for the new clique type; + +- *focal\_point\_type* – the aggregate object type for the new clique + type to use as a starting point; + +- *link\_types* – a list of links that constitute the new clique type. + +Creating new event handlers +--------------------------- + +There are three steps to creating a new event handler: + +1. Determining *event types* that will be handled by the new handler; + +2. Writing the new handler module and class; + +3. Adding the (event type -> handler) mapping to the event handlers + configuration file. + +Writing custom handler classes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Each event handler should adhere to the following design: + +1. Event handler class should subclass + the app.discover.events.event\_base.EventBase class; + +2. Event handler class should override handle method of EventBase. + Business logic of the event handler should be placed inside + the handle method; + + a. Handle method accepts two arguments: environment name (str) and + notification contents (dict). No other event data will be provided + to the method; + + b. Handle method returns an EventResult object, which accepts the + following arguments in its constructor: + + i. *result* (mandatory) - determines whether the event handling + was successful; + + ii. *retry* (optional) - determines whether the message should be + put back in the queue in order to be processed later. This + argument is checked only if result was set to False; + + iii. *message* (optional) - (Currently unused) a string comment on + handling status; + + iv. *related\_object* (optional) – id of the object related to + the handled event; + + v. *display\_context* (optional) – (Calipso UI requirement). + +3. Module containing event handler class should have the same name as + the relevant handler class except translated + from UpperCamelCase to snake\_case. + + ***Example:*** + + **app/discover/events/event\_new\_object\_add.py** + + | **from** discover.events.event\_base **import** EventBase, + EventResult + | **class** EventNewObjectAdd(EventBase): + | **def** handle(self, env: str, notification: dict) -> EventResult: + | obj\_id = notification[**'payload'**][**'new\_object'**][**'id'**] + | obj = { + | **'id'**: obj\_id, + | **'type'**: **'new\_object' + **} + | self.inv.set(obj) + | **return** EventResult(result=\ **True**) + + Modifications in *events.json*: + + <...> + + | **"event\_handlers"**: { + | <...> + | **"new\_object.create"**: **"EventNewObjectAdd"**, + | <...>** + **} + + <...> + +After these changes are implemented, any event of type +new\_object.create will be consumed by the event listener and the +payload will be passed to EventNewObjectAdd handler which will insert a +new document in the database. + +Event handlers configuration file structure +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Events.json** (full path *app/config/events.json*) is a configuration +file that contains information about events and event handlers, +including: + +- Event subscription details (queues and exchanges for Neutron + notifications); + +- Location of event handlers package; + +- Mappings between event types and respective event handlers. + +The structure of *events.json* is as following: + + | { + | **"handlers\_package"**: **"discover.events"**, + | **"queues"**: [ + | { + | **"queue"**: **"notifications.nova"**, + | **"exchange"**: **"nova" + **}, + | <…> + | ], + | **"event\_handlers"**: { + | **"compute.instance.create.end"**: **"EventInstanceAdd"**, + | **"compute.instance.update"**: **"EventInstanceUpdate"**, + | **"compute.instance.delete.end"**: **"EventInstanceDelete"**, + | **"network.create.end"**: **"EventNetworkAdd"**, + + | <…>** + **} + | } + +The root object contains the following fields: + +- **handlers\_package** - python path to the package that contains + event handlers (relative to $PYTHONPATH environment variable) + +- **queues –** RabbitMQ queues and exchanges to consume messages from + (for Neutron notifications case) + +- **event\_handlers** – mappings of event types to the respective + handlers. The structure suggests that any event can have only one + handler. + +In order to add a new event handler to the configuration file, you +should add another mapping to the event\_handlers object, where key is +the event type being handled and value is the handler class name (module +name will be determined automatically). + +If your event is being published to a queue and/or exchange that the +listener is not subscribed to, you should add another entry to the +queues list. + +Creating new event listeners +---------------------------- + +At the moment, the only guideline for creation of new event listeners is +that they should subclass the *ListenerBase* class (full path +*app/discover/events/listeners/listener\_base.py*) and override the +*listen(self)* method that listens to incoming events indefinitely +(until terminated by a signal). + +In future versions, a comprehensive guide to listeners structure is +planned. + +Metadata parsers +---------------- + +Metadata parsers are specialized classes that are designed to verify +metadata files (found in *app/*\ config directory), use data from them +to load instances of implementation classes (e.g. scanners, event +handlers, link finders) in memory, and supply them by request. Scanners +and link finders configuration files are used in scanner, event handlers +configuration file – in event listener. + +In order to create a new metadata parser, you should consider +subclassing *MetadataParser* class (found in +*app/utils/metadata\_parser.py*). *MetadataParser* supports parsing and +validating of json files out of the box. Entry point for the class is +the *parse\_metadata\_file* method, which requires the abstract +*get\_required\_fields* method to be overridden in subclasses. This +method should return a list of keys that the metadata file is required +to contain. + +For different levels of customization you may consider: + +1. Overriding *validate\_metadata* method to provide more precise + validation of metadata; + +2. Overriding *parse\_metadata\_file* to provide custom metadata + handling required by your use case. + +.. |image0| image:: media/image1.png + :width: 6.50000in + :height: 4.27153in diff --git a/docs/release/index.rst b/docs/release/index.rst deleted file mode 100644 index 4c6c80c..0000000 --- a/docs/release/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. This work is licensed under a Creative Commons Attribution 4.0 International License. -.. http://creativecommons.org/licenses/by/4.0 -.. (c) OPNFV and others. - -.. _calipso-release-guide: - -===================== -Calipso Release Guide -===================== - -.. toctree:: - :maxdepth: 2 - - about.rst - admin-guide.rst - api-guide.rst - calipso-model.rst - install-guide-rst - monotoring-guide.rst - quickstart-guide.rst diff --git a/docs/release/media/image101.png b/docs/release/media/image101.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a8a5c80a8651af254f3dfcf66732b8db4add71 GIT binary patch literal 119090 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 z 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ℜ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 RE1D2wtEG)a(MC%A{{W}N^wIzT literal 0 HcmV?d00001 diff --git a/docs/release/media/image102.png b/docs/release/media/image102.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8d413e316bbc5c8d5e8ea7ec3150e41cda7b6a GIT binary patch literal 104849 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 literal 0 HcmV?d00001 diff --git a/docs/release/media/image104.png b/docs/release/media/image104.png new file mode 100644 index 0000000000000000000000000000000000000000..2418dcfebf5e25cb75627697c76dffc5014d8e9b GIT binary patch literal 37854 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 QgPyS<{xUWw*1Hk$AAC|s*Z=?k literal 0 HcmV?d00001 diff --git a/docs/release/media/image106.png b/docs/release/media/image106.png new file mode 100644 index 0000000000000000000000000000000000000000..029589aba073023b68d4a22f0b9b9f46c4068452 GIT binary patch literal 58686 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�KDz`U+HA)-MN~R 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[j3H@x=eb= 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%0Dv1;0d$Pxm+&|%9`;HR^F$LJIgJ|i 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

J`7Mb=7H&gF9VE-d;dwR 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 literal 0 HcmV?d00001 diff --git a/docs/release/scenarios/os-nosdn-calipso-noha/index.rst b/docs/release/scenarios/os-nosdn-calipso-noha/index.rst deleted file mode 100644 index 0e65a74..0000000 --- a/docs/release/scenarios/os-nosdn-calipso-noha/index.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. _os-nosdn-calipso-noha: - -.. This work is licensed under a Creative Commons Attribution 4.0 International Licence. -.. http://creativecommons.org/licenses/by/4.0 -.. (c) - -============================================== -os-nosdn-calipso-noha overview and description -============================================== - -.. toctree:: - :numbered: - :maxdepth: 4 - - apex-scenario-guide.rst -- 2.16.6