From b30b4f1f25c3b481671503bd288812a9ff7c9cfc Mon Sep 17 00:00:00 2001 From: "OTSUKA, Yuanying" Date: Tue, 13 Jan 2015 12:37:47 +0900 Subject: [PATCH] Implement pod deletion Pod deletion is working from magnum api. Change-Id: I6b6ccc9d95bddc42a98450cebac15bfd7aceab37 --- magnum/api/controllers/v1/pod.py | 4 +--- magnum/conductor/api.py | 4 ++-- magnum/conductor/handlers/common/kube_utils.py | 8 ++++---- magnum/conductor/handlers/kube.py | 7 +++++-- magnum/tests/api/controllers/v1/test_pod.py | 4 +++- magnum/tests/conductor/test_rpcapi.py | 3 +-- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/magnum/api/controllers/v1/pod.py b/magnum/api/controllers/v1/pod.py index 6e80646d42..5e9390590e 100644 --- a/magnum/api/controllers/v1/pod.py +++ b/magnum/api/controllers/v1/pod.py @@ -346,6 +346,4 @@ class PodsController(rest.RestController): if self.from_pods: raise exception.OperationNotPermitted - rpc_pod = objects.Pod.get_by_uuid(pecan.request.context, - pod_uuid) - pecan.request.rpcapi.pod_delete(rpc_pod) + pecan.request.rpcapi.pod_delete(pod_uuid) diff --git a/magnum/conductor/api.py b/magnum/conductor/api.py index b33d4cad96..c49f5c77e6 100644 --- a/magnum/conductor/api.py +++ b/magnum/conductor/api.py @@ -82,8 +82,8 @@ class API(rpc_service.API): def pod_list(self, context, limit, marker, sort_key, sort_dir): return objects.Pod.list(context, limit, marker, sort_key, sort_dir) - def pod_delete(self, pod): - return self._call('pod_delete', pod=pod) + def pod_delete(self, uuid): + return self._call('pod_delete', uuid=uuid) def pod_show(self, ctxt, uuid): return objects.Pod.get_by_uuid(ctxt, uuid) diff --git a/magnum/conductor/handlers/common/kube_utils.py b/magnum/conductor/handlers/common/kube_utils.py index e92b716691..56bbb8c75b 100644 --- a/magnum/conductor/handlers/common/kube_utils.py +++ b/magnum/conductor/handlers/common/kube_utils.py @@ -202,15 +202,15 @@ class KubeClient(object): LOG.error("Couldn't get list of pods due to error %s" % e) return None - def pod_delete(self, master_address, uuid): - LOG.debug("pod_delete %s" % uuid) + def pod_delete(self, master_address, name): + LOG.debug("pod_delete %s" % name) try: - out, err = utils.trycmd('kubectl', 'delete', 'pod', uuid, + out, err = utils.trycmd('kubectl', 'delete', 'pod', name, '-s', master_address,) if err: return False except Exception as e: - LOG.error("Couldn't delete pod %s due to error %s" % (uuid, e)) + LOG.error("Couldn't delete pod %s due to error %s" % (name, e)) return False return True diff --git a/magnum/conductor/handlers/kube.py b/magnum/conductor/handlers/kube.py index 33259ead23..c56ef893d8 100644 --- a/magnum/conductor/handlers/kube.py +++ b/magnum/conductor/handlers/kube.py @@ -142,10 +142,13 @@ class Handler(object): LOG.debug("pod_list") return self.kube_cli.pod_list() - def pod_delete(self, ctxt, pod): + def pod_delete(self, ctxt, uuid): LOG.debug("pod_delete ") # trigger a kubectl command - status = self.kube_cli.pod_delete(pod.uuid) + pod = objects.Pod.get_by_uuid(ctxt, uuid) + k8s_master_url = _retrive_k8s_master_url(ctxt, pod) + + status = self.kube_cli.pod_delete(k8s_master_url, pod.name) if not status: return None # call the pod object to persist in db diff --git a/magnum/tests/api/controllers/v1/test_pod.py b/magnum/tests/api/controllers/v1/test_pod.py index 420396bc8c..ef584d0b23 100644 --- a/magnum/tests/api/controllers/v1/test_pod.py +++ b/magnum/tests/api/controllers/v1/test_pod.py @@ -10,6 +10,7 @@ # See the License for the specific language governing permissions and # limitations under the License. from magnum.conductor import api +from magnum import objects from magnum.tests.db import base as db_base from mock import patch @@ -20,7 +21,8 @@ class TestPodController(db_base.DbTestCase): pod.create() return pod - def mock_pod_destroy(self, pod): + def mock_pod_destroy(self, pod_uuid): + pod = objects.Pod.get_by_uuid({}, pod_uuid) pod.destroy() def test_pod_api(self): diff --git a/magnum/tests/conductor/test_rpcapi.py b/magnum/tests/conductor/test_rpcapi.py index 618b1fba8e..4ead7fb154 100644 --- a/magnum/tests/conductor/test_rpcapi.py +++ b/magnum/tests/conductor/test_rpcapi.py @@ -102,12 +102,11 @@ class RPCAPITestCase(base.DbTestCase): version='1.0', pod=self.fake_pod) - # TODO(sdake) the parameters to delete operations are highly suspect def test_pod_delete(self): self._test_rpcapi('pod_delete', 'call', version='1.0', - pod=self.fake_pod) + uuid=self.fake_pod['uuid']) def test_rc_create(self): self._test_rpcapi('rc_create',