From 72e7f2cd387e6ecaebf9ae36330fa823dfd9dfe2 Mon Sep 17 00:00:00 2001 From: Kanagaraj Manickam Date: Wed, 23 Mar 2016 18:06:57 +0530 Subject: [PATCH] Added support for OsloConfigFile Change-Id: Ib9aaf7e16be0920696690b86cdcb14e06f1b643c --- namos/common/exception.py | 5 ++ namos/conductor/manager.py | 27 ++++++++ namos/db/api.py | 34 +++++++++++ .../versions/48ebec3cd6f6_initial_version.py | 1 + namos/db/sqlalchemy/api.py | 61 +++++++++++++++++++ namos/db/sqlalchemy/models.py | 24 ++++++++ 6 files changed, 152 insertions(+) diff --git a/namos/common/exception.py b/namos/common/exception.py index 403bd0e..ddfc7a1 100644 --- a/namos/common/exception.py +++ b/namos/common/exception.py @@ -125,3 +125,8 @@ class ServiceWorkerNotFound(NotFound): class ConfigNotFound(NotFound): msg_fmt = ("Config %(config_id)s does not found") error_code = 0x0a001 + + +class ConfigFileNotFound(NotFound): + msg_fmt = ("Config file %(config_file_id)s does not found") + error_code = 0x0b001 diff --git a/namos/conductor/manager.py b/namos/conductor/manager.py index 559a0bb..39b0ccb 100644 --- a/namos/conductor/manager.py +++ b/namos/conductor/manager.py @@ -184,6 +184,33 @@ class ServiceProcessor(object): service_component) # TODO(mrkanag) what to do when service_components size is > 1 + # config file + for cfg_f in self.registration_info['config_file_list']: + try: + config_file = db_api.config_file_create( + context, + dict(name=cfg_f, + file=self.registration_info[ + 'config_file_dict'][cfg_f], + service_component_id=service_component.id)) + LOG.info('Oslo config file %s is created' % config_file) + except exception.AlreadyExist: + config_files = \ + db_api.config_file_get_by_name_for_service_component( + context, + service_component_id=service_component.id, + name=cfg_f + ) + if len(config_files) == 1: + config_file = \ + db_api.config_file_update( + context, + config_files[0].id, + dict(file=self.registration_info[ + 'config_file_dict'][cfg_f])) + LOG.info('Oslo config file %s is existing and is updated' + % config_file) + # Service Worker try: service_worker = db_api.service_worker_create( diff --git a/namos/db/api.py b/namos/db/api.py index 39c8553..589e08f 100644 --- a/namos/db/api.py +++ b/namos/db/api.py @@ -344,6 +344,40 @@ def config_delete(context, _id): return IMPL.config_delete(context, _id) +def config_file_create(context, values): + return IMPL.config_file_create(context, values) + + +def config_file_update(context, _id, values): + return IMPL.config_file_update(context, _id, values) + + +def config_file_get(context, _id): + return IMPL.config_file_get(context, _id) + + +def config_file_get_by_name(context, name): + return IMPL.config_file_get_by_name(context, name) + + +def config_file_get_by_name_for_service_component( + context, + service_component_id, + name=None): + return IMPL.config_file_get_by_name_for_service_component( + context, + service_component_id, + name) + + +def config_file_get_all(context): + return IMPL.config_file_get_all(context) + + +def config_file_delete(context, _id): + return IMPL.config_file_delete(context, _id) + + def service_perspective_get(context, service_id, include_details=False): return IMPL.service_perspective_get(context, diff --git a/namos/db/sqlalchemy/alembic/versions/48ebec3cd6f6_initial_version.py b/namos/db/sqlalchemy/alembic/versions/48ebec3cd6f6_initial_version.py index a9e5d39..2dc8f2d 100644 --- a/namos/db/sqlalchemy/alembic/versions/48ebec3cd6f6_initial_version.py +++ b/namos/db/sqlalchemy/alembic/versions/48ebec3cd6f6_initial_version.py @@ -177,6 +177,7 @@ def upgrade(): def downgrade(): + op.drop_table('oslo_config_file') op.drop_table('oslo_config') op.drop_table('device_driver') op.drop_table('service_worker') diff --git a/namos/db/sqlalchemy/api.py b/namos/db/sqlalchemy/api.py index d9a5ad8..baf7433 100644 --- a/namos/db/sqlalchemy/api.py +++ b/namos/db/sqlalchemy/api.py @@ -548,6 +548,55 @@ def config_delete(context, _id): return _delete(context, models.OsloConfig, _id) +# Config file +def config_file_create(context, values): + return _create(context, models.OsloConfigFile(), values) + + +def config_file_update(context, _id, values): + return _update(context, models.OsloConfigFile, _id, values) + + +def config_file_get(context, _id): + config = _get(context, models.OsloConfigFile, _id) + if config is None: + raise exception.ConfigFileNotFound(config_file_id=_id) + + return config + + +def config_file_get_by_name(context, name): + config = _get_by_name(context, models.OsloConfigFile, name) + if config is None: + raise exception.ConfigFileNotFound(config_file_id=name) + + return config + + +def config_file_get_by_name_for_service_component( + context, + service_component_id, + name=None): + query = _model_query(context, models.OsloConfigFile). \ + filter_by(service_component_id=service_component_id) + if name is not None: + query = query.filter_by(name=name) + + return query.all() + + +def config_file_get_all(context): + return _get_all(context, models.OsloConfigFile) + + +def _config_file_get_all_by(context, **kwargs): + return _get_all_by(context, models.OsloConfigFile, **kwargs) + + +def config_file_delete(context, _id): + return _delete(context, models.OsloConfigFile, _id) + + # REST-API def service_perspective_get(context, service_id, include_details=False): # 1. itr over Service Components and find name vs set of components @@ -827,6 +876,18 @@ def view_360(context): view['region'][rg.id]['service_node'][srv_nd.id][ 'service_component'][srv_cmp.id] = dict() + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id]['config_file'] = dict() + cfg_fl_lst = config_file_get_by_name_for_service_component( + context, + service_component_id=srv_cmp.id + ) + for cfg_fl in cfg_fl_lst: + # config file + view['region'][rg.id]['service_node'][srv_nd.id][ + 'service_component'][srv_cmp.id][ + 'config_file'][cfg_fl.name] = cfg_fl.file + view['region'][rg.id]['service_node'][srv_nd.id][ 'service_component'][srv_cmp.id]['service'] = srv_id view['region'][rg.id]['service_node'][srv_nd.id][ diff --git a/namos/db/sqlalchemy/models.py b/namos/db/sqlalchemy/models.py index 7483dfe..267aa97 100644 --- a/namos/db/sqlalchemy/models.py +++ b/namos/db/sqlalchemy/models.py @@ -330,3 +330,27 @@ class OsloConfig(BASE, sqlalchemy.ForeignKey('service_worker.id'), nullable=False ) + + +class OsloConfigFile(BASE, + NamosBase, + SoftDelete, + Extra): + __tablename__ = 'oslo_config_file' + __table_args__ = ( + UniqueConstraint("name", "service_component_id"), + ) + + name = sqlalchemy.Column(sqlalchemy.String(255), + # unique=True, + nullable=False, + default=lambda: str(uuid.uuid4())) + + file = sqlalchemy.Column( + sqlalchemy.Text + ) + service_component_id = sqlalchemy.Column( + Uuid, + sqlalchemy.ForeignKey('service_component.id'), + nullable=False + )