From 67df6897d666cdd933b8812637161b1f4cffacbc Mon Sep 17 00:00:00 2001 From: Roman Prykhodchenko Date: Tue, 14 Jun 2016 18:04:25 +0200 Subject: [PATCH] Add task delete command to fuel2 In order to be able to deprecate the old task command it's necessary to implement task deletion in fuel2. Change-Id: I958ab15f0e91f18af82ad3054c2a1e29d1698526 Partial-bug: #1592452 --- fuelclient/commands/task.py | 22 ++++++++++++++++++++ fuelclient/tests/unit/v2/cli/test_task.py | 18 ++++++++++++++++ fuelclient/tests/unit/v2/lib/test_task.py | 20 ++++++++++++++++++ fuelclient/v1/task.py | 12 +++++++++++ setup.cfg | 25 ++++++++++++----------- 5 files changed, 85 insertions(+), 12 deletions(-) diff --git a/fuelclient/commands/task.py b/fuelclient/commands/task.py index 4fc169cb..c36ec378 100644 --- a/fuelclient/commands/task.py +++ b/fuelclient/commands/task.py @@ -143,6 +143,28 @@ class TaskShow(TaskMixIn, base.BaseShowCommand): 'message') +class TaskDelete(TaskMixIn, base.BaseDeleteCommand): + """Delete task with given id.""" + + def get_parser(self, prog_name): + parser = super(TaskDelete, self).get_parser(prog_name) + + parser.add_argument('-f', + '--force', + action='store_true', + default=False, + help='Force deletion of a task without ' + 'considering its state.') + + return parser + + def take_action(self, parsed_args): + self.client.delete_by_id(parsed_args.id, parsed_args.force) + + msg = 'Task with id {ent_id} was deleted\n' + self.app.stdout.write(msg.format(ent_id=parsed_args.id)) + + class TaskHistoryShow(TaskMixIn, base.BaseListCommand): """Show deployment history about task with given ID.""" diff --git a/fuelclient/tests/unit/v2/cli/test_task.py b/fuelclient/tests/unit/v2/cli/test_task.py index 8d863c7d..16077906 100644 --- a/fuelclient/tests/unit/v2/cli/test_task.py +++ b/fuelclient/tests/unit/v2/cli/test_task.py @@ -49,6 +49,24 @@ class TestTaskCommand(test_engine.BaseCLITest): self.m_get_client.assert_called_once_with('task', mock.ANY) self.m_client.get_by_id.assert_called_once_with(task_id) + def test_task_delete(self): + task_id = 42 + args = 'task delete {task_id}'.format(task_id=task_id) + + self.exec_command(args) + + self.m_get_client.assert_called_once_with('task', mock.ANY) + self.m_client.delete_by_id.assert_called_once_with(task_id, False) + + def test_task_delete_force(self): + task_id = 42 + args = 'task delete --force {task_id}'.format(task_id=task_id) + + self.exec_command(args) + + self.m_get_client.assert_called_once_with('task', mock.ANY) + self.m_client.delete_by_id.assert_called_once_with(task_id, True) + def test_task_history_show(self): task_id = 42 args = 'task history show {task_id} '.format(task_id=task_id) diff --git a/fuelclient/tests/unit/v2/lib/test_task.py b/fuelclient/tests/unit/v2/lib/test_task.py index 0784baca..a65aa4d3 100644 --- a/fuelclient/tests/unit/v2/lib/test_task.py +++ b/fuelclient/tests/unit/v2/lib/test_task.py @@ -50,3 +50,23 @@ class TestTaskFacade(test_api.BaseLibTest): self.client.get_by_id(task_id) self.assertTrue(matcher.called) + + def test_task_delete(self): + task_id = 42 + expected_uri = self.get_object_uri(self.res_uri, task_id) + matcher = self.m_request.delete(expected_uri, json=self.fake_tasks) + + self.client.delete_by_id(task_id, force=False) + + self.assertTrue(matcher.called) + self.assertEqual(['0'], matcher.last_request.qs.get('force')) + + def test_task_delete_force(self): + task_id = 42 + expected_uri = self.get_object_uri(self.res_uri, task_id) + matcher = self.m_request.delete(expected_uri, json=self.fake_tasks) + + self.client.delete_by_id(task_id, force=True) + + self.assertTrue(matcher.called) + self.assertEqual(['1'], matcher.last_request.qs.get('force')) diff --git a/fuelclient/v1/task.py b/fuelclient/v1/task.py index 8096ce05..f588f205 100644 --- a/fuelclient/v1/task.py +++ b/fuelclient/v1/task.py @@ -20,6 +20,18 @@ class TaskClient(base_v1.BaseV1Client): _entity_wrapper = objects.Task + def delete_by_id(self, task_id, force=False): + """Delete a given task by its id + + :param task_id: Id of a task to delete. + :type task_id: int + :param force: Force deletion of a task without + concidering its state + + """ + env_obj = self._entity_wrapper(obj_id=task_id) + env_obj.delete(force=force) + def get_client(connection): return TaskClient(connection) diff --git a/setup.cfg b/setup.cfg index 953cb902..6cbd5f80 100644 --- a/setup.cfg +++ b/setup.cfg @@ -52,6 +52,7 @@ fuelclient = network-template_delete=fuelclient.commands.network_template:NetworkTemplateDelete network-template_download=fuelclient.commands.network_template:NetworkTemplateDownload network-template_upload=fuelclient.commands.network_template:NetworkTemplateUpload + node_ansible-inventory=fuelclient.commands.node:NodeAnsibleInventory node_attributes-download=fuelclient.commands.node:NodeAttributesDownload node_attributes-upload=fuelclient.commands.node:NodeAttributesUpload node_create-vms-conf=fuelclient.commands.node:NodeCreateVMsConf @@ -62,23 +63,23 @@ fuelclient = node_list=fuelclient.commands.node:NodeList node_show=fuelclient.commands.node:NodeShow node_update=fuelclient.commands.node:NodeUpdate - node_ansible-inventory=fuelclient.commands.node:NodeAnsibleInventory - plugins_list=fuelclient.commands.plugins:PluginsList - plugins_sync=fuelclient.commands.plugins:PluginsSync - release_list=fuelclient.commands.release:ReleaseList - release_repos_list=fuelclient.commands.release:ReleaseReposList - release_repos_update=fuelclient.commands.release:ReleaseReposUpdate - task_list=fuelclient.commands.task:TaskList - task_show=fuelclient.commands.task:TaskShow - task_history_show=fuelclient.commands.task:TaskHistoryShow - task_settings_download=fuelclient.commands.task:TaskClusterSettingsDownload - task_deployment-info_download=fuelclient.commands.task:TaskDeploymentInfoDownload - task_network-configuration_download=fuelclient.commands.task:TaskNetworkConfigurationDownload openstack-config_delete=fuelclient.commands.openstack_config:OpenstackConfigDelete openstack-config_download=fuelclient.commands.openstack_config:OpenstackConfigDownload openstack-config_execute=fuelclient.commands.openstack_config:OpenstackConfigExecute openstack-config_list=fuelclient.commands.openstack_config:OpenstackConfigList openstack-config_upload=fuelclient.commands.openstack_config:OpenstackConfigUpload + plugins_list=fuelclient.commands.plugins:PluginsList + plugins_sync=fuelclient.commands.plugins:PluginsSync + release_list=fuelclient.commands.release:ReleaseList + release_repos_list=fuelclient.commands.release:ReleaseReposList + release_repos_update=fuelclient.commands.release:ReleaseReposUpdate + task_delete=fuelclient.commands.task:TaskDelete + task_deployment-info_download=fuelclient.commands.task:TaskDeploymentInfoDownload + task_history_show=fuelclient.commands.task:TaskHistoryShow + task_list=fuelclient.commands.task:TaskList + task_network-configuration_download=fuelclient.commands.task:TaskNetworkConfigurationDownload + task_settings_download=fuelclient.commands.task:TaskClusterSettingsDownload + task_show=fuelclient.commands.task:TaskShow vip_create=fuelclient.commands.vip:VipCreate vip_download=fuelclient.commands.vip:VipDownload vip_upload=fuelclient.commands.vip:VipUpload