diff --git a/tripleoclient/tests/v1/overcloud_config/test_overcloud_config.py b/tripleoclient/tests/v1/overcloud_config/test_overcloud_config.py index 37e57514c..84b05e3ce 100644 --- a/tripleoclient/tests/v1/overcloud_config/test_overcloud_config.py +++ b/tripleoclient/tests/v1/overcloud_config/test_overcloud_config.py @@ -14,6 +14,7 @@ import mock from osc_lib.tests import utils +from tripleoclient.tests import fakes from tripleoclient.v1 import overcloud_config @@ -21,20 +22,12 @@ class TestOvercloudConfig(utils.TestCommand): def setUp(self): super(TestOvercloudConfig, self).setUp() - self.cmd = overcloud_config.DownloadConfig(self.app, None) - self.app.client_manager.workflow_engine = mock.Mock() self.app.client_manager.orchestration = mock.Mock() - self.workflow = self.app.client_manager.workflow_engine + self.app.options = fakes.FakeOptions() - @mock.patch('tripleoclient.v1.overcloud_config.processutils.execute') - @mock.patch('tripleoclient.v1.overcloud_config.open') - @mock.patch('tripleoclient.v1.overcloud_config.request') - @mock.patch('shutil.rmtree') - @mock.patch('tripleoclient.workflows.deployment.config_download_export') - def test_overcloud_download_config( - self, mock_config, mock_rmtree, mock_request, - mock_open, mock_execute): + @mock.patch("tripleoclient.utils.run_ansible_playbook", autospec=True) + def test_overcloud_download_config(self, mock_playbook): arglist = ['--name', 'overcloud', '--config-dir', '/tmp'] verifylist = [ ('name', 'overcloud'), @@ -44,20 +37,15 @@ class TestOvercloudConfig(utils.TestCommand): parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.cmd.take_action(parsed_args) - mock_config.assert_called_once_with( - self.app.client_manager, plan='overcloud', config_type=None) - mock_rmtree.assert_not_called() - mock_open.assert_called() - mock_request.urlopen.assert_called() + mock_playbook.assert_called_once_with( + extra_vars={'plan': 'overcloud', 'config_dir': '/tmp', + 'preserve_config': True}, + inventory='localhost,', playbook='cli-config-download-export.yaml', + playbook_dir='/usr/share/ansible/tripleo-playbooks', + verbosity=3, workdir=mock.ANY) - @mock.patch('tripleoclient.v1.overcloud_config.processutils.execute') - @mock.patch('tripleoclient.v1.overcloud_config.open') - @mock.patch('tripleoclient.v1.overcloud_config.request') - @mock.patch('shutil.rmtree') - @mock.patch('tripleoclient.workflows.deployment.config_download_export') - def test_overcloud_download_config_no_preserve( - self, mock_config, mock_rmtree, mock_request, - mock_open, mock_execute): + @mock.patch("tripleoclient.utils.run_ansible_playbook", autospec=True) + def test_overcloud_download_config_no_preserve(self, mock_playbook): arglist = ['--name', 'overcloud', '--config-dir', '/tmp', '--no-preserve-config'] verifylist = [ @@ -68,8 +56,9 @@ class TestOvercloudConfig(utils.TestCommand): parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.cmd.take_action(parsed_args) - mock_config.assert_called_once_with( - self.app.client_manager, plan='overcloud', config_type=None) - mock_rmtree.assert_called() - mock_open.assert_called() - mock_request.urlopen.assert_called() + mock_playbook.assert_called_once_with( + extra_vars={'plan': 'overcloud', 'config_dir': '/tmp', + 'preserve_config': False}, + inventory='localhost,', playbook='cli-config-download-export.yaml', + playbook_dir='/usr/share/ansible/tripleo-playbooks', + verbosity=3, workdir=mock.ANY) diff --git a/tripleoclient/v1/overcloud_config.py b/tripleoclient/v1/overcloud_config.py index 44874f6d4..bbf17251d 100644 --- a/tripleoclient/v1/overcloud_config.py +++ b/tripleoclient/v1/overcloud_config.py @@ -12,16 +12,12 @@ import logging import os -import shutil -from six.moves.urllib import request from osc_lib.i18n import _ -from oslo_concurrency import processutils from tripleoclient import command from tripleoclient import constants from tripleoclient import utils -from tripleoclient.workflows import deployment class DownloadConfig(command.Command): @@ -69,20 +65,6 @@ class DownloadConfig(command.Command): ) return parser - def create_config_dir(self, config_dir, preserve_config_dir=True): - # Create config directory - if os.path.exists(config_dir) and preserve_config_dir is False: - try: - self.log.info("Directory %s already exists, removing" - % config_dir) - shutil.rmtree(config_dir) - except OSError as e: - message = 'Failed to remove: %s, error: %s' % (config_dir, - str(e)) - raise OSError(message) - - utils.makedirs(config_dir) - def take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) @@ -90,29 +72,20 @@ class DownloadConfig(command.Command): config_dir = parsed_args.config_dir config_type = parsed_args.config_type preserve_config_dir = parsed_args.preserve_config_dir - self.create_config_dir(config_dir, preserve_config_dir) + extra_vars = {'plan': name, + 'config_dir': config_dir, + 'preserve_config': preserve_config_dir} + if config_type: + extra_vars['config_type'] = config_type - # Get config - print("Starting config-download export...") - tempurl = deployment.config_download_export( - self.app.client_manager, - plan=name, - config_type=config_type - ) - print("Finished config-download export.") - self.log.debug("config-download tempurl: %s" % tempurl) - f = request.urlopen(tempurl) - tarball_contents = f.read() - f.close() - tarball_name = "%s-config.tar.gz" % name - tarball_path = os.path.join(config_dir, tarball_name) - - with open(tarball_path, 'wb') as f: - f.write(tarball_contents) - - print("Extracting config-download...") - cmd = ['/usr/bin/tar', '-C', config_dir, '-xf', tarball_path] - processutils.execute(*cmd) + with utils.TempDirs() as tmp: + utils.run_ansible_playbook( + playbook='cli-config-download-export.yaml', + inventory='localhost,', + workdir=tmp, + playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS, + verbosity=utils.playbook_verbosity(self=self), + extra_vars=extra_vars) print("The TripleO configuration has been successfully generated " "into: {0}".format(config_dir)) diff --git a/tripleoclient/workflows/deployment.py b/tripleoclient/workflows/deployment.py index 522a1130b..5252532f4 100644 --- a/tripleoclient/workflows/deployment.py +++ b/tripleoclient/workflows/deployment.py @@ -20,7 +20,6 @@ from heatclient.common import event_utils from heatclient import exc as heat_exc from openstackclient import shell from swiftclient import exceptions as swiftexceptions -from tripleo_common.actions import config from tripleo_common.utils import swift as swift_utils from tripleoclient.constants import ANSIBLE_TRIPLEO_PLAYBOOKS @@ -475,39 +474,6 @@ def config_download(log, clients, stack, ssh_network='ctlplane', ) -def config_download_export(clients, plan, config_type): - """Export a given config. - - :param clients: application client object. - :type clients: Object - - :param plan: Plan name. - :type plan: String - - :param config_type: List of config type options. - :type config_type: List - - :returns: string - """ - - context = clients.tripleoclient.create_mistral_context() - container_config = '{}-config'.format(plan) - config.GetOvercloudConfig( - container=plan, - config_type=config_type, - container_config=container_config - ).run(context=context) - print( - 'Config Download export complete for {}. Creating temp URL.'.format( - plan - ) - ) - - return swift_utils.get_temp_url( - clients.tripleoclient.object_store, container=container_config, - object_name='{}.tar.gz'.format(container_config)) - - def get_horizon_url(stack, verbosity=0): """Return horizon URL string.