Skip to content

Commit

Permalink
Merge pull request #144 from Mirantis/cluster-action
Browse files Browse the repository at this point in the history
Cluster deletion
  • Loading branch information
tomkukral authored Nov 28, 2017
2 parents 4fec815 + aeff9a3 commit 5398377
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 20 deletions.
4 changes: 2 additions & 2 deletions kqueen/blueprints/api/test_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def fake_provision(self, *args, **kwargs):
self.cluster.name = 'Provisioned'
self.cluster.save()

return (True, None)
return True, None

monkeypatch.setattr(provisioner.get_engine_cls(), 'provision', fake_provision)

Expand All @@ -158,7 +158,7 @@ def test_provision_failed(self, provisioner, monkeypatch):
provisioner.save()

def fake_provision(self, *args, **kwargs):
return (False, 'Testing msg')
return False, 'Testing msg'

monkeypatch.setattr(provisioner.get_engine_cls(), 'provision', fake_provision)

Expand Down
13 changes: 7 additions & 6 deletions kqueen/engines/aks.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,26 +78,27 @@ def provision(self, **kwargs):

try:
create_cluster = self.client.managed_clusters.create_or_update(self.resource_group_name, self.cluster.id, cluster)
return (create_cluster, None)
return create_cluster, None
except Exception as e:
msg = 'Creating cluster {} failed with following reason: {}'.format(self.cluster.id, repr(e))
logger.error(msg)
return (False, msg)
return (False, None)
return False, msg

return False, None

def deprovision(self, **kwargs):
"""
Implementation of :func:`~kqueen.engines.base.BaseEngine.deprovision`
"""
try:
delete_cluster = self.client.managed_clusters.delete(self.resource_group_name, self.cluster.id)
return (delete_cluster, None)
return delete_cluster, None
except Exception as e:
msg = 'Deleting cluster {} failed with following reason: {}'.format(self.cluster.id, repr(e))
logger.error(msg)
return (False, msg)
return False, msg

return (False, None)
return False, None

def get_kubeconfig(self):
"""
Expand Down
14 changes: 8 additions & 6 deletions kqueen/engines/gce.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,25 +59,27 @@ def provision(self, **kwargs):
self.cluster_config["cluster"]["name"] = self.cluster_id
try:
create_cluster = self.client.projects().zones().clusters().create(projectId=self.project, zone=self.zone, body=self.cluster_config).execute()
return (create_cluster, None)
return create_cluster, None
except Exception as e:
msg = 'Creating cluster {} failed with following reason: {}'.format(self.cluster_id, repr(e))
logger.error(msg)
return (False, msg)
return (None, None)
return False, msg

return False, None

def deprovision(self, **kwargs):
"""
Implementation of :func:`~kqueen.engines.base.BaseEngine.deprovision`
"""
try:
delete_cluster = self.client.projects().zones().clusters().delete(projectId=self.project, zone=self.zone, clusterId=self.cluster_id).execute()
return (delete_cluster, None)
return delete_cluster, None
except Exception as e:
msg = 'Deleting cluster {} failed with following reason: {}'.format(self.cluster_id, repr(e))
logger.error(msg)
return (False, msg)
return (None, None)
return False, msg

return False, None

def get_kubeconfig(self):
"""
Expand Down
4 changes: 3 additions & 1 deletion kqueen/engines/jenkins.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,12 @@ def provision(self, **kwargs):

def deprovision(self, **kwargs):
"""
Deprovisioning isn't supported for Jenkins provisioner yet.
Implementation of :func:`~kqueen.engines.base.BaseEngine.deprovision`
"""

pass
return True, None

def get_kubeconfig(self):
"""
Expand Down
6 changes: 3 additions & 3 deletions kqueen/engines/manual.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,16 @@ def provision(self):
self.cluster.state = config.get('CLUSTER_OK_STATE')
self.cluster.save()

return (True, None)
return True, None

def deprovision(self):
"""
Deprovision isn't supported by manual engine
Deprovision isn't supported by manual engine, we just pass it.
Implementation of :func:`~kqueen.engines.base.BaseEngine.deprovision`
"""

return (True, None)
return True, None

def get_kubeconfig(self):
"""Get kubeconfig of the cluster
Expand Down
23 changes: 23 additions & 0 deletions kqueen/engines/test_manual.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,26 @@ def fake_init(self, cluster, **kwargs):
engine = obj.engine

assert param_name in engine.test_kwargs

def test_delete_run_deprovision(self, monkeypatch):
""""Deprovision is called before cluster delete"""

def fake_deprovision(self):
self.cluster.metadata['_deprovisioned'] = True
self.cluster.save()

return True, None

monkeypatch.setattr(ManualEngine, 'deprovision', fake_deprovision)

obj = self.test_create_over_api()
obj.delete()

assert '_deprovisioned' in obj.metadata
assert obj.metadata['_deprovisioned']

def test_delete_remove_object(self):
obj = self.test_create_over_api()
obj.delete()

assert not Cluster.exists(self.namespace, obj.id)
15 changes: 13 additions & 2 deletions kqueen/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from importlib import import_module
from kqueen.config import current_config
from kqueen.kubeapi import KubernetesAPI
from kqueen.storages.etcd import DatetimeField
from kqueen.storages.etcd import BoolField
from kqueen.storages.etcd import DatetimeField
from kqueen.storages.etcd import IdField
from kqueen.storages.etcd import JSONField
from kqueen.storages.etcd import Model
Expand Down Expand Up @@ -58,7 +58,18 @@ def engine(self):
parameters.update(i)

return _class(self, **parameters)
return None
else:
raise Exception('Missing provisioner')

def delete(self):
"""Deprovision cluster and delete object from database"""

deprov_status, deprov_msg = self.engine.deprovision()

if deprov_status:
super(Cluster, self).delete()
else:
raise Exception('Unable to deprovision cluster: {}'.format(deprov_msg))

def get_kubeconfig(self):
if self.kubeconfig:
Expand Down

0 comments on commit 5398377

Please sign in to comment.