K8sPlugin integration changes for Istanbul APIs
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / k8s-connection-plugin / src / main / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / k8s / query / K8sPluginQueryApi.kt
1 package org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.query;
2
3 import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.K8sConnectionPluginConfiguration
4 import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
5 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
6 import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
7 import org.slf4j.LoggerFactory
8 import org.springframework.http.HttpMethod.GET
9
10 public class K8sPluginQueryApi(
11         private val k8sConfiguration: K8sConnectionPluginConfiguration
12 ) {
13     private val log = LoggerFactory.getLogger(K8sPluginQueryApi::class.java)!!
14
15     fun queryK8sResources(
16             cloudRegion: String,
17             kind: String,
18             apiVersion: String,
19             name: String? = null,
20             namespace: String? = null,
21             labels: Map<String, String>? = null
22     ): K8sResourceStatus? {
23         val rbQueryService = K8sQueryRestClient(k8sConfiguration)
24         try {
25             var path: String = "?CloudRegion=$cloudRegion&ApiVersion=$apiVersion&Kind=$kind"
26             if (name != null)
27                 path = path.plus("&Name=$name")
28             if (namespace != null)
29                 path = path.plus("&Namespace=$name")
30             if (labels != null && labels.isNotEmpty()) {
31                 path = path.plus("&Labels=")
32                 for ((name, value) in labels)
33                     path = path.plus("$name%3D$value,")
34                 path = path.trimEnd(',')
35             }
36             val result: BlueprintWebClientService.WebClientResponse<String> = rbQueryService.exchangeResource(
37                     GET.name,
38                     path,
39                     ""
40             )
41             log.debug(result.toString())
42             return if (result.status in 200..299) {
43                 val parsedObject: K8sResourceStatus? = JacksonUtils.readValue(
44                         result.body, K8sResourceStatus::class.java
45                 )
46                 parsedObject
47             } else if (result.status == 500 && result.body.contains("Error finding master table"))
48                 null
49             else
50                 throw BluePrintProcessorException(result.body)
51         } catch (e: Exception) {
52             log.error("Caught exception trying to get k8s rb instance")
53             throw BluePrintProcessorException("${e.message}")
54         }
55     }
56 }