Move run command to utils
The run command in the deploy can be reused. It would be better in utils rather than buried in the tripleo deploy command. Change-Id: Ia40660c4d2cfbc8a5c7ff3a2a21e82abd8e3ecd3
This commit is contained in:
parent
f335b9e040
commit
fd36cf4f8e
|
@ -254,8 +254,8 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
autospec=True)
|
autospec=True)
|
||||||
@mock.patch('tripleoclient.v1.tripleo_deploy.Deploy.'
|
@mock.patch('tripleoclient.v1.tripleo_deploy.Deploy.'
|
||||||
'_update_passwords_env', autospec=True)
|
'_update_passwords_env', autospec=True)
|
||||||
@mock.patch('tripleoclient.v1.tripleo_deploy.Deploy.'
|
@mock.patch('tripleoclient.utils.'
|
||||||
'_run_and_log_output', autospec=True)
|
'run_command_and_log', autospec=True)
|
||||||
@mock.patch('tempfile.mkdtemp', autospec=True, return_value='/twd')
|
@mock.patch('tempfile.mkdtemp', autospec=True, return_value='/twd')
|
||||||
@mock.patch('shutil.copytree', autospec=True)
|
@mock.patch('shutil.copytree', autospec=True)
|
||||||
def test_setup_heat_environments(self,
|
def test_setup_heat_environments(self,
|
||||||
|
@ -328,15 +328,15 @@ class TestDeployUndercloud(TestPluginV1):
|
||||||
mock_inventory.write_static_inventory.assert_called_once_with(
|
mock_inventory.write_static_inventory.assert_called_once_with(
|
||||||
fake_output_dir + '/inventory.yaml', extra_vars)
|
fake_output_dir + '/inventory.yaml', extra_vars)
|
||||||
|
|
||||||
@mock.patch('tripleoclient.v1.tripleo_deploy.Deploy.'
|
@mock.patch('tripleoclient.utils.'
|
||||||
'_run_and_log_output', autospec=True)
|
'run_command_and_log', autospec=True)
|
||||||
@mock.patch('os.chdir')
|
@mock.patch('os.chdir')
|
||||||
@mock.patch('os.execvp')
|
@mock.patch('os.execvp')
|
||||||
def test_launch_ansible(self, mock_execvp, mock_chdir, mock_run):
|
def test_launch_ansible(self, mock_execvp, mock_chdir, mock_run):
|
||||||
|
|
||||||
self.cmd._launch_ansible('/tmp')
|
self.cmd._launch_ansible('/tmp')
|
||||||
mock_chdir.assert_called_once()
|
mock_chdir.assert_called_once()
|
||||||
mock_run.assert_called_once_with(self.cmd, [
|
mock_run.assert_called_once_with(self.cmd.log, [
|
||||||
'ansible-playbook', '-i', '/tmp/inventory.yaml',
|
'ansible-playbook', '-i', '/tmp/inventory.yaml',
|
||||||
'deploy_steps_playbook.yaml', '-e', 'role_name=Undercloud',
|
'deploy_steps_playbook.yaml', '-e', 'role_name=Undercloud',
|
||||||
'-e', 'deploy_server_id=undercloud', '-e',
|
'-e', 'deploy_server_id=undercloud', '-e',
|
||||||
|
|
|
@ -1033,3 +1033,26 @@ def bulk_symlink(log, src, dst, tmpd='/tmp'):
|
||||||
raise
|
raise
|
||||||
finally:
|
finally:
|
||||||
shutil.rmtree(tmp, ignore_errors=True)
|
shutil.rmtree(tmp, ignore_errors=True)
|
||||||
|
|
||||||
|
|
||||||
|
def run_command_and_log(log, cmd, cwd=None):
|
||||||
|
"""Run command and log output
|
||||||
|
|
||||||
|
:param log: logger instance for logging
|
||||||
|
:type log: Logger
|
||||||
|
|
||||||
|
:param cmd: command in list form
|
||||||
|
:param cmd: List
|
||||||
|
|
||||||
|
:param cwd: current worknig directory for execution
|
||||||
|
:param cmd: String
|
||||||
|
"""
|
||||||
|
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT, shell=False,
|
||||||
|
bufsize=1, cwd=cwd)
|
||||||
|
|
||||||
|
for line in iter(proc.stdout.readline, b''):
|
||||||
|
# TODO(aschultz): this should probably goto a log file
|
||||||
|
log.warning(line.rstrip())
|
||||||
|
proc.stdout.close()
|
||||||
|
return proc.wait()
|
||||||
|
|
|
@ -22,7 +22,6 @@ import pwd
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import six
|
import six
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
import tempfile
|
||||||
|
@ -166,17 +165,6 @@ class Deploy(command.Command):
|
||||||
constants.PUPPET_MODULES,
|
constants.PUPPET_MODULES,
|
||||||
constants.PUPPET_BASE)
|
constants.PUPPET_BASE)
|
||||||
|
|
||||||
def _run_and_log_output(self, cmd, cwd=None):
|
|
||||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.STDOUT, shell=False,
|
|
||||||
bufsize=1, cwd=cwd)
|
|
||||||
|
|
||||||
for line in iter(proc.stdout.readline, b''):
|
|
||||||
# TODO(aschultz): this should probably goto a log file
|
|
||||||
self.log.warning(line.rstrip())
|
|
||||||
proc.stdout.close()
|
|
||||||
return proc.wait()
|
|
||||||
|
|
||||||
def _update_passwords_env(self, output_dir, passwords=None):
|
def _update_passwords_env(self, output_dir, passwords=None):
|
||||||
pw_file = os.path.join(output_dir, 'tripleo-undercloud-passwords.yaml')
|
pw_file = os.path.join(output_dir, 'tripleo-undercloud-passwords.yaml')
|
||||||
undercloud_pw_file = os.path.join(output_dir,
|
undercloud_pw_file = os.path.join(output_dir,
|
||||||
|
@ -372,7 +360,7 @@ class Deploy(command.Command):
|
||||||
'tools/process-templates.py')
|
'tools/process-templates.py')
|
||||||
args = ['python', process_templates, '--roles-data',
|
args = ['python', process_templates, '--roles-data',
|
||||||
parsed_args.roles_file, '--output-dir', self.tht_render]
|
parsed_args.roles_file, '--output-dir', self.tht_render]
|
||||||
if self._run_and_log_output(args, cwd=self.tht_render) != 0:
|
if utils.run_command_and_log(self.log, args, cwd=self.tht_render) != 0:
|
||||||
# TODO(aschultz): improve error messaging
|
# TODO(aschultz): improve error messaging
|
||||||
raise exceptions.DeploymentError("Problems generating templates.")
|
raise exceptions.DeploymentError("Problems generating templates.")
|
||||||
|
|
||||||
|
@ -538,7 +526,7 @@ class Deploy(command.Command):
|
||||||
'-e', 'deploy_server_id=undercloud', '-e',
|
'-e', 'deploy_server_id=undercloud', '-e',
|
||||||
'bootstrap_server_id=undercloud']
|
'bootstrap_server_id=undercloud']
|
||||||
self.log.debug('Running Ansible: %s' % (' '.join(cmd)))
|
self.log.debug('Running Ansible: %s' % (' '.join(cmd)))
|
||||||
return self._run_and_log_output(cmd)
|
return utils.run_command_and_log(self.log, cmd)
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
|
|
Loading…
Reference in New Issue