+ if first is None:
+ return first
+ result = first.serialize()
+ if result is None:
+ return None
+
+ profile_data = result.pop("profile", None)
+ profiles = config.get_dms_support_profiles()
+ if profile not in profiles:
+ return ""
+
+ extensions = {
+ 'profileName': profile
+ }
+ if ocloud.DeploymentManagerProfileDefault == profile \
+ or ocloud.DeploymentManagerProfileSOL018 == profile:
+ result['serviceUri'] = \
+ profile_data['cluster_api_endpoint']
+ extensions['profileData'] = profile_data
+ elif ocloud.DeploymentManagerProfileSOL018HelmCLI == profile:
+ result['serviceUri'] = \
+ profile_data['cluster_api_endpoint']
+
+ helmcli_profile = dict()
+ helmcli_profile["helmcli_host_with_port"], helmcli_profile[
+ "helmcli_username"], helmcli_profile["helmcli_password"] = \
+ config.get_helmcli_access()
+ helmcli_profile["helmcli_kubeconfig"] = _gen_kube_config(
+ deploymentManagerId, profile_data)
+ extensions['profileData'] = helmcli_profile
+ else:
+ return ""
+
+ result['extensions'] = extensions
+ return result
+
+
+def _gen_kube_config(dmId: str, kubeconfig: dict) -> dict:
+ shared_folder = config.get_containers_shared_folder()
+
+ data = config.gen_k8s_config_dict(
+ kubeconfig.pop('cluster_api_endpoint', None),
+ kubeconfig.pop('cluster_ca_cert', None),
+ kubeconfig.pop('admin_user', None),
+ kubeconfig.pop('admin_client_cert', None),
+ kubeconfig.pop('admin_client_key', None),
+ )
+
+ # Generate a random key for tmp kube config file
+ # letters = string.ascii_uppercase
+ # random_key = ''.join(random.choice(letters) for i in range(10))
+ name_key = dmId[:8]
+
+ # Get datetime of now as tag of the tmp file
+ current_time = datetime.now().strftime("%Y%m%d%H%M%S")
+ tmp_file_name = 'kubeconfig_' + name_key + "_" + current_time
+ kube_config_name = 'kubeconfig_' + name_key + '.config'
+ kube_config_path = f'{shared_folder}/{kube_config_name}'
+
+ # write down the yaml file of kubectl into tmp folder
+ with open('/tmp/' + tmp_file_name, 'w') as file:
+ yaml.dump(data, file)
+
+ # generate the kube config file if not exist or update the file if it
+ # changes
+ if not os.path.exists(kube_config_path) or not \
+ filecmp.cmp('/tmp/'+tmp_file_name, kube_config_path):
+ shutil.move(os.path.join('/tmp', tmp_file_name),
+ os.path.join(shared_folder, kube_config_name))
+
+ return kube_config_path
+
+
+def subscriptions(uow: unit_of_work.AbstractUnitOfWork, **kwargs):
+ pagination = Pagination(**kwargs)
+ query_kwargs = pagination.get_pagination()
+ args = gen_filter(Subscription,
+ kwargs['filter']) if 'filter' in kwargs else []