コード例 #1
0
ファイル: topology_parser.py プロジェクト: chrismetz09/netACL
 def validate_schema(file_name, topology):
     with open(os.path.join(topo_models_path, file_name)) as f:
         try:
             jsonschema.validate(topology, json.loads(f.read()))
             return True
         except jsonschema.SchemaError as e:
             logger.error("Schema '{}' is malformed. Error: {}".format(file_name, e.message))
             return False
         except ValueError as e:
             logger.error("Schema '{}' or payload is not a valid JSON. Error: {}".format(file_name, e.message))
             return False
         except jsonschema.ValidationError:
             return False
コード例 #2
0
    def get(self, app):
        if app_connector.is_app_connected(self.application, app) is False:
            error_message = "App '{}' is not installed".format(app)
            logger.error(error_message)
            self.set_status(FORBIDDEN, error_message)
            self.finish()
        else:
            topology_parser = app_connector.get_topology_parser(
                self.application, app)()

            try:
                res, parsed_topology = TopologyHandler.get_topology(
                    topology_parser)
            except Exception as e:
                logger.error("Topology fetch failed. Error: {}".format(
                    e.message))
                if DEBUG:
                    self.set_status(INTERNAL_SERVER_ERROR, e.message)
                else:
                    self.set_status(INTERNAL_SERVER_ERROR)
                self.finish()
            else:
                if res is True:
                    logger.debug("Parsed topology: {}".format(parsed_topology))

                    if parsed_topology:
                        self.set_header("Content-Type", "application/json")
                        self.write(parsed_topology)
                    else:
                        logger.error("Failed to parse topology")
                else:
                    logger.error(
                        "Failed to parse topology. Received controller topology: {}"
                        .format(parsed_topology))
コード例 #3
0
ファイル: handlers.py プロジェクト: chrismetz09/netACL
    def get(self, app):
        if app_connector.is_app_connected(self.application, app) is False:
            error_message = "App '{}' is not installed".format(app)
            logger.error(error_message)
            self.set_status(FORBIDDEN, error_message)
            self.finish()
        else:
            topology_parser = app_connector.get_topology_parser(self.application, app)()

            try:
                res, parsed_topology = TopologyHandler.get_topology(topology_parser)
            except Exception as e:
                logger.error("Topology fetch failed. Error: {}".format(e.message))
                if DEBUG:
                    self.set_status(INTERNAL_SERVER_ERROR, e.message)
                else:
                    self.set_status(INTERNAL_SERVER_ERROR)
                self.finish()
            else:
                if res is True:
                    logger.debug("Parsed topology: {}".format(parsed_topology))

                    if parsed_topology:
                        self.set_header("Content-Type", "application/json")
                        self.write(parsed_topology)
                    else:
                        logger.error("Failed to parse topology")
                else:
                    logger.error("Failed to parse topology. Received controller topology: {}".format(parsed_topology))
コード例 #4
0
ファイル: topology_parser.py プロジェクト: wysamuel/netACL
 def validate_schema(file_name, topology):
     with open(os.path.join(topo_models_path, file_name)) as f:
         try:
             jsonschema.validate(topology, json.loads(f.read()))
             return True
         except jsonschema.SchemaError as e:
             logger.error("Schema '{}' is malformed. Error: {}".format(
                 file_name, e.message))
             return False
         except ValueError as e:
             logger.error(
                 "Schema '{}' or payload is not a valid JSON. Error: {}".
                 format(file_name, e.message))
             return False
         except jsonschema.ValidationError:
             return False
コード例 #5
0
ファイル: app_connector.py プロジェクト: chrismetz09/netACL
def connect_apps(main_app):
    apps = {}
    for app_name in list(map(format_app_name, INSTALLED_APPS)):
        try:
            importlib.import_module('.'.join([base_package_name, 'apps', app_name]))  # init app
            topology_module = importlib.import_module('.'.join([base_package_name, 'apps', app_name, 'topology_parser']))
            handler_module = importlib.import_module('.'.join([base_package_name, 'apps', app_name, 'handler']))
        except ImportError as e:
            error = "Failed connecting app {}. Reason: {}".format(app_name, e.message)
            logger.error(error)
        else:
            app = {
                'topology_parser': topology_module.Topology,
                'handler': handler_module.Handler
            }

            apps[app_name] = app
            logger.info("Connected app: {}".format(app_name))

    main_app.set_global_vars({'connected_apps': apps})
コード例 #6
0
def connect_apps(main_app):
    apps = {}
    for app_name in list(map(format_app_name, INSTALLED_APPS)):
        try:
            importlib.import_module('.'.join(
                [base_package_name, 'apps', app_name]))  # init app
            topology_module = importlib.import_module('.'.join(
                [base_package_name, 'apps', app_name, 'topology_parser']))
            handler_module = importlib.import_module('.'.join(
                [base_package_name, 'apps', app_name, 'handler']))
        except ImportError as e:
            error = "Failed connecting app {}. Reason: {}".format(
                app_name, e.message)
            logger.error(error)
        else:
            app = {
                'topology_parser': topology_module.Topology,
                'handler': handler_module.Handler
            }

            apps[app_name] = app
            logger.info("Connected app: {}".format(app_name))

    main_app.set_global_vars({'connected_apps': apps})