Kubernetes: Add cluster delete dependents attribute

This patch add kubernetes cluster dependents, master cluster
record work cluster uuid to dependents.

Master cluster delete check dependents, if work cluster dependents
exist, the master cluster delete faild. kubernetes cluster
work cluster delete before master cluster delete.

Change-Id: Ie6f550f2187d629d396065269af9d4e9fba5acda
Signed-off-by: Yuanbin.Chen <cybing4@gmail.com>
This commit is contained in:
Yuanbin.Chen 2018-03-28 18:07:59 +08:00
parent 325ff9dd2a
commit 41f00dd07c
2 changed files with 44 additions and 0 deletions

View File

@ -97,6 +97,13 @@ class ServerProfile(base.KubeBaseProfile):
self._create_network(obj)
def do_cluster_delete(self, obj):
if obj.dependents and 'kube-node' in obj.dependents:
msg = ("Cluster %s delete failed, "
"Node clusters %s must be deleted first." %
(obj.id, obj.dependents['kube-node']))
raise exc.EResourceDeletion(type='kubernetes.master',
id=obj.id,
message=msg)
self._delete_network(obj)
self._delete_security_group(obj)

View File

@ -116,6 +116,41 @@ class ServerProfile(base.KubeBaseProfile):
return cluster.data
def _set_cluster_dependents(self, obj):
ctx = context.get_service_context(user_id=obj.user,
project_id=obj.project)
master = self.properties[self.MASTER_CLUSTER]
try:
master_cluster = cluster_obj.Cluster.find(ctx, master)
except exc.ResourceNotFound:
msg = _("Cannot find the given cluster: %s") % master
raise exc.BadRequest(msg=msg)
if master_cluster:
# configure kube master dependents, kube master record kube node
# cluster uuid
master_dependents = master_cluster.dependents
master_dependents['kube-node'] = obj.id
cluster_obj.Cluster.update(ctx, master_cluster.id,
{'dependents': master_dependents})
def _del_cluster_dependents(self, obj):
ctx = context.get_service_context(user_id=obj.user,
project_id=obj.project)
master = self.properties[self.MASTER_CLUSTER]
try:
master_cluster = cluster_obj.Cluster.find(ctx, master)
except exc.ResourceNotFound:
msg = _("Cannot find the given cluster: %s") % master
raise exc.BadRequest(msg=msg)
if master_cluster:
# remove kube master record kube node dependents
master_dependents = master_cluster.dependents
if master_dependents and 'kube-node' in master_dependents:
master_dependents.pop('kube-node')
cluster_obj.Cluster.update(ctx, master_cluster.id,
{'dependents': master_dependents})
def _get_cluster_data(self, obj):
ctx = context.get_service_context(user_id=obj.user,
project_id=obj.project)
@ -127,9 +162,11 @@ class ServerProfile(base.KubeBaseProfile):
def do_cluster_create(self, obj):
self._create_security_group(obj)
self._set_cluster_dependents(obj)
def do_cluster_delete(self, obj):
self._delete_security_group(obj)
self._del_cluster_dependents(obj)
def do_validate(self, obj):
"""Validate if the spec has provided valid info for server creation.