Revert "Use swift bulk-delete when deleting a plan"

This reverts commit f6891826c9.

Change-Id: I8de39d5f9ce4c64fa3327ca45a7abcbe774852c0
Closes-Bug: #1791120
This commit is contained in:
Alex Schultz
2018-09-10 21:06:35 +00:00
parent af108b8d55
commit b02e32964b
6 changed files with 57 additions and 35 deletions

View File

@@ -55,7 +55,6 @@ class GetOvercloudConfig(templates.ProcessTemplatesAction):
def run(self, context): def run(self, context):
heat = self.get_orchestration_client(context) heat = self.get_orchestration_client(context)
swift = self.get_object_client(context) swift = self.get_object_client(context)
swiftservice = self.get_object_service(context)
# Since the config-download directory is now a git repo, first download # Since the config-download directory is now a git repo, first download
# the existing config container if it exists so we can reuse the # the existing config container if it exists so we can reuse the
@@ -65,7 +64,7 @@ class GetOvercloudConfig(templates.ProcessTemplatesAction):
self.config_dir) self.config_dir)
# Delete the existing container before we re-upload, otherwise # Delete the existing container before we re-upload, otherwise
# files may not be fully overwritten. # files may not be fully overwritten.
swiftutils.delete_container(swiftservice, self.container_config) swiftutils.delete_container(swift, self.container_config)
except swiftexceptions.ClientException as err: except swiftexceptions.ClientException as err:
if err.http_status != 404: if err.http_status != 404:
raise raise

View File

@@ -119,11 +119,11 @@ class DeletePlanAction(base.TripleOAction):
raise exception.StackInUseError(name=self.container) raise exception.StackInUseError(name=self.container)
try: try:
swift_service = self.get_object_service(context) swift = self.get_object_client(context)
swiftutils.delete_container(swift_service, self.container) swiftutils.delete_container(swift, self.container)
swiftutils.delete_container(swift_service, swiftutils.delete_container(swift,
"%s-swift-rings" % self.container) "%s-swift-rings" % self.container)
swiftutils.delete_container(swift_service, swiftutils.delete_container(swift,
"%s-messages" % self.container) "%s-messages" % self.container)
except swiftexceptions.ClientException as ce: except swiftexceptions.ClientException as ce:
LOG.exception("Swift error deleting plan.") LOG.exception("Swift error deleting plan.")

View File

@@ -57,16 +57,13 @@ class GetOvercloudConfigActionTest(base.TestCase):
self.ctx = mock.MagicMock() self.ctx = mock.MagicMock()
@mock.patch('tripleo_common.actions.base.TripleOAction.'
'get_object_service')
@mock.patch('tripleo_common.actions.base.TripleOAction.' @mock.patch('tripleo_common.actions.base.TripleOAction.'
'get_orchestration_client') 'get_orchestration_client')
@mock.patch('tripleo_common.utils.config.Config.download_config') @mock.patch('tripleo_common.utils.config.Config.download_config')
@mock.patch('tripleo_common.utils.tarball.create_tarball') @mock.patch('tripleo_common.utils.tarball.create_tarball')
def test_run(self, mock_create_tarball, def test_run(self, mock_create_tarball,
mock_config, mock_config,
mock_orchestration_client, mock_orchestration_client):
mock_object_service):
heat = mock.MagicMock() heat = mock.MagicMock()
heat.stacks.get.return_value = mock.MagicMock( heat.stacks.get.return_value = mock.MagicMock(
stack_name='stack', id='stack_id') stack_name='stack', id='stack_id')

View File

