@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service
1212private const val SECRET_LABEL = " cosmotech.com/context"
1313
1414@Service
15- class KubernetesService (private val kubernetesApi : CoreV1Api ) : SecretManager {
15+ class KubernetesService (private val kubernetesApi : CoreV1Api ? ) : SecretManager {
1616
1717 private val logger = LoggerFactory .getLogger(KubernetesService ::class .java)
1818
@@ -30,22 +30,23 @@ class KubernetesService(private val kubernetesApi: CoreV1Api) : SecretManager {
3030 }
3131
3232 private fun deleteSecretFromKubernetes (namespace : String , secretName : String ) {
33+ val api = checkKubernetesContext()
3334 val secretNameLower = secretName.lowercase()
3435 val labelSelector = buildLabelSector(secretNameLower)
3536
36- val secrets =
37- kubernetesApi.listNamespacedSecret(namespace).labelSelector(labelSelector).execute()
37+ val secrets = api.listNamespacedSecret(namespace).labelSelector(labelSelector).execute()
3838 if (secrets.items.isEmpty()) {
3939 logger.debug(" Secret does not exists in namespace $namespace : cannot delete it" )
4040 } else {
4141 logger.info(" Secret exists in namespace $namespace : deleting it" )
42- kubernetesApi .deleteNamespacedSecret(secretNameLower, namespace).execute()
42+ api .deleteNamespacedSecret(secretNameLower, namespace).execute()
4343 }
4444 }
4545
4646 private fun getSecretFromKubernetes (namespace : String , secretName : String ): Map <String , String > {
47+ val api = checkKubernetesContext()
4748 val secretNameLower = secretName.lowercase()
48- val result = kubernetesApi .readNamespacedSecret(secretNameLower, namespace).execute()
49+ val result = api .readNamespacedSecret(secretNameLower, namespace).execute()
4950
5051 logger.debug(" Secret retrieved for namespace $namespace " )
5152 return result.data?.mapValues { Base64 .getDecoder().decode(it.value).toString(Charsets .UTF_8 ) }
@@ -57,6 +58,7 @@ class KubernetesService(private val kubernetesApi: CoreV1Api) : SecretManager {
5758 secretName : String ,
5859 secretData : Map <String , String >
5960 ) {
61+ val api = checkKubernetesContext()
6062 logger.debug(" Creating secret $secretName in namespace $namespace " )
6163
6264 val secretNameLower = secretName.lowercase()
@@ -72,17 +74,20 @@ class KubernetesService(private val kubernetesApi: CoreV1Api) : SecretManager {
7274 body.data = secretData.mapValues { Base64 .getEncoder().encode(it.value.toByteArray()) }
7375 body.type = " Opaque"
7476
75- val secrets =
76- kubernetesApi.listNamespacedSecret(namespace).labelSelector(labelSelector).execute()
77+ val secrets = api.listNamespacedSecret(namespace).labelSelector(labelSelector).execute()
7778 if (secrets.items.isEmpty()) {
7879 logger.debug(" Secret does not exists in namespace $namespace : creating it" )
79- kubernetesApi .createNamespacedSecret(namespace, body).execute()
80+ api .createNamespacedSecret(namespace, body).execute()
8081 } else {
8182 logger.debug(" Secret already exists in namespace $namespace : replacing it" )
82- kubernetesApi .replaceNamespacedSecret(secretNameLower, namespace, body).execute()
83+ api .replaceNamespacedSecret(secretNameLower, namespace, body).execute()
8384 }
8485 logger.info(" Secret created/replaced" )
8586 }
8687
88+ private fun checkKubernetesContext (): CoreV1Api {
89+ return kubernetesApi ? : throw IllegalStateException (" Kubernetes API is not available" )
90+ }
91+
8792 private fun buildLabelSector (secretName : String ) = " $SECRET_LABEL =$secretName "
8893}
0 commit comments