68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Kubernetes Secret Reconciler"""
 | |
| from base64 import b64encode
 | |
| from typing import TYPE_CHECKING
 | |
| 
 | |
| from kubernetes.client import CoreV1Api, V1Secret
 | |
| 
 | |
| from passbook.outposts.controllers.k8s.base import (
 | |
|     KubernetesObjectReconciler,
 | |
|     NeedsUpdate,
 | |
| )
 | |
| 
 | |
| if TYPE_CHECKING:
 | |
|     from passbook.outposts.controllers.kubernetes import KubernetesController
 | |
| 
 | |
| 
 | |
| def b64string(source: str) -> str:
 | |
|     """Base64 Encode string"""
 | |
|     return b64encode(source.encode()).decode("utf-8")
 | |
| 
 | |
| 
 | |
| class SecretReconciler(KubernetesObjectReconciler[V1Secret]):
 | |
|     """Kubernetes Secret Reconciler"""
 | |
| 
 | |
|     def __init__(self, controller: "KubernetesController") -> None:
 | |
|         super().__init__(controller)
 | |
|         self.api = CoreV1Api()
 | |
| 
 | |
|     @property
 | |
|     def name(self) -> str:
 | |
|         return f"passbook-outpost-{self.controller.outpost.uuid.hex}-api"
 | |
| 
 | |
|     def reconcile(self, current: V1Secret, reference: V1Secret):
 | |
|         for key in reference.data.keys():
 | |
|             if current.data[key] != reference.data[key]:
 | |
|                 raise NeedsUpdate()
 | |
| 
 | |
|     def get_reference_object(self) -> V1Secret:
 | |
|         """Get deployment object for outpost"""
 | |
|         meta = self.get_object_meta(name=self.name)
 | |
|         return V1Secret(
 | |
|             metadata=meta,
 | |
|             data={
 | |
|                 "passbook_host": b64string(
 | |
|                     self.controller.outpost.config.passbook_host
 | |
|                 ),
 | |
|                 "passbook_host_insecure": b64string(
 | |
|                     str(self.controller.outpost.config.passbook_host_insecure)
 | |
|                 ),
 | |
|                 "token": b64string(self.controller.outpost.token.token_uuid.hex),
 | |
|             },
 | |
|         )
 | |
| 
 | |
|     def create(self, reference: V1Secret):
 | |
|         return self.api.create_namespaced_secret(self.namespace, reference)
 | |
| 
 | |
|     def delete(self, reference: V1Secret):
 | |
|         return self.api.delete_namespaced_secret(
 | |
|             reference.metadata.name, self.namespace
 | |
|         )
 | |
| 
 | |
|     def retrieve(self) -> V1Secret:
 | |
|         return self.api.read_namespaced_secret(self.name, self.namespace)
 | |
| 
 | |
|     def update(self, current: V1Secret, reference: V1Secret):
 | |
|         return self.api.patch_namespaced_secret(
 | |
|             current.metadata.name, self.namespace, reference
 | |
|         )
 | 
