Delete the corresponding config when deleting a deployment

Change-Id: I26049a60f8bb5702ede69d46e3a989bd09a2b3af
Closes-Bug: #1504384
This commit is contained in:
zengyingzhe 2015-10-23 09:38:41 +08:00
parent 5aeaf3d57b
commit 0a42fb8412
2 changed files with 72 additions and 16 deletions

View File

@ -4270,21 +4270,53 @@ class ShellTestDeployment(ShellBase):
def test_deploy_delete(self):
self.register_keystone_auth_fixture()
headers = {'content-type': 'application/json'}
deploy_resp_dict = {'software_deployment': {
'config_id': 'dummy_config_id'
}}
deploy_resp_string = jsonutils.dumps(deploy_resp_dict)
deploy_http_resp = fakes.FakeHTTPResponse(200, 'OK',
headers, deploy_resp_string)
http_resp = fakes.FakeHTTPResponse(204, 'OK', headers, None)
response = (http_resp, '')
def _get_deployment_request_except(id):
self.client.request('/software_deployments/%s' % id,
'GET').AndRaise(exc.HTTPNotFound())
def _delete_deployment_request_except(id):
self.client.request('/software_deployments/%s' % id,
'GET').AndReturn(deploy_http_resp)
self.client.request('/software_deployments/%s' % id,
'DELETE').AndRaise(exc.HTTPNotFound())
def _delete_config_request_except(id):
self.client.request('/software_deployments/%s' % id,
'GET').AndReturn(deploy_http_resp)
self.client.request('/software_deployments/%s' % id,
'DELETE').AndReturn(http_resp)
self.client.request('/software_configs/dummy_config_id',
'DELETE').AndRaise(exc.HTTPNotFound())
def _delete_request_success(id):
self.client.request('/software_deployments/%s' % id,
'GET').AndReturn(deploy_http_resp)
self.client.request('/software_deployments/%s' % id,
'DELETE').AndReturn(http_resp)
self.client.request('/software_configs/dummy_config_id',
'DELETE').AndReturn(http_resp)
if self.client == http.SessionClient:
self.client.request(
'/software_deployments/defg',
'DELETE').AndReturn(http_resp)
self.client.request(
'/software_deployments/qwer',
'DELETE').AndReturn(http_resp)
self.client.request(
'/software_deployments/defg',
'DELETE').AndRaise(exc.HTTPNotFound())
self.client.request(
'/software_deployments/qwer',
'DELETE').AndRaise(exc.HTTPNotFound())
_get_deployment_request_except('defg')
_get_deployment_request_except('qwer')
_delete_deployment_request_except('defg')
_delete_deployment_request_except('qwer')
_delete_config_request_except('defg')
_delete_config_request_except('qwer')
_delete_request_success('defg')
_delete_request_success('qwer')
else:
self.client.raw_request(
'DELETE', '/software_deployments/defg').AndReturn(response)
@ -4299,9 +4331,20 @@ class ShellTestDeployment(ShellBase):
self.m.ReplayAll()
self.assertEqual('', self.shell('deployment-delete defg qwer'))
self.assertRaises(exc.CommandError, self.shell,
'deployment-delete defg qwer')
self.assertRaises(exc.CommandError, self.shell,
'deployment-delete defg qwer')
output = self.shell('deployment-delete defg qwer')
self.assertRegexpMatches(output, 'Failed to delete the correlative '
'config dummy_config_id of '
'deployment defg')
self.assertRegexpMatches(output, 'Failed to delete the correlative '
'config dummy_config_id of '
'deployment qwer')
self.assertEqual('', self.shell('deployment-delete defg qwer'))
def test_deploy_metadata(self):
self.register_keystone_auth_fixture()

View File

@ -1363,15 +1363,28 @@ def do_deployment_metadata_show(hc, args):
@utils.arg('id', metavar='<ID>', nargs='+',
help=_('IDs of the deployments to delete.'))
def do_deployment_delete(hc, args):
'''Delete a software deployment.'''
'''Delete software deployments.'''
failure_count = 0
for deploy_id in args.id:
try:
sd = hc.software_deployments.get(deployment_id=deploy_id)
hc.software_deployments.delete(deployment_id=deploy_id)
except exc.HTTPNotFound as e:
except Exception as e:
if isinstance(e, exc.HTTPNotFound):
print(_('Deployment with ID %s not found') % deploy_id)
failure_count += 1
print(e)
continue
# just try best to delete the corresponding config
try:
config_id = getattr(sd, 'config_id')
hc.software_configs.delete(config_id=config_id)
except Exception:
print(_('Failed to delete the correlative config'
' %(config_id)s of deployment %(deploy_id)s') %
{'config_id': config_id, 'deploy_id': deploy_id})
if failure_count == len(args.id):
raise exc.CommandError(_("Unable to delete any of the specified "
"deployments."))