+ def _update_vld_in_ns_config(
+ self, ns_config: dict, vim_account_dict: dict, wim_account_dict: dict
+ ) -> dict:
+ """Validating the additionalParamsForNs and additionalParamsForVnf in ns_config.
+
+ Args:
+ ns_config (dict): NS config dictionary which includes additional params
+ vim_account_dict (dict): A dictionary which includes vim account id
+ wim_account_dict (dict): A dictionary which includes wim account id
+
+ Returns:
+ ns_config (dict): NS config dictionary which includes additional params
+
+ Raises:
+ ClientException
+ """
+ if "vld" in ns_config:
+ if not isinstance(ns_config["vld"], list):
+ raise ClientException(
+ "Error at --config 'vld' must be a list of dictionaries"
+ )
+ for vld in ns_config["vld"]:
+ if not isinstance(vld, dict):
+ raise ClientException(
+ "Error at --config 'vld' must be a list of dictionaries"
+ )
+ if vld.get("vim-network-name"):
+ if isinstance(vld["vim-network-name"], dict):
+ vim_network_name_dict = {}
+ for vim_account, vim_net in vld["vim-network-name"].items():
+ vim_network_name_dict[
+ self._get_vim_account_id(vim_account, vim_account_dict)
+ ] = vim_net
+ vld["vim-network-name"] = vim_network_name_dict
+ if "wim_account" in vld and vld["wim_account"] is not None:
+ vld["wimAccountId"] = self._get_wim_account_id(
+ vld.pop("wim_account"), wim_account_dict
+ )
+ return ns_config
+
+ def _validate_additional_params_in_ns_config(self, ns_config: dict) -> None:
+ """Validating the additionalParamsForNs and additionalParamsForVnf in ns_config.
+ Args:
+ ns_config (dict): NS config dictionary which includes additional params
+
+ Raises:
+ ClientException
+ """
+ if "additionalParamsForNs" in ns_config:
+ if not isinstance(ns_config["additionalParamsForNs"], dict):
+ raise ClientException(
+ "Error at --config 'additionalParamsForNs' must be a dictionary"
+ )
+ if "additionalParamsForVnf" in ns_config:
+ if not isinstance(ns_config["additionalParamsForVnf"], list):
+ raise ClientException(
+ "Error at --config 'additionalParamsForVnf' must be a list"
+ )
+ for additional_param_vnf in ns_config["additionalParamsForVnf"]:
+ if not isinstance(additional_param_vnf, dict):
+ raise ClientException(
+ "Error at --config 'additionalParamsForVnf' items must be dictionaries"
+ )
+ if not additional_param_vnf.get("member-vnf-index"):
+ raise ClientException(
+ "Error at --config 'additionalParamsForVnf' items must contain "
+ "'member-vnf-index'"
+ )
+
+ def process_ns_create_with_vim_account(
+ self,
+ vim_account: str,
+ nsd: dict,
+ nsr_name: str,
+ description: str,
+ config: dict = None,
+ ssh_keys: str = None,
+ timeout: int = None,
+ ) -> dict:
+ """Process NS create request which includes VIM Account.
+ Args:
+ vim_account (str): VIM Account id as string
+ nsd (dict): A dictionary which includes network service description
+ nsr_name (str): Network service record name
+ description (str): Service description
+ config (dict): Placeholder for additional configuration
+ ssh_keys (str): ssh-key file
+ timeout (int): Max time to wait (seconds)
+
+ Returns:
+ ns (dict): Payload for ns create request
+
+ Raises:
+ ClientException
+ """
+ vim_account_dict = {}
+ wim_account_dict = {}
+ vim_id = self._get_vim_account_id(vim_account, vim_account_dict)
+ ns = {
+ "nsdId": nsd["_id"],
+ "nsName": nsr_name,
+ "nsDescription": description,
+ "vimAccountId": vim_id,
+ }