diff --git a/distributedcloud-client/dcmanagerclient/api/v1/subcloud_deploy_manager.py b/distributedcloud-client/dcmanagerclient/api/v1/subcloud_deploy_manager.py index 784e528..16514e2 100644 --- a/distributedcloud-client/dcmanagerclient/api/v1/subcloud_deploy_manager.py +++ b/distributedcloud-client/dcmanagerclient/api/v1/subcloud_deploy_manager.py @@ -14,10 +14,9 @@ # limitations under the License. # -from requests_toolbelt import MultipartEncoder - from dcmanagerclient.api import base from dcmanagerclient.api.base import get_json +from requests_toolbelt import MultipartEncoder class SubcloudDeploy(base.Resource): @@ -74,6 +73,12 @@ class subcloud_deploy_manager(base.ResourceManager): resource = self._process_json_response(json_object) return resource + def _deploy_delete(self, url): + resp = self.http_client.delete(url) + if resp.status_code != 200: + self._raise_api_exception(resp) + return None + def subcloud_deploy_show(self, release): url = '/subcloud-deploy/' if release: @@ -85,3 +90,12 @@ class subcloud_deploy_manager(base.ResourceManager): data = kwargs.get('data') url = '/subcloud-deploy/' return self._deploy_upload(url, files, data) + + def subcloud_deploy_delete(self, release, **kwargs): + url = '/subcloud-deploy/' + data = kwargs.get('data') + if release: + url += release + '/' + url += '?deployment_files=' + data['deployment_files'] + url += '&prestage_images=' + data['prestage_images'] + return self._deploy_delete(url) diff --git a/distributedcloud-client/dcmanagerclient/commands/v1/subcloud_deploy_manager.py b/distributedcloud-client/dcmanagerclient/commands/v1/subcloud_deploy_manager.py index a56eeb5..ea354d8 100644 --- a/distributedcloud-client/dcmanagerclient/commands/v1/subcloud_deploy_manager.py +++ b/distributedcloud-client/dcmanagerclient/commands/v1/subcloud_deploy_manager.py @@ -17,6 +17,7 @@ import os from dcmanagerclient.commands.v1 import base from dcmanagerclient import exceptions +from osc_lib.command import command def _format(subcloud_deploy=None): @@ -171,3 +172,52 @@ class DeprecatedSubcloudDeployUpload(SubcloudDeployUpload): deprecation_msg = ('This command has been deprecated. Please use ' 'subcloud deploy upload instead.') raise exceptions.DCManagerClientException(deprecation_msg) + + +class SubcloudDeployDelete(command.Command): + """Delete the uploaded subcloud deployment files""" + + def get_parser(self, prog_name): + parser = super(SubcloudDeployDelete, self).get_parser(prog_name) + + parser.add_argument( + '--release', + required=False, + help='Release version that the user is trying to delete ' + 'If not specified, the current software ' + 'release of the system controller will be used.' + ) + + parser.add_argument( + '--prestage-images', + required=False, + action='store_true', + help='Delete prestage images list file only ' + ) + + parser.add_argument( + '--deployment-files', + required=False, + action='store_true', + help='Delete deploy playbook, deploy overrides, ' + 'deploy chart files ' + ) + + return parser + + def take_action(self, parsed_args): + dcmanager_client = self.app.client_manager.subcloud_deploy_manager + release = parsed_args.release + data = dict() + if parsed_args.prestage_images is not None: + data['prestage_images'] = str(parsed_args.prestage_images) + if parsed_args.deployment_files is not None: + data['deployment_files'] = str(parsed_args.deployment_files) + + try: + dcmanager_client.subcloud_deploy_manager.\ + subcloud_deploy_delete(release, data=data) + except Exception as e: + print(e) + error_msg = "Unable to delete subcloud deploy files" + raise exceptions.DCManagerClientException(error_msg) diff --git a/distributedcloud-client/dcmanagerclient/shell.py b/distributedcloud-client/dcmanagerclient/shell.py index 53fec42..c809d8a 100644 --- a/distributedcloud-client/dcmanagerclient/shell.py +++ b/distributedcloud-client/dcmanagerclient/shell.py @@ -561,6 +561,7 @@ class DCManagerShell(app.App): 'subcloud deploy resume': psdm.PhasedSubcloudDeployResume, 'subcloud deploy upload': sdm.SubcloudDeployUpload, 'subcloud deploy show': sdm.SubcloudDeployShow, + 'subcloud deploy delete': sdm.SubcloudDeployDelete, 'subcloud-deploy upload': sdm.DeprecatedSubcloudDeployUpload, 'subcloud-deploy show': sdm.DeprecatedSubcloudDeployShow, 'subcloud-peer-group add': pm.AddSubcloudPeerGroup, diff --git a/distributedcloud-client/dcmanagerclient/tests/v1/test_subcloud_deploy_manager.py b/distributedcloud-client/dcmanagerclient/tests/v1/test_subcloud_deploy_manager.py index 5e3806d..4e0c7cb 100644 --- a/distributedcloud-client/dcmanagerclient/tests/v1/test_subcloud_deploy_manager.py +++ b/distributedcloud-client/dcmanagerclient/tests/v1/test_subcloud_deploy_manager.py @@ -260,3 +260,21 @@ class TestCLISubcloudDeployManagerV1(base.BaseCommandTest): self.assertTrue('deploy_playbook file does not exist: not_a_valid_path' in str(e)) + + def test_subcloud_deploy_delete_with_release(self): + + release_version = base.SOFTWARE_VERSION + data = {'prestage_images': 'False', 'deployment_files': 'False'} + app_args = ['--release', release_version] + + self.call(subcloud_deploy_cmd.SubcloudDeployDelete, app_args=app_args) + + self.client.subcloud_deploy_manager.subcloud_deploy_delete.\ + assert_called_once_with(release_version, data=data) + + def test_subcloud_deploy_delete_without_release(self): + + self.call(subcloud_deploy_cmd.SubcloudDeployDelete) + data = {'prestage_images': 'False', 'deployment_files': 'False'} + self.client.subcloud_deploy_manager.subcloud_deploy_delete.\ + assert_called_once_with(None, data=data)