Feature 10923: Autohealing
[osm/POL.git] / osm_policy_module / common / lcm_client.py
index 5085a86..102b0dc 100644 (file)
@@ -131,3 +131,116 @@ class LcmClient:
             },
         }
         return nslcmop
+
+    async def heal(
+            self, nsr_id: str, vnfinstance_id: str, vdur_name: str, vdu_id: str,
+            vnf_member_index: str, heal_type: str, day1: bool, count_index: int):
+        """
+        Sends healing action to LCM through the message bus.
+
+        param nsr_id: Network service record id
+        param vdu_id: Scaling vdu id
+        param vnf_member_index: VNF member index
+        param heal_type: healing action to be executed. Valid values: restart,respawn
+        param day1: To run day1 operations
+        param cause: cause of healing
+        return
+        """
+        log.debug(
+            "heal %s %s %s %s %s %s %s %s",
+            nsr_id,
+            vnfinstance_id,
+            vdur_name,
+            vdu_id,
+            vnf_member_index,
+            heal_type,
+            day1,
+            count_index,
+        )
+        nsr = self.db_client.get_nsr(nsr_id)
+        nslcmop = self._generate_nslcmop_heal(
+            nsr_id, vnfinstance_id, vdur_name, vdu_id, vnf_member_index, heal_type, day1,
+            count_index, nsr['_admin']
+        )
+        self.db_client.create_nslcmop(nslcmop)
+        log.debug("Sending heal action message: %s", json.dumps(nslcmop))
+        await self.msg_bus.aiowrite("ns", "heal", nslcmop)
+
+    def _generate_nslcmop_heal(
+        self,
+        nsr_id: str,
+        vnfinstance_id: str,
+        vdur_name: str,
+        vdu_id: str,
+        vnf_member_index: str,
+        heal_type: str,
+        day1: bool,
+        count_index: int,
+        admin: dict,
+    ):
+        """
+        Builds healing nslcmop.
+        param nsr_id: Network service record id
+        param vnf_member_index: VNF member index
+        param action: healing action to be executed. Valid values: restart, respawn
+        param admin: Dict corresponding to the _admin section of the nsr. Required keys: projects_read, projects_write.
+        return:
+        """
+        log.debug(
+            "_generate_nslcmop_heal %s %s %s %s %s %s %s %s %s",
+            nsr_id,
+            vnfinstance_id,
+            vdur_name,
+            vdu_id,
+            vnf_member_index,
+            heal_type,
+            day1,
+            count_index,
+            admin,
+        )
+        _id = str(uuid.uuid4())
+        now = time.time()
+        params = {
+            "lcmOperationType": "heal",
+            "nsInstanceId": nsr_id,
+            "healVnfData": [
+                {
+                    "vnfInstanceId": vnfinstance_id,
+                    "cause": "default",
+                    "additionalParams": {
+                        "run-day1": day1,
+                        "vdu": [
+                            {
+                                "run-day1": day1,
+                                "count-index": count_index,
+                                "vdu-id": vdu_id
+                            }
+                        ]
+                    }
+                }
+            ]
+        }
+
+        nslcmop = {
+            "id": _id,
+            "_id": _id,
+            "operationState": "PROCESSING",
+            "statusEnteredTime": now,
+            "nsInstanceId": nsr_id,
+            "member-vnf-index": vnf_member_index,
+            "lcmOperationType": "heal",
+            "startTime": now,
+            "location": "default",
+            "isAutomaticInvocation": True,
+            "operationParams": params,
+            "isCancelPending": False,
+            "links": {
+                "self": "/osm/nslcm/v1/ns_lcm_op_occs/" + _id,
+                "nsInstance": "/osm/nslcm/v1/ns_instances/" + nsr_id,
+            },
+            "_admin": {
+                "projects_read": admin['projects_read'],
+                "projects_write": admin['projects_write']
+            }
+        }
+        return nslcmop