CORD-3054 delete steps for k8s synchronizer
Change-Id: I95d61ae5837892e3d7783791506d9ba6d7babcb4
diff --git a/xos/synchronizer/steps/sync_configmap.py b/xos/synchronizer/steps/sync_configmap.py
index ea5c8e2..7cf373b 100644
--- a/xos/synchronizer/steps/sync_configmap.py
+++ b/xos/synchronizer/steps/sync_configmap.py
@@ -80,7 +80,15 @@
o.backend_handle = config_map.metadata.self_link
o.save(update_fields=["backend_handle"])
- def delete_record(self, port):
- # TODO(smbaker): Implement delete step
- pass
+ def delete_record(self, o):
+ config_map = self.get_config_map(o)
+ if not config_map:
+ log.info("Kubernetes config map does not exist; Nothing to delete.", o=o)
+ return
+ delete_options = self.kubernetes_client.V1DeleteOptions()
+ self.v1core.delete_namespaced_config_map(o.name, o.trust_domain.name, delete_options)
+ log.info("Deleted configmap from kubernetes", handle=o.backend_handle)
+
+
+
diff --git a/xos/synchronizer/steps/sync_kubernetesserviceinstance.py b/xos/synchronizer/steps/sync_kubernetesserviceinstance.py
index 4f1088a..21657b6 100644
--- a/xos/synchronizer/steps/sync_kubernetesserviceinstance.py
+++ b/xos/synchronizer/steps/sync_kubernetesserviceinstance.py
@@ -147,7 +147,13 @@
o.backend_handle = pod.metadata.self_link
o.save(update_fields=["backend_handle"])
- def delete_record(self, port):
- # TODO(smbaker): Implement delete step
- pass
+ def delete_record(self, o):
+ secret = self.get_pod(o)
+ if not secret:
+ log.info("Kubernetes pod does not exist; Nothing to delete.", o=o)
+ return
+ delete_options = self.kubernetes_client.V1DeleteOptions()
+ self.v1core.delete_namespaced_pod(o.name, o.slice.trust_domain.name, delete_options)
+ log.info("Deleted pod from kubernetes", handle=o.backend_handle)
+
diff --git a/xos/synchronizer/steps/sync_principal.py b/xos/synchronizer/steps/sync_principal.py
index 3806888..ff38f4f 100644
--- a/xos/synchronizer/steps/sync_principal.py
+++ b/xos/synchronizer/steps/sync_principal.py
@@ -92,7 +92,11 @@
o.backend_handle = service_account.metadata.self_link
o.save(update_fields=["backend_handle"])
- def delete_record(self, port):
- # TODO(smbaker): Implement delete step
- pass
-
+ def delete_record(self, o):
+ principal = self.get_service_account(o)
+ if not principal:
+ log.info("Kubernetes service account does not exist; Nothing to delete.", o=o)
+ return
+ delete_options = self.kubernetes_client.V1DeleteOptions()
+ self.v1core.delete_namespaced_service_account(o.name, o.trust_domain.name, delete_options)
+ log.info("Deleted Principal from kubernetes", handle=o.backend_handle)
diff --git a/xos/synchronizer/steps/sync_secret.py b/xos/synchronizer/steps/sync_secret.py
index a020b43..573a571 100644
--- a/xos/synchronizer/steps/sync_secret.py
+++ b/xos/synchronizer/steps/sync_secret.py
@@ -80,7 +80,11 @@
o.backend_handle = secret.metadata.self_link
o.save(update_fields=["backend_handle"])
- def delete_record(self, port):
- # TODO(smbaker): Implement delete step
- pass
-
+ def delete_record(self, o):
+ secret = self.get_secret(o)
+ if not secret:
+ log.info("Kubernetes secret does not exist; Nothing to delete.", o=o)
+ return
+ delete_options = self.kubernetes_client.V1DeleteOptions()
+ self.v1core.delete_namespaced_secret(o.name, o.trust_domain.name, delete_options)
+ log.info("Deleted secret from kubernetes", handle=o.backend_handle)
diff --git a/xos/synchronizer/steps/sync_service.py b/xos/synchronizer/steps/sync_service.py
index 2fe88f4..500f0d9 100644
--- a/xos/synchronizer/steps/sync_service.py
+++ b/xos/synchronizer/steps/sync_service.py
@@ -94,12 +94,12 @@
return trust_domain
- def get_service(self, o, trust_domain):
+ def get_service(self, o, trust_domain_name):
""" Given an XOS Service, read the associated Service from Kubernetes.
If no Kubernetes service exists, return None
"""
try:
- k8s_service = self.v1core.read_namespaced_service(o.name, trust_domain.name)
+ k8s_service = self.v1core.read_namespaced_service(o.name, trust_domain_name)
except self.ApiException, e:
if e.status == 404:
return None
@@ -108,7 +108,7 @@
def sync_record(self, o):
trust_domain = self.get_trust_domain(o)
- k8s_service = self.get_service(o,trust_domain)
+ k8s_service = self.get_service(o,trust_domain.name)
if not k8s_service:
k8s_service = self.kubernetes_client.V1Service()
@@ -133,6 +133,25 @@
o.save(update_fields=["backend_handle"])
def delete_record(self, o):
- # TODO(smbaker): Implement delete step
- pass
+ trust_domain_name = None
+ trust_domain = self.get_trust_domain(o)
+ if trust_domain:
+ trust_domain_name = trust_domain.name
+ else:
+ # rely on backend_handle being structured like this one,
+ # /api/v1/namespaces/service1-trust/services/service1
+ if (o.backend_handle):
+ parts = o.backend_handle.split("/")
+ if len(parts)>3:
+ trust_domain_name = parts[-3]
+ if not trust_domain_name:
+ raise Exception("Can't delete service %s because there is no trust domain" % o.name)
+
+ k8s_service = self.get_service(o, trust_domain_name)
+ if not k8s_service:
+ log.info("Kubernetes service does not exist; Nothing to delete.", o=o)
+ return
+ delete_options = self.kubernetes_client.V1DeleteOptions()
+ self.v1core.delete_namespaced_service(o.name, trust_domain_name, delete_options)
+ log.info("Deleted service from kubernetes", handle=o.backend_handle)
diff --git a/xos/synchronizer/steps/sync_trustdomain.py b/xos/synchronizer/steps/sync_trustdomain.py
index 90b6afd..5a326fa 100644
--- a/xos/synchronizer/steps/sync_trustdomain.py
+++ b/xos/synchronizer/steps/sync_trustdomain.py
@@ -88,7 +88,12 @@
o.backend_handle = ns.metadata.self_link
o.save(update_fields=["backend_handle"])
- def delete_record(self, port):
- # TODO(smbaker): Implement delete step
- pass
+ def delete_record(self, o):
+ namespace = self.get_namespace(o)
+ if not namespace:
+ log.info("Kubernetes trust domain does not exist; Nothing to delete.", o=o)
+ return
+ delete_options = self.kubernetes_client.V1DeleteOptions()
+ self.v1core.delete_namespace(o.name, delete_options)
+ log.info("Deleted trust domain from kubernetes", handle=o.backend_handle)