K8sPlugin: support UAT functionality
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / k8s-connection-plugin / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / k8s / definition / K8sPluginDefinitionApi.kt
index 73c0e80..86c019a 100644 (file)
@@ -22,14 +22,17 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition
 import com.fasterxml.jackson.databind.ObjectMapper
 import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition.profile.K8sProfile
 import com.fasterxml.jackson.module.kotlin.readValue
+import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition.K8sDefinitionRestClient.Companion.getK8sDefinitionRestClient
 import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.K8sConnectionPluginConfiguration
 import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition.template.K8sTemplate
 import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
 import org.slf4j.LoggerFactory
 import org.springframework.http.HttpMethod.DELETE
 import org.springframework.http.HttpMethod.GET
 import org.springframework.http.HttpMethod.POST
+import org.springframework.http.HttpMethod.PUT
 import java.nio.file.Path
 
 class K8sPluginDefinitionApi(
@@ -39,12 +42,12 @@ class K8sPluginDefinitionApi(
     private val objectMapper = ObjectMapper()
 
     fun hasDefinition(definition: String, definitionVersion: String): Boolean {
-        val rbDefinitionService = K8sDefinitionRestClient(
-            k8sConfiguration,
-            definition,
-            definitionVersion
-        )
         try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
                 GET.name,
                 "",
@@ -59,12 +62,12 @@ class K8sPluginDefinitionApi(
     }
 
     fun hasProfile(definition: String, definitionVersion: String, profileName: String): Boolean {
-        val rbDefinitionService = K8sDefinitionRestClient(
-            k8sConfiguration,
-            definition,
-            definitionVersion
-        )
         try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
                 GET.name,
                 "/profile/$profileName",
@@ -78,14 +81,40 @@ class K8sPluginDefinitionApi(
         }
     }
 
+    fun getProfile(definition: String, definitionVersion: String, profileName: String): K8sProfile? {
+        try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
+            val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
+                GET.name,
+                "/profile/$profileName",
+                ""
+            )
+            log.debug(result.toString())
+            return if (result.status in 200..299) {
+                val parsedObject: K8sProfile? = JacksonUtils.readValue(result.body, K8sProfile::class.java)
+                parsedObject
+            } else if (result.status == 500 && result.body.contains("Error finding master table"))
+                null
+            else
+                throw BluePrintProcessorException(result.body)
+        } catch (e: Exception) {
+            log.error("Caught exception trying to get k8s rb profile")
+            throw BluePrintProcessorException("${e.message}")
+        }
+    }
+
     fun createProfile(definition: String, definitionVersion: String, profile: K8sProfile) {
-        val rbDefinitionService = K8sDefinitionRestClient(
-            k8sConfiguration,
-            definition,
-            definitionVersion
-        )
         val profileJsonString: String = objectMapper.writeValueAsString(profile)
         try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
                 POST.name,
                 "/profile",
@@ -100,13 +129,57 @@ class K8sPluginDefinitionApi(
         }
     }
 
+    fun updateProfile(profile: K8sProfile) {
+        val profileJsonString: String = objectMapper.writeValueAsString(profile)
+        try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                profile.rbName!!,
+                profile.rbVersion!!
+            )
+            val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
+                PUT.name,
+                "/profile/${profile.profileName}",
+                profileJsonString
+            )
+            if (result.status !in 200..299) {
+                throw Exception(result.body)
+            }
+        } catch (e: Exception) {
+            log.error("Caught exception trying to create k8s rb profile ${profile.profileName}")
+            throw BluePrintProcessorException("${e.message}")
+        }
+    }
+
+    fun deleteProfile(definition: String, definitionVersion: String, profileName: String) {
+        try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
+            val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
+                DELETE.name,
+                "/profile/$profileName",
+                ""
+            )
+            log.debug(result.toString())
+            if (result.status !in 200..299) {
+                throw Exception(result.body)
+            }
+        } catch (e: Exception) {
+            log.error("Caught exception during get template")
+            throw BluePrintProcessorException("${e.message}")
+        }
+    }
+
     fun uploadProfileContent(definition: String, definitionVersion: String, profile: K8sProfile, filePath: Path) {
-        val fileUploadService = K8sUploadFileRestClientService(
-            k8sConfiguration,
-            definition,
-            definitionVersion
-        )
         try {
+            val fileUploadService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = fileUploadService.uploadBinaryFile(
                 "/profile/${profile.profileName}/content",
                 filePath
@@ -123,9 +196,13 @@ class K8sPluginDefinitionApi(
     }
 
     fun createTemplate(definition: String, definitionVersion: String, template: K8sTemplate) {
-        val rbDefinitionService = K8sDefinitionRestClient(k8sConfiguration, definition, definitionVersion)
         val templateJsonString: String = objectMapper.writeValueAsString(template)
         try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
                 POST.name,
                 "/config-template",
@@ -142,8 +219,12 @@ class K8sPluginDefinitionApi(
     }
 
     fun uploadConfigTemplateContent(definition: String, definitionVersion: String, template: K8sTemplate, filePath: Path) {
-        val fileUploadService = K8sUploadFileRestClientService(k8sConfiguration, definition, definitionVersion)
         try {
+            val fileUploadService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = fileUploadService.uploadBinaryFile(
                 "/config-template/${template.templateName}/content",
                 filePath
@@ -159,8 +240,12 @@ class K8sPluginDefinitionApi(
     }
 
     fun deleteTemplate(definition: String, definitionVersion: String, templateName: String) {
-        val rbDefinitionService = K8sDefinitionRestClient(k8sConfiguration, definition, definitionVersion)
         try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = rbDefinitionService.exchangeResource(
                 DELETE.name,
                 "/config-template/$templateName",
@@ -177,8 +262,12 @@ class K8sPluginDefinitionApi(
     }
 
     fun getTemplate(definition: String, definitionVersion: String, templateName: String): K8sTemplate {
-        val rbDefinitionService = K8sDefinitionRestClient(k8sConfiguration, definition, definitionVersion)
         try {
+            val rbDefinitionService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
             val result: BlueprintWebClientService.WebClientResponse<String> = getTemplateRequest(rbDefinitionService, templateName)
             log.debug(result.toString())
             return objectMapper.readValue(result.body)
@@ -189,9 +278,13 @@ class K8sPluginDefinitionApi(
     }
 
     fun hasTemplate(definition: String, definitionVersion: String, templateName: String): Boolean {
-        val rbDefinitionService = K8sDefinitionRestClient(k8sConfiguration, definition, definitionVersion)
         try {
-            val result: BlueprintWebClientService.WebClientResponse<String> = getTemplateRequest(rbDefinitionService, templateName)
+            val interceptedService = getK8sDefinitionRestClient(
+                k8sConfiguration,
+                definition,
+                definitionVersion
+            )
+            val result: BlueprintWebClientService.WebClientResponse<String> = getTemplateRequest(interceptedService, templateName)
             log.debug(result.toString())
             return result.status in 200..299
         } catch (e: Exception) {
@@ -200,7 +293,7 @@ class K8sPluginDefinitionApi(
         }
     }
 
-    private fun getTemplateRequest(rbDefinitionService: K8sDefinitionRestClient, templateName: String): BlueprintWebClientService.WebClientResponse<String> {
+    private fun getTemplateRequest(rbDefinitionService: BlueprintWebClientService, templateName: String): BlueprintWebClientService.WebClientResponse<String> {
         return rbDefinitionService.exchangeResource(
             GET.name,
             "/config-template/$templateName",