outposts: simplify k8s controller add more extensibility
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
"""Kubernetes deployment controller"""
|
||||
from io import StringIO
|
||||
from typing import Dict, List, Type
|
||||
|
||||
from kubernetes.client import OpenApiException
|
||||
from kubernetes.config import load_incluster_config, load_kube_config
|
||||
@ -7,6 +8,7 @@ from kubernetes.config.config_exception import ConfigException
|
||||
from yaml import dump_all
|
||||
|
||||
from passbook.outposts.controllers.base import BaseController, ControllerException
|
||||
from passbook.outposts.controllers.k8s.base import KubernetesObjectReconciler
|
||||
from passbook.outposts.controllers.k8s.deployment import DeploymentReconciler
|
||||
from passbook.outposts.controllers.k8s.secret import SecretReconciler
|
||||
from passbook.outposts.controllers.k8s.service import ServiceReconciler
|
||||
@ -16,71 +18,50 @@ from passbook.outposts.models import Outpost
|
||||
class KubernetesController(BaseController):
|
||||
"""Manage deployment of outpost in kubernetes"""
|
||||
|
||||
reconcilers: Dict[str, Type[KubernetesObjectReconciler]]
|
||||
reconcile_order: List[str]
|
||||
|
||||
def __init__(self, outpost: Outpost) -> None:
|
||||
super().__init__(outpost)
|
||||
try:
|
||||
load_incluster_config()
|
||||
except ConfigException:
|
||||
load_kube_config()
|
||||
self.reconcilers = {
|
||||
"secret": SecretReconciler,
|
||||
"deployment": DeploymentReconciler,
|
||||
"service": ServiceReconciler,
|
||||
}
|
||||
self.reconcile_order = ["secret", "deployment", "service"]
|
||||
|
||||
def up(self):
|
||||
try:
|
||||
namespace = self.outpost.config.kubernetes_namespace
|
||||
for reconcile_key in self.reconcile_order:
|
||||
reconciler = self.reconcilers[reconcile_key](self)
|
||||
reconciler.up()
|
||||
|
||||
secret_reconciler = SecretReconciler(self.outpost)
|
||||
secret_reconciler.namespace = namespace
|
||||
secret_reconciler.up()
|
||||
|
||||
deployment_reconciler = DeploymentReconciler(self.outpost)
|
||||
deployment_reconciler.namespace = namespace
|
||||
deployment_reconciler.deployment_ports = self.deployment_ports
|
||||
deployment_reconciler.up()
|
||||
|
||||
service_reconciler = ServiceReconciler(self.outpost)
|
||||
service_reconciler.namespace = namespace
|
||||
service_reconciler.deployment_ports = self.deployment_ports
|
||||
service_reconciler.up()
|
||||
except OpenApiException as exc:
|
||||
raise ControllerException from exc
|
||||
|
||||
def down(self):
|
||||
try:
|
||||
namespace = self.outpost.config.kubernetes_namespace
|
||||
for reconcile_key in self.reconcile_order:
|
||||
reconciler = self.reconcilers[reconcile_key](self)
|
||||
reconciler.down()
|
||||
|
||||
secret_reconciler = SecretReconciler(self.outpost)
|
||||
secret_reconciler.namespace = namespace
|
||||
secret_reconciler.down()
|
||||
|
||||
deployment_reconciler = DeploymentReconciler(self.outpost)
|
||||
deployment_reconciler.namespace = namespace
|
||||
deployment_reconciler.deployment_ports = self.deployment_ports
|
||||
deployment_reconciler.down()
|
||||
|
||||
service_reconciler = ServiceReconciler(self.outpost)
|
||||
service_reconciler.namespace = namespace
|
||||
service_reconciler.deployment_ports = self.deployment_ports
|
||||
service_reconciler.down()
|
||||
except OpenApiException as exc:
|
||||
raise ControllerException from exc
|
||||
|
||||
def get_static_deployment(self) -> str:
|
||||
secret_reconciler = SecretReconciler(self.outpost)
|
||||
secret_reconciler.namespace = ""
|
||||
documents = []
|
||||
for reconcile_key in self.reconcile_order:
|
||||
reconciler = self.reconcilers[reconcile_key](self)
|
||||
reconciler.up()
|
||||
documents.append(reconciler.get_reference_object().to_dict())
|
||||
|
||||
deployment_reconciler = DeploymentReconciler(self.outpost)
|
||||
deployment_reconciler.namespace = ""
|
||||
deployment_reconciler.deployment_ports = self.deployment_ports
|
||||
|
||||
service_reconciler = ServiceReconciler(self.outpost)
|
||||
service_reconciler.namespace = ""
|
||||
service_reconciler.deployment_ports = self.deployment_ports
|
||||
with StringIO() as _str:
|
||||
dump_all(
|
||||
[
|
||||
secret_reconciler.get_reference_object().to_dict(),
|
||||
deployment_reconciler.get_reference_object().to_dict(),
|
||||
service_reconciler.get_reference_object().to_dict(),
|
||||
],
|
||||
documents,
|
||||
stream=_str,
|
||||
default_flow_style=False,
|
||||
)
|
||||
|
Reference in New Issue
Block a user