aboutsummaryrefslogtreecommitdiffstats
path: root/onap-client/onap_client/so/module_instance.py
diff options
context:
space:
mode:
Diffstat (limited to 'onap-client/onap_client/so/module_instance.py')
-rw-r--r--onap-client/onap_client/so/module_instance.py245
1 files changed, 191 insertions, 54 deletions
diff --git a/onap-client/onap_client/so/module_instance.py b/onap-client/onap_client/so/module_instance.py
index 67da272..59aba64 100644
--- a/onap-client/onap_client/so/module_instance.py
+++ b/onap-client/onap_client/so/module_instance.py
@@ -34,11 +34,13 @@
# limitations under the License.
#
# ============LICENSE_END============================================
-
import uuid
from onap_client.resource import Resource
from onap_client.client.clients import get_client as Client
-from onap_client.exceptions import ServiceInstanceNotFound, VNFInstanceNotFound, ModuleInstanceNotFound
+from onap_client.exceptions import (
+ ModuleModelNameNotFound,
+ NoArtifactFoundInModel,
+)
from onap_client import so
from onap_client import sdnc
from onap_client.util import utility
@@ -57,25 +59,21 @@ class ModuleInstance(Resource):
"cloud_owner": {"type": str, "required": True},
"cloud_region": {"type": str, "required": True},
"api_type": {"type": str, "required": False, "default": "GR_API"},
+ "volume_group_name": {"type": str, "required": False},
}
def _create(self, instance_input):
tenant_id = so.service_instance.get_tenant_id(
instance_input.get("cloud_region"),
instance_input.get("cloud_owner"),
- instance_input.get("tenant_name")
+ instance_input.get("tenant_name"),
+ oc=self.oc
)
instance_input["tenant_id"] = tenant_id
- service_instance = so.vnf_instance.get_service_instance(
- instance_input.get("service_instance_name")
+ service_instance = so.service_instance.get_service_instance(
+ instance_input.get("service_instance_name"), oc=self.oc
)
- if not service_instance:
- raise ServiceInstanceNotFound(
- "No service instance found for {}".format(
- instance_input.get("service_instance_name")
- )
- )
service_instance_id = service_instance.get("service-instance-id")
model_information = (
service_instance.get("service-data")
@@ -87,15 +85,10 @@ class ModuleInstance(Resource):
service_model_version = model_information["model-version"]
service_model_name = model_information["model-name"]
- vnf_instance = so.vnf_instance.get_vnf_instance(
+ vnf_instance = so.service_instance.get_vnf_instance(
service_instance, instance_input.get("vnf_instance_name")
)
- if not vnf_instance:
- raise VNFInstanceNotFound(
- "No vnf instance found for {}".format(
- instance_input.get("vnf_instance_name")
- )
- )
+
vnf_model_information = vnf_instance.get("vnf-data").get("vnf-information")
vnf_instance_id = vnf_model_information.get("vnf-id")
vnf_model_name = vnf_model_information.get("onap-model-information").get(
@@ -115,10 +108,10 @@ class ModuleInstance(Resource):
)
vnf_model = so.vnf_instance.get_vnf_model_component(
- service_model_name, vnf_model_name
+ service_model_name, vnf_model_name, oc=self.oc
)
- module_model = so.vnf_instance.get_module_model(
+ module_model = get_module_model(
vnf_model, instance_input.get("heat_template_name")
)
model_invariant_id = module_model.get("invariantUUID")
@@ -127,6 +120,8 @@ class ModuleInstance(Resource):
model_name = module_model.get("groupName")
model_version = module_model.get("version")
+ volume_group = module_uses_volume_group(module_model) and instance_input.get("volume_group_name")
+
instance_input["model_invariant_id"] = model_invariant_id
instance_input["model_version_id"] = model_version_id
instance_input["model_name"] = model_name
@@ -144,11 +139,38 @@ class ModuleInstance(Resource):
instance_input["vnf_model_version"] = vnf_model_version
instance_input["vnf_model_customization_id"] = vnf_model_customization_id
- return create_module_instance(instance_input)
+ return create_module_instance(instance_input, volume_group=volume_group, oc=self.oc)
+
+ def _delete(self, instance_input):
+ if instance_input.get("volume_group_name"):
+ request = delete_volume_module_instance(
+ instance_input.get("service_instance_name"),
+ instance_input.get("vnf_instance_name"),
+ instance_input.get("volume_group_name"),
+ instance_input.get("api_type"),
+ oc=self.oc,
+ )
+ request_id = request.get("requestReferences", {}).get(
+ "requestId"
+ )
+ so.service_instance.poll_request(request_id, oc=self.oc)
+
+ request = delete_module_instance(
+ instance_input.get("service_instance_name"),
+ instance_input.get("vnf_instance_name"),
+ instance_input.get("module_instance_name"),
+ instance_input.get("api_type"),
+ oc=self.oc,
+ )
+ request_id = request.get("requestReferences", {}).get(
+ "requestId"
+ )
+ so.service_instance.poll_request(request_id, oc=self.oc)
-def create_module_instance(instance_input):
- oc = Client()
+def create_module_instance(instance_input, volume_group=False, oc=None):
+ if not oc:
+ oc = Client()
preload = sdnc.preload.Preload(
preload_path=instance_input.get("preload_path"),
@@ -156,11 +178,24 @@ def create_module_instance(instance_input):
service_instance_name=instance_input.get("service_instance_name"),
module_instance_name=instance_input.get("module_instance_name"),
heat_template_name=instance_input.get("heat_template_name"),
- api_type=instance_input.get("api_type")
+ api_type=instance_input.get("api_type"),
+ oc=oc
)
preload.create()
headers = {"X-TransactionId": str(uuid.uuid4())}
+
+ if volume_group:
+ volume_instance = oc.so.service_instantiation.create_volume_module_instance(
+ volume_module_instance_name=instance_input.get("volume_group_name"),
+ **instance_input,
+ **headers
+ )
+ request_id = volume_instance.response_data.get("requestReferences", {}).get(
+ "requestId"
+ )
+ so.service_instance.poll_request(request_id, oc=oc)
+
module_instance = oc.so.service_instantiation.create_module_instance(
**instance_input, **headers
)
@@ -169,41 +204,143 @@ def create_module_instance(instance_input):
"requestId"
)
- instance_input["request_info"] = so.service_instance.poll_request(request_id)
+ instance_input["request_info"] = so.service_instance.poll_request(request_id, oc=oc)
return instance_input
@utility
-def delete_module_instance(service_instance_name, vnf_instance_name, module_instance_name, api_type="GR_API"):
+def delete_module_instance(service_instance_name, vnf_instance_name, module_instance_name, api_type="GR_API", oc=None):
+ """Delete a Module Instance from SO"""
+ if not oc:
+ oc = Client()
+
+ si = so.service_instance.get_service_instance(service_instance_name, oc=oc)
+ vnfi = so.service_instance.get_vnf_instance(si, vnf_instance_name)
+ modulei = so.service_instance.get_module_instance(vnfi, module_instance_name)
+
+ si_id = si.get("service-instance-id")
+ vnfi_id = vnfi.get("vnf-id")
+ module_id = modulei.get("vf-module-id")
+ module_invariant_id = modulei.get("vf-module-data").get("vf-module-topology").get("onap-model-information").get("model-invariant-uuid")
+ module_version = modulei.get("vf-module-data").get("vf-module-topology").get("onap-model-information").get("model-version")
+ module_name = modulei.get("vf-module-data").get("vf-module-topology").get("onap-model-information").get("model-name")
+ tenant_id = modulei.get("vf-module-data").get("vf-module-request-input").get("tenant")
+ cloud_owner = modulei.get("vf-module-data").get("vf-module-request-input").get("cloud-owner")
+ cloud_region = modulei.get("vf-module-data").get("vf-module-request-input").get("aic-cloud-region")
+
+ return oc.so.service_instantiation.delete_module_instance(
+ module_invariant_id=module_invariant_id,
+ module_name=module_name,
+ module_version=module_version,
+ cloud_region=cloud_region,
+ cloud_owner=cloud_owner,
+ tenant_id=tenant_id,
+ vnf_instance_id=vnfi_id,
+ service_instance_id=si_id,
+ vf_module_id=module_id,
+ api_type=api_type
+ ).response_data
+
+
+@utility
+def delete_volume_module_instance(service_instance_name, vnf_instance_name, volume_module_name, api_type="GR_API", oc=None):
"""Delete a Module Instance from SO"""
- oc = Client()
+ if not oc:
+ oc = Client()
+
+ si = so.service_instance.get_service_instance(service_instance_name, oc=oc)
+ vnfi = so.service_instance.get_vnf_instance(si, vnf_instance_name)
+
+ vnf_model_information = vnfi.get("vnf-data").get("vnf-information")
+ service_model_information = (
+ si.get("service-data")
+ .get("service-information")
+ .get("onap-model-information")
+ )
+ service_model_name = service_model_information["model-name"]
+ vnf_model_name = vnf_model_information.get("onap-model-information").get(
+ "model-name"
+ )
- si = so.service_instance.get_service_instance(service_instance_name)
si_id = si.get("service-instance-id")
- for vnfi in si.get("service-data", {}).get("vnfs", {}).get("vnf", []):
- vnfi_id = vnfi.get("vnf-id")
- if vnfi.get("vnf-data", {}).get("vnf-request-input", {}).get("vnf-name") == vnf_instance_name:
- for modulei in vnfi.get("vnf-data").get("vf-modules", {}).get("vf-module", []):
- if modulei.get("vf-module-data", {}).get("vf-module-request-input", {}).get("vf-module-name") == module_instance_name:
- module_id = modulei.get("vf-module-id")
- module_invariant_id = modulei.get("vf-module-data").get("vf-module-topology").get("onap-model-information").get("model-invariant-uuid")
- module_version = modulei.get("vf-module-data").get("vf-module-topology").get("onap-model-information").get("model-version")
- module_name = modulei.get("vf-module-data").get("vf-module-topology").get("onap-model-information").get("model-name")
- tenant_id = modulei.get("vf-module-data").get("vf-module-request-input").get("tenant")
- cloud_owner = modulei.get("vf-module-data").get("vf-module-request-input").get("cloud-owner")
- cloud_region = modulei.get("vf-module-data").get("vf-module-request-input").get("aic-cloud-region")
- return oc.so.service_instantiation.delete_module_instance(
- module_invariant_id=module_invariant_id,
- module_name=module_name,
- module_version=module_version,
- cloud_region=cloud_region,
- cloud_owner=cloud_owner,
- tenant_id=tenant_id,
- vnf_instance_id=vnfi_id,
- service_instance_id=si_id,
- vf_module_id=module_id,
- api_type=api_type
- ).response_data
-
- raise ModuleInstanceNotFound("Module Instance was not found: {} {} {}".format(service_instance_name, vnf_instance_name, module_instance_name))
+ vnfi_id = vnfi.get("vnf-id")
+
+ tenant_id = vnfi.get("vnf-data").get("vnf-request-input").get("tenant")
+ cloud_owner = vnfi.get("vnf-data").get("vnf-request-input").get("cloud-owner")
+ cloud_region = vnfi.get("vnf-data").get("vnf-request-input").get("aic-cloud-region")
+
+ volume_group_instance = get_volume_group_instance(volume_module_name, cloud_owner, cloud_region, oc=oc)
+ volume_customization_id = volume_group_instance.get("model-customization-id")
+ vnf_component = so.vnf_instance.get_vnf_model_component(
+ service_model_name, vnf_model_name, oc=oc
+ )
+ volume_group_component = get_volume_group_from_vnf_model(vnf_component, volume_customization_id)
+
+ return oc.so.service_instantiation.delete_volume_module_instance(
+ volume_module_id=volume_group_instance.get("volume-group-id"),
+ module_invariant_id=volume_group_component.get("invariantUUID"),
+ module_name=volume_group_component.get("groupName"),
+ module_version=volume_group_component.get("version"),
+ cloud_region=cloud_region,
+ cloud_owner=cloud_owner,
+ tenant_id=tenant_id,
+ vnf_instance_id=vnfi_id,
+ service_instance_id=si_id,
+ api_type=api_type
+ ).response_data
+
+
+def module_uses_volume_group(module_model):
+ for prop in module_model.get("properties"):
+ if prop.get("name", "") == "volume_group" and prop.get("value") == "true":
+ return True
+ return False
+
+
+def get_volume_group_instance(volume_group_name, cloud_owner, cloud_region, oc=None):
+ if not oc:
+ oc = Client()
+
+ volume_group_list = oc.aai.cloud_infrastructure.get_volume_groups(
+ cloud_owner=cloud_owner,
+ cloud_region=cloud_region
+ ).response_data
+
+ for volume_group in volume_group_list.get("volume-group", []):
+ if volume_group.get("volume-group-name") == volume_group_name:
+ return volume_group
+
+ return {}
+
+
+def get_volume_group_from_vnf_model(vnf_component, volume_group_customization_id):
+ for group_instance in vnf_component.get("groupInstances", []):
+ if group_instance.get("customizationUUID") == volume_group_customization_id:
+ return group_instance
+ return {}
+
+
+def get_module_model(vnf_model, heat_template_name):
+ artifact_uuid = None
+ deployment_artifacts = vnf_model.get("deploymentArtifacts", {})
+ for artifact_name, artifact_data in deployment_artifacts.items():
+ if artifact_data.get("artifactName") == heat_template_name:
+ artifact_uuid = artifact_data.get("artifactUUID")
+
+ if not artifact_uuid:
+ raise NoArtifactFoundInModel(
+ "Heat Template {} was not found in service model".format(heat_template_name)
+ )
+
+ group_instances = vnf_model.get("groupInstances", [])
+ for instance in group_instances:
+ if artifact_uuid in instance.get("artifactsUuid", []):
+ # return instance.get("groupName")
+ return instance
+
+ raise ModuleModelNameNotFound(
+ "Module Model Name for {} was not found in service model".format(
+ heat_template_name
+ )
+ )