get user/project domains with admin/v1/domains
[osm/NBI.git] / osm_nbi / instance_topics.py
index 139ced7..776edc1 100644 (file)
@@ -18,7 +18,8 @@ from uuid import uuid4
 from http import HTTPStatus
 from time import time
 from copy import copy, deepcopy
-from osm_nbi.validation import validate_input, ValidationError, ns_instantiate, ns_action, ns_scale, nsi_instantiate
+from osm_nbi.validation import validate_input, ValidationError, ns_instantiate, ns_terminate, ns_action, ns_scale,\
+    nsi_instantiate
 from osm_nbi.base_topic import BaseTopic, EngineException, get_iterable, deep_get
 # from descriptor_topics import DescriptorTopic
 from yaml import safe_dump
@@ -232,6 +233,14 @@ class NsrTopic(BaseTopic):
                 "name-ref": ns_request["nsName"],
                 "short-name": ns_request["nsName"],
                 "admin-status": "ENABLED",
+                "nsState": "NOT_INSTANTIATED",
+                "currentOperation": "IDLE",
+                "currentOperationID": None,
+                "errorDescription": None,
+                "errorDetail": None,
+                "deploymentStatus": None,
+                "configurationStatus": None,
+                "vcaStatus": None,
                 "nsd": nsd,
                 "datacenter": ns_request["vimAccountId"],
                 "resource-orchestrator": "osmopenmano",
@@ -477,7 +486,7 @@ class NsLcmOpTopic(BaseTopic):
         "instantiate": ns_instantiate,
         "action": ns_action,
         "scale": ns_scale,
-        "terminate": None,
+        "terminate": ns_terminate,
     }
 
     def __init__(self, db, fs, msg, auth):
@@ -751,12 +760,13 @@ class NsLcmOpTopic(BaseTopic):
                                 vnfr_update[iface_text + ".{}".format(k)] = v
                                 vnfr_update_rollback[iface_text + ".{}".format(k)] = vdur_interface.get(v)
                         if pdu_interface.get("ip-address"):
-                            if vdur_interface.get("mgmt-interface"):
+                            if vdur_interface.get("mgmt-interface") or vdur_interface.get("mgmt-vnf"):
                                 vnfr_update_rollback[vdu_text + ".ip-address"] = vdur.get("ip-address")
                                 vnfr_update[vdu_text + ".ip-address"] = pdu_interface["ip-address"]
                             if vdur_interface.get("mgmt-vnf"):
                                 vnfr_update_rollback["ip-address"] = vnfr.get("ip-address")
                                 vnfr_update["ip-address"] = pdu_interface["ip-address"]
+                                vnfr_update[vdu_text + ".ip-address"] = pdu_interface["ip-address"]
                         if pdu_interface.get("vim-network-name") or pdu_interface.get("vim-network-id"):
                             ifaces_forcing_vim_network.append({
                                 "name": vdur_interface.get("vnf-vld-id") or vdur_interface.get("ns-vld-id"),
@@ -921,6 +931,10 @@ class NsLcmOpTopic(BaseTopic):
             "id": _id,
             "_id": _id,
             "operationState": "PROCESSING",  # COMPLETED,PARTIALLY_COMPLETED,FAILED_TEMP,FAILED,ROLLING_BACK,ROLLED_BACK
+            "queuePosition": None,
+            "stage": None,
+            "errorMessage": None,
+            "detailedStatus": None,
             "statusEnteredTime": now,
             "nsInstanceId": nsr_id,
             "lcmOperationType": operation,
@@ -935,6 +949,19 @@ class NsLcmOpTopic(BaseTopic):
         }
         return nslcmop
 
+    def _get_enabled_vims(self, session):
+        """
+        Retrieve and return VIM accounts that are accessible by current user and has state ENABLE
+        :param session: current session with user information
+        """
+        db_filter = self._get_project_filter(session)
+        db_filter["_admin.operationalState"] = "ENABLED"
+        vims = self.db.get_list("vim_accounts", db_filter)
+        vimAccounts = []
+        for vim in vims:
+            vimAccounts.append(vim['_id'])
+        return vimAccounts
+
     def new(self, rollback, session, indata=None, kwargs=None, headers=None, slice_object=False):
         """
         Performs a new operation over a ns
@@ -958,7 +985,7 @@ class NsLcmOpTopic(BaseTopic):
 
         try:
             # Override descriptor with query string kwargs
-            self._update_input_with_kwargs(indata, kwargs)
+            self._update_input_with_kwargs(indata, kwargs, yaml_format=True)
             operation = indata["lcmOperationType"]
             nsInstanceId = indata["nsInstanceId"]
 
@@ -990,6 +1017,9 @@ class NsLcmOpTopic(BaseTopic):
             nslcmop_desc = self._create_nslcmop(nsInstanceId, operation, indata)
             _id = nslcmop_desc["_id"]
             self.format_on_new(nslcmop_desc, session["project_id"], make_public=session["public"])
+            if indata.get("placement-engine"):
+                # Save valid vim accounts in lcm operation descriptor
+                nslcmop_desc['operationParams']['validVimAccounts'] = self._get_enabled_vims(session)
             self.db.create("nslcmops", nslcmop_desc)
             rollback.append({"topic": "nslcmops", "_id": _id})
             if not slice_object: