X-Git-Url: https://gerrit.onap.org/r/gitweb?p=demo.git;a=blobdiff_plain;f=heat%2FvFW_CNF_CDS%2Fautomation%2Fso_db_adapter.py;fp=heat%2FvFW_CNF_CDS%2Fautomation%2Fso_db_adapter.py;h=621decb1f681a2c8baa4135509dfd98fddd6d576;hp=a829fbda463cd39dd49a4ad44bfdca9f824ec156;hb=1ff5827ffde7af1d8aed23890a571455300ade6d;hpb=1e501466e21b774ccaadef19f4618decc0650001 diff --git a/heat/vFW_CNF_CDS/automation/so_db_adapter.py b/heat/vFW_CNF_CDS/automation/so_db_adapter.py index a829fbda..621decb1 100755 --- a/heat/vFW_CNF_CDS/automation/so_db_adapter.py +++ b/heat/vFW_CNF_CDS/automation/so_db_adapter.py @@ -15,78 +15,81 @@ # # ============LICENSE_END========================================================= -import base64 -import os +from abc import ABC +from onapsdk.so.so_element import SoElement +from onapsdk.onap_service import OnapService +from onapsdk.utils.headers_creator import headers_so_creator -from kubernetes import config, client -from kubernetes.stream import stream +class SoDBUpdate(SoElement, ABC): -class SoDBAdapter: + @classmethod + def add_region_to_so_db(cls, + cloud_region_id: str, + complex_id: str, + identity_service_id: str = None, + **kwargs + ): + """Method to add cloud_site data with identity_service to SO db. - def __init__(self, cloud_region_id, complex_id, onap_kubeconfig_path): - self.CLOUD_REGION_ID = cloud_region_id - self.COMPLEX_ID = complex_id - self.ONAP_KUBECONFIG_PATH = onap_kubeconfig_path - self.MYPATH = os.path.dirname(os.path.realpath(__file__)) + Args: + cloud_region_id: the name of cloud region + complex_id: name of complex + identity_service_id: optional - id of identity service + **kwargs: keyword arguments with parameters for identity service creation, like below - config.load_kube_config(config_file=os.path.join(self.MYPATH, self.ONAP_KUBECONFIG_PATH)) - self.api_instance = client.CoreV1Api() - self.pod_name = self.get_mariadb_pod_name() - self.password = self.get_mariadb_root_username_password() + Important: + identity_services data will be overwrite, but in the same time + cloud_sites data will not (shouldn't) be overwrite! - def get_mariadb_pod_name(self): - pods = self.api_instance.list_namespaced_pod(namespace="onap") - for pod in pods.items: - if pod.metadata.name.find("mariadb-galera-0") != -1: - return pod.metadata.name + Return: + response object + """ - def get_mariadb_root_username_password(self): - secrets = self.api_instance.list_namespaced_secret(namespace="onap") - for secret in secrets.items: - if secret.metadata.name.find("mariadb-galera-db-root-password") != -1: - base64_password = secret.data["password"] - base64_bytes = base64_password.encode('ascii') - password_bytes = base64.b64decode(base64_bytes) + if not identity_service_id: + identity_service_id = 'Keystone_K8s' - return password_bytes.decode('ascii') + # params for identity_service creation + orchestrator = kwargs.get('orchestrator', 'multicloud') + identity_url = kwargs.get('identity_url', "http://1.2.3.4:5000/v2.0") + mso_id = kwargs.get('mso_id', 'onapsdk_user') + mso_pass = kwargs.get('mso_pass', 'mso_pass_onapsdk') + project_domain_name = kwargs.get("project_domain_name", None) + user_domain_name = kwargs.get("user_domain_name", None) + member_role = kwargs.get('member_role', 'admin') + admin_tenant = kwargs.get('admin_tenant', 'service') + identity_server_type = kwargs.get('identity_server_type', 'KEYSTONE') + identity_authentication_type = kwargs.get('identity_authentication_type', 'USERNAME_PASSWORD') - def run_exec_request(self, exec_command): - response = stream(self.api_instance.connect_get_namespaced_pod_exec, - name=self.pod_name, - # container="container-name", - namespace="onap", - command=exec_command, - stdin=False, - tty=False, - stderr=True, - stdout=True) - return response - - def check_region_in_db(self): - exec_command = [ - "/bin/sh", - "-c", - f"mysql -uroot -p{self.password} catalogdb -e 'SELECT * FROM cloud_sites;'"] - response = self.run_exec_request(exec_command) - - is_region_found = False - for line in response.split("\n"): - if line.split("\t")[0] == self.CLOUD_REGION_ID: - print(line) - is_region_found = True - return is_region_found - return is_region_found - - def add_region_to_so_db(self): - exec_command = [ - "/bin/sh", - "-c", - f"mysql -uroot -p{self.password} catalogdb -e " - f"'insert into cloud_sites(ID, REGION_ID, IDENTITY_SERVICE_ID, CLOUD_VERSION, CLLI, ORCHESTRATOR ) " - f"values (\"{self.CLOUD_REGION_ID}\", \"{self.CLOUD_REGION_ID}\", \"DEFAULT_KEYSTONE\", \"2.5\", " - f"\"{self.COMPLEX_ID}\", \"multicloud\");'"] + data = { + "id": cloud_region_id, + "region_id": cloud_region_id, + "aic_version": "2.5", + "clli": complex_id, + "orchestrator": orchestrator, + "identityService": { + "id": identity_service_id, + "identityServerTypeAsString": "KEYSTONE", + "hibernateLazyInitializer": {}, + "identity_url": identity_url, + "mso_id": mso_id, + "mso_pass": mso_pass, + "project_domain_name": project_domain_name, + "user_domain_name": user_domain_name, + "admin_tenant": admin_tenant, + "member_role": member_role, + "tenant_metadata": True, + "identity_server_type": identity_server_type, + "identity_authentication_type": identity_authentication_type + } + } - response = self.run_exec_request(exec_command) + response = cls.send_message( + "POST", + "Create a region in SO db", + f"{cls.base_url}/cloudSite", + json=data, + headers=headers_so_creator(OnapService.headers), + exception=ValueError) return response