Enabling Code Formatter
[ccsdk/cds.git] / components / model-catalog / blueprint-model / uat-blueprints / PNF_CDS_RESTCONF / Scripts / kotlin / RestconfSoftwareUpgrade.kt
index 0540efe..e238c3e 100644 (file)
@@ -16,7 +16,6 @@
 * ============LICENSE_END=========================================================
  */
 
-
 package cba.pnf.swug
 
 import com.fasterxml.jackson.databind.node.ObjectNode
@@ -45,10 +44,12 @@ class RestconfSoftwareUpgrade : AbstractScriptComponentFunction() {
     override suspend fun processNB(executionRequest: ExecutionServiceInput) {
 
         // Extract request properties
-        val model= validatedPayload(executionRequest)
+        val model = validatedPayload(executionRequest)
 
-        log.info("Blueprint invoked for ${model.resolutionKey} for SW Upgrade : " +
-            "${model.action} for sw version ${model.targetSwVersion} on pnf: ${model.deviceId}")
+        log.info(
+            "Blueprint invoked for ${model.resolutionKey} for SW Upgrade : " +
+                "${model.action} for sw version ${model.targetSwVersion} on pnf: ${model.deviceId}"
+        )
 
         try {
             val mountPayload = contentFromResolvedArtifactNB("mount-node")
@@ -62,7 +63,6 @@ class RestconfSoftwareUpgrade : AbstractScriptComponentFunction() {
                 Action.POST_CHECK -> processPostCheck(model)
                 Action.CANCEL -> processCancel(model)
             }
-
         } catch (err: Exception) {
             log.error("an error occurred while configuring device {}", err)
         } finally {
@@ -72,62 +72,72 @@ class RestconfSoftwareUpgrade : AbstractScriptComponentFunction() {
 
     private fun validatedPayload(executionRequest: ExecutionServiceInput): SoftwareUpgradeModel {
         val properties = requestPayloadActionProperty(executionRequest.actionIdentifiers.actionName + "-properties")!!.get(0)
-        if(!properties?.get("pnf-id")?.textValue().isNullOrEmpty() &&
-            !properties?.get("target-software-version")?.textValue().isNullOrEmpty()) {
-            return SoftwareUpgradeModel(getDynamicProperties("resolution-key").asText(),
+        if (!properties?.get("pnf-id")?.textValue().isNullOrEmpty() &&
+            !properties?.get("target-software-version")?.textValue().isNullOrEmpty()
+        ) {
+            return SoftwareUpgradeModel(
+                getDynamicProperties("resolution-key").asText(),
                 BluePrintDependencyService.restClientService(RESTCONF_SERVER_IDENTIFIER),
                 properties.get("pnf-id").textValue(), properties.get("target-software-version").textValue(),
-                Action.getEnumFromActionName(executionRequest.actionIdentifiers.actionName))
-        }else{
+                Action.getEnumFromActionName(executionRequest.actionIdentifiers.actionName)
+            )
+        } else {
             throw BluePrintException("Invalid parameters sent to CDS. Request parameters pnf-id or target-software-version missing")
         }
     }
 
     private suspend fun processPreCheck(model: SoftwareUpgradeModel) {
         log.debug("In PNF SW upgrade : processPreCheck")
-        //Log the current configuration for the subtree
+        // Log the current configuration for the subtree
         val payloadObject = getCurrentConfig(model)
-        log.debug("Current sw version on pnf : ${payloadObject.get("software-upgrade")?.get("upgrade-package")?.get(0)?.get("software-version")?.asText()}")
+        log.debug(
+            "Current sw version on pnf : ${
+                payloadObject.get("software-upgrade")?.get("upgrade-package")?.get(0)?.get("software-version")?.asText()
+            }"
+        )
         log.info("PNF is Healthy!")
     }
 
     private suspend fun processDownloadNESw(model: SoftwareUpgradeModel) {
         log.debug("In PNF SW upgrade : processDownloadNESw")
-        //Check if there is existing config for the targeted software version
+        // Check if there is existing config for the targeted software version
 
         var downloadConfigPayload: String
         if (checkIfSwReadyToPerformAction(Action.PRE_CHECK, model)) {
             downloadConfigPayload = contentFromResolvedArtifactNB("configure")
-            downloadConfigPayload =downloadConfigPayload.replace("%id%", model.yangId)
-        }
-        else {
+            downloadConfigPayload = downloadConfigPayload.replace("%id%", model.yangId)
+        } else {
             downloadConfigPayload = contentFromResolvedArtifactNB("download-ne-sw")
-            model.yangId=model.targetSwVersion
+            model.yangId = model.targetSwVersion
         }
         downloadConfigPayload = downloadConfigPayload.replace("%actionName%", Action.DOWNLOAD_NE_SW.name)
         log.info("Config Payload to start download : $downloadConfigPayload")
 
-        //Apply configlet
-        restconfApplyDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH, downloadConfigPayload,
-            mutableMapOf("Content-Type" to "application/yang.patch+json"))
+        // Apply configlet
+        restconfApplyDeviceConfig(
+            model.client, model.deviceId, CONFIGLET_RESOURCE_PATH, downloadConfigPayload,
+            mutableMapOf("Content-Type" to "application/yang.patch+json")
+        )
 
-        //Poll PNF for Download action's progress
+        // Poll PNF for Download action's progress
         checkExecution(model)
     }
 
     private suspend fun processActivateNESw(model: SoftwareUpgradeModel) {
         log.debug("In PNF SW upgrade : processActivateNESw")
-        //Check if the software is downloaded and ready to be activated
+        // Check if the software is downloaded and ready to be activated
         if (checkIfSwReadyToPerformAction(Action.DOWNLOAD_NE_SW, model)) {
             var activateConfigPayload: String = contentFromResolvedArtifactNB("configure")
             activateConfigPayload = activateConfigPayload.replace("%actionName%", Action.ACTIVATE_NE_SW.name)
             activateConfigPayload = activateConfigPayload.replace("%id%", model.yangId)
             log.info("Config Payload to start activate : $activateConfigPayload")
-            //Apply configlet
-            restconfApplyDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH, activateConfigPayload,
-                mutableMapOf("Content-Type" to "application/yang.patch+json"))
+            // Apply configlet
+            restconfApplyDeviceConfig(
+                model.client, model.deviceId, CONFIGLET_RESOURCE_PATH, activateConfigPayload,
+                mutableMapOf("Content-Type" to "application/yang.patch+json")
+            )
 
-            //Poll PNF for Activate action's progress
+            // Poll PNF for Activate action's progress
             checkExecution(model)
         } else {
             throw BluePrintRetryException("Software Download not completed for device(${model.deviceId}) to activate sw version: ${model.targetSwVersion}")
@@ -136,21 +146,23 @@ class RestconfSoftwareUpgrade : AbstractScriptComponentFunction() {
 
     private suspend fun processPostCheck(model: SoftwareUpgradeModel) {
         log.info("In PNF SW upgrade : processPostCheck")
-        //Log the current configuration for the subtree
+        // Log the current configuration for the subtree
         if (checkIfSwReadyToPerformAction(Action.POST_CHECK, model)) {
             log.info("PNF is healthy post activation!")
         }
     }
 
-    private fun processCancel(model :SoftwareUpgradeModel) {
-        //This is for future implementation of cancel step during software upgrade
+    private fun processCancel(modelSoftwareUpgradeModel) {
+        // This is for future implementation of cancel step during software upgrade
         log.info("In PNF SW upgrade : processCancel")
     }
 
-    private suspend fun getCurrentConfig(model: SoftwareUpgradeModel) : ObjectNode{
-        val currentConfig: BlueprintWebClientService.WebClientResponse<String> = restconfDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH)
+    private suspend fun getCurrentConfig(model: SoftwareUpgradeModel): ObjectNode {
+        val currentConfig: BlueprintWebClientService.WebClientResponse<String> =
+            restconfDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH)
         return JacksonUtils.jsonNode(currentConfig.body) as ObjectNode
     }
+
     private suspend fun checkExecution(model: SoftwareUpgradeModel) {
         val checkExecutionBlock: suspend (Int) -> String = {
             val result = restconfDeviceConfig(model.client, model.deviceId, TARGET_SOFTWARE_PATH.plus(model.yangId))
@@ -162,15 +174,15 @@ class RestconfSoftwareUpgrade : AbstractScriptComponentFunction() {
             }
         }
         model.client.retry<String>(10, 0, 1000, checkExecutionBlock)
-
     }
 
-    private suspend fun checkIfSwReadyToPerformAction(action : Action, model: SoftwareUpgradeModel): Boolean {
+    private suspend fun checkIfSwReadyToPerformAction(action: Action, model: SoftwareUpgradeModel): Boolean {
         val configBody = getCurrentConfig(model)
         configBody.get("software-upgrade")?.get("upgrade-package")?.iterator()?.forEach { item ->
             if (model.targetSwVersion == item.get("software-version")?.asText() &&
-                action.completionStatus == item?.get("current-status")?.asText()) {
-                model.yangId= item.get("id").textValue()
+                action.completionStatus == item?.get("current-status")?.asText()
+            ) {
+                model.yangId = item.get("id").textValue()
                 return true
             }
         }
@@ -191,15 +203,23 @@ enum class Action(val actionName: String, val completionStatus: String) {
     POST_CHECK("postCheck", "ACTIVATION_COMPLETED"),
     CANCEL("cancel", "CANCELLED")
     ;
-    companion object{
+
+    companion object {
+
         fun getEnumFromActionName(name: String): Action {
-            for(value in values()){
-                if (value.actionName==name) return value
+            for (value in values()) {
+                if (value.actionName == name) return value
             }
             throw BluePrintException("Invalid Action sent to CDS")
         }
     }
 }
 
-data class SoftwareUpgradeModel(val resolutionKey: String, val client: BlueprintWebClientService, val deviceId: String,
-                                val targetSwVersion: String, val action: Action, var yangId: String = "")
\ No newline at end of file
+data class SoftwareUpgradeModel(
+    val resolutionKey: String,
+    val client: BlueprintWebClientService,
+    val deviceId: String,
+    val targetSwVersion: String,
+    val action: Action,
+    var yangId: String = ""
+)