@@ -264,12 +264,10 @@ class DeletePlanActionTest(base.TestCase):
self.assertRaises(exception.StackInUseError, action.run, self.ctx) self.assertRaises(exception.StackInUseError, action.run, self.ctx)
heat.stacks.get.assert_called_with(self.container_name) heat.stacks.get.assert_called_with(self.container_name)
@mock.patch('tripleo_common.actions.base.TripleOAction.get_object_service')
@mock.patch('tripleo_common.actions.base.TripleOAction.get_object_client') @mock.patch('tripleo_common.actions.base.TripleOAction.get_object_client')
@mock.patch( @mock.patch(
'tripleo_common.actions.base.TripleOAction.get_orchestration_client') 'tripleo_common.actions.base.TripleOAction.get_orchestration_client')
def test_run(self, get_orchestration_client, get_obj_client_mock, def test_run(self, get_orchestration_client, get_obj_client_mock):
get_obj_service_mock):
# setup swift # setup swift
swift = mock.MagicMock() swift = mock.MagicMock()
@@ -285,13 +283,8 @@ class DeletePlanActionTest(base.TestCase):
{'name': 'finally-another-name.yaml'} {'name': 'finally-another-name.yaml'}
] ]
) )
get_obj_client_mock.return_value = swift
swift_service = mock.MagicMock() get_obj_client_mock.return_value = swift
swift_service.delete.return_value = ([
{'success': True},
])
get_obj_service_mock.return_value = swift_service
# setup heat # setup heat
heat = mock.MagicMock() heat = mock.MagicMock()
@@ -303,11 +296,16 @@ class DeletePlanActionTest(base.TestCase):
action.run(self.ctx) action.run(self.ctx)
mock_calls = [ mock_calls = [
mock.call(container='overcloud'), mock.call('overcloud', 'some-name.yaml'),
mock.call('overcloud', 'some-other-name.yaml'),
mock.call('overcloud', 'yet-some-other-name.yaml'),
mock.call('overcloud', 'finally-another-name.yaml')
] ]
swift_service.delete.assert_has_calls( swift.delete_object.assert_has_calls(
mock_calls, any_order=True) mock_calls, any_order=True)
swift.delete_container.assert_called_with(self.container_name)
class ListRolesActionTest(base.TestCase): class ListRolesActionTest(base.TestCase):

View File

@@ -37,21 +37,29 @@ class SwiftTest(base.TestCase):
] ]
) )
self.swiftservice = mock.MagicMock()
self.swiftservice.delete.return_value = ([
{'success': True},
])
def test_delete_container_success(self): def test_delete_container_success(self):
swift_utils.delete_container(self.swiftservice, swift_utils.empty_container(self.swiftclient, self.container_name)
self.container_name)
mock_calls = [ mock_calls = [
mock.call(container=self.container_name), mock.call('overcloud', 'some-name.yaml'),
mock.call('overcloud', 'some-other-name.yaml'),
mock.call('overcloud', 'yet-some-other-name.yaml'),
mock.call('overcloud', 'finally-another-name.yaml')
] ]
self.swiftservice.delete.assert_has_calls( self.swiftclient.delete_object.assert_has_calls(
mock_calls, any_order=True) mock_calls, any_order=True)
self.swiftclient.get_account.assert_called()
self.swiftclient.get_container.assert_called_with(self.container_name)
def test_delete_container_not_found(self):
self.assertRaises(ValueError,
swift_utils.empty_container,
self.swiftclient, 'idontexist')
self.swiftclient.get_account.assert_called()
self.swiftclient.get_container.assert_not_called()
self.swiftclient.delete_object.assert_not_called()
def test_create_container(self): def test_create_container(self):
swift_utils.create_container(self.swiftclient, 'abc') swift_utils.create_container(self.swiftclient, 'abc')
self.swiftclient.put_container.assert_called() self.swiftclient.put_container.assert_called()

View File

@@ -19,6 +19,7 @@ import logging
import os import os
import tempfile import tempfile
import six
from swiftclient.service import SwiftError from swiftclient.service import SwiftError
from swiftclient.service import SwiftUploadObject from swiftclient.service import SwiftUploadObject
@@ -27,11 +28,30 @@ from tripleo_common.utils import tarball
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
def delete_container(swiftservice, name): def empty_container(swiftclient, name):
delres = swiftservice.delete(container=name) container_names = [container["name"] for container
if delres is None: in swiftclient.get_account()[1]]
# A None return means the container didn't exist
LOG.info('Container %s not found', name) if name in container_names:
headers, objects = swiftclient.get_container(name)
# FIXME(rbrady): remove delete_object loop when
# LP#1615830 is fixed. See LP#1615825 for more info.
# delete files from plan
for o in objects:
swiftclient.delete_object(name, o['name'])
else:
error_text = "The {name} container does not exist.".format(name=name)
raise ValueError(error_text)
def delete_container(swiftclient, name):
try:
empty_container(swiftclient, name)
swiftclient.delete_container(name)
except ValueError as e:
# ValueError is raised when we can't find the container, which means
# that it's already deleted.
LOG.info(six.text_type(e))
def download_container(swiftclient, container, dest, def download_container(swiftclient, container, dest,