X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fn2vc_conn.py;h=6b0df891e822aac41be67abf2382beaf5917a12b;hp=b9c3002a32aba3ee27816f677609e294915822e8;hb=82b591ceed704c798ead2d9104085a08e75b511b;hpb=ba6e532cda6464759381585452b18f9fd1a19dd3;ds=sidebyside diff --git a/n2vc/n2vc_conn.py b/n2vc/n2vc_conn.py index b9c3002..6b0df89 100644 --- a/n2vc/n2vc_conn.py +++ b/n2vc/n2vc_conn.py @@ -34,7 +34,7 @@ from osm_common.dbmongo import DbException import yaml from n2vc.loggable import Loggable -from n2vc.utils import EntityType, JujuStatusToOSM, N2VCDeploymentStatus +from n2vc.utils import JujuStatusToOSM, N2VCDeploymentStatus class N2VCConnector(abc.ABC, Loggable): @@ -55,10 +55,8 @@ class N2VCConnector(abc.ABC, Loggable): fs: object, log: object, loop: object, - url: str, - username: str, - vca_config: dict, on_update_db=None, + **kwargs, ): """Initialize N2VC abstract connector. It defines de API for VCA connectors @@ -67,14 +65,6 @@ class N2VCConnector(abc.ABC, Loggable): FsBase) :param object log: the logging object to log to :param object loop: the loop to use for asyncio (default current thread loop) - :param str url: a string that how to connect to the VCA (if needed, IP and port - can be obtained from there) - :param str username: the username to authenticate with VCA - :param dict vca_config: Additional parameters for the specific VCA. For example, - for juju it will contain: - secret: The password to authenticate with - public_key: The contents of the juju public SSH key - ca_cert str: The CA certificate used to authenticate :param on_update_db: callback called when n2vc connector updates database. Received arguments: table: e.g. "nsrs" @@ -92,32 +82,15 @@ class N2VCConnector(abc.ABC, Loggable): if fs is None: raise N2VCBadArgumentsException("Argument fs is mandatory", ["fs"]) - self.log.info( - "url={}, username={}, vca_config={}".format( - url, - username, - { - k: v - for k, v in vca_config.items() - if k - not in ("host", "port", "user", "secret", "public_key", "ca_cert") - }, - ) - ) - # store arguments into self self.db = db self.fs = fs self.loop = loop or asyncio.get_event_loop() - self.url = url - self.username = username - self.vca_config = vca_config self.on_update_db = on_update_db # generate private/public key-pair self.private_key_path = None self.public_key_path = None - self.get_public_key() @abc.abstractmethod async def get_status(self, namespace: str, yaml_format: bool = True): @@ -321,14 +294,12 @@ class N2VCConnector(abc.ABC, Loggable): # TODO @abc.abstractmethod async def remove_relation(self): - """ - """ + """ """ # TODO @abc.abstractmethod async def deregister_execution_environments(self): - """ - """ + """ """ @abc.abstractmethod async def delete_namespace( @@ -443,7 +414,18 @@ class N2VCConnector(abc.ABC, Loggable): detailed_status: str, vca_status: str, entity_type: str, + vca_id: str = None, ): + """ + Write application status to database + + :param: db_dict: DB dictionary + :param: status: Status of the application + :param: detailed_status: Detailed status + :param: vca_status: VCA status + :param: entity_type: Entity type ("application", "machine, and "action") + :param: vca_id: Id of the VCA. If None, the default VCA will be used. + """ if not db_dict: self.log.debug("No db_dict => No database write") return @@ -477,10 +459,12 @@ class N2VCConnector(abc.ABC, Loggable): if self.on_update_db: if asyncio.iscoroutinefunction(self.on_update_db): await self.on_update_db( - the_table, the_filter, the_path, update_dict + the_table, the_filter, the_path, update_dict, vca_id=vca_id ) else: - self.on_update_db(the_table, the_filter, the_path, update_dict) + self.on_update_db( + the_table, the_filter, the_path, update_dict, vca_id=vca_id + ) except DbException as e: if e.http_code == HTTPStatus.NOT_FOUND: @@ -492,7 +476,7 @@ class N2VCConnector(abc.ABC, Loggable): else: self.log.info("Exception writing status to database: {}".format(e)) - def osm_status(self, entity_type: EntityType, status: str) -> N2VCDeploymentStatus: + def osm_status(self, entity_type: str, status: str) -> N2VCDeploymentStatus: if status not in JujuStatusToOSM[entity_type]: self.log.warning("Status {} not found in JujuStatusToOSM.".format(status)) return N2VCDeploymentStatus.UNKNOWN