Merge "Get deployment status to check if plan and stack exists on the env" into stable/train

This commit is contained in:
Zuul 2021-02-10 11:46:41 +00:00 committed by Gerrit Code Review
commit 587b95511b
7 changed files with 126 additions and 76 deletions

View File

@ -1258,9 +1258,17 @@ class GetTripleoAnsibleInventory(TestCase):
self.ssh_user = 'heat_admin' self.ssh_user = 'heat_admin'
self.stack = 'foo-overcloud' self.stack = 'foo-overcloud'
@mock.patch('tripleoclient.utils.run_command_and_log')
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory', @mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
autospec=True) autospec=True)
def test_get_tripleo_ansible_inventory(self, mock_inventory): def test_get_tripleo_ansible_inventory(self,
mock_inventory,
mock_run_cmd):
mock_run_cmd.command = ['/usr/bin/tripleo-ansible-inventory',
'--os-cloud', 'undercloud',
'--stack', self.stack,
'--ansible_ssh_user', self.ssh_user]
with mock.patch('os.path.exists') as mock_exists: with mock.patch('os.path.exists') as mock_exists:
mock_exists.return_value = True mock_exists.return_value = True

View File

@ -34,6 +34,8 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
self.mock_uuid4 = uuid4_patcher.start() self.mock_uuid4 = uuid4_patcher.start()
self.addCleanup(self.mock_uuid4.stop) self.addCleanup(self.mock_uuid4.stop)
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -42,7 +44,7 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_update_with_user_and_tags(self, mock_execute, def test_update_with_user_and_tags(self, mock_execute,
mock_expanduser, update_ansible, mock_expanduser, update_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--ssh-user', 'tripleo-admin', argslist = ['--ssh-user', 'tripleo-admin',
'--tags', 'ceph'] '--tags', 'ceph']
@ -52,15 +54,14 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
update_ansible.assert_called_once_with( update_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes=None, nodes=None,
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='external_update_steps_playbook.yaml', playbook='external_update_steps_playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags='ceph', tags='ceph',
@ -69,6 +70,8 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
extra_vars={} extra_vars={}
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/stack/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -77,7 +80,7 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_update_with_user_and_extra_vars(self, mock_execute, def test_update_with_user_and_extra_vars(self, mock_execute,
mock_expanduser, update_ansible, mock_expanduser, update_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--ssh-user', 'tripleo-admin', argslist = ['--ssh-user', 'tripleo-admin',
'--extra-vars', 'key1=val1', '--extra-vars', 'key1=val1',
@ -88,15 +91,14 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
update_ansible.assert_called_once_with( update_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes=None, nodes=None,
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='external_update_steps_playbook.yaml', playbook='external_update_steps_playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',

View File

@ -34,6 +34,8 @@ class TestOvercloudExternalUpgradeRun(fakes.TestOvercloudExternalUpgradeRun):
self.mock_uuid4 = uuid4_patcher.start() self.mock_uuid4 = uuid4_patcher.start()
self.addCleanup(self.mock_uuid4.stop) self.addCleanup(self.mock_uuid4.stop)
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -42,7 +44,7 @@ class TestOvercloudExternalUpgradeRun(fakes.TestOvercloudExternalUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_with_user_and_tags(self, mock_execute, def test_upgrade_with_user_and_tags(self, mock_execute,
mock_expanduser, update_ansible, mock_expanduser, update_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--ssh-user', 'tripleo-admin', argslist = ['--ssh-user', 'tripleo-admin',
'--tags', 'ceph'] '--tags', 'ceph']
@ -52,15 +54,14 @@ class TestOvercloudExternalUpgradeRun(fakes.TestOvercloudExternalUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
update_ansible.assert_called_once_with( update_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes=None, nodes=None,
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='external_upgrade_steps_playbook.yaml', playbook='external_upgrade_steps_playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags='ceph', tags='ceph',
@ -69,6 +70,8 @@ class TestOvercloudExternalUpgradeRun(fakes.TestOvercloudExternalUpgradeRun):
extra_vars={} extra_vars={}
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -77,7 +80,7 @@ class TestOvercloudExternalUpgradeRun(fakes.TestOvercloudExternalUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_with_user_and_extra_vars(self, mock_execute, def test_upgrade_with_user_and_extra_vars(self, mock_execute,
mock_expanduser, update_ansible, mock_expanduser, update_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--ssh-user', 'tripleo-admin', argslist = ['--ssh-user', 'tripleo-admin',
'--extra-vars', 'key1=val1', '--extra-vars', 'key1=val1',
@ -88,15 +91,14 @@ class TestOvercloudExternalUpgradeRun(fakes.TestOvercloudExternalUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
update_ansible.assert_called_once_with( update_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes=None, nodes=None,
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='external_upgrade_steps_playbook.yaml', playbook='external_upgrade_steps_playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',

View File

@ -134,6 +134,8 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
self.mock_uuid4 = uuid4_patcher.start() self.mock_uuid4 = uuid4_patcher.start()
self.addCleanup(self.mock_uuid4.stop) self.addCleanup(self.mock_uuid4.stop)
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -142,7 +144,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_update_with_playbook_and_user(self, mock_execute, def test_update_with_playbook_and_user(self, mock_execute,
mock_expanduser, update_ansible, mock_expanduser, update_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'Compute', argslist = ['--limit', 'Compute',
'--playbook', 'fake-playbook.yaml', '--playbook', 'fake-playbook.yaml',
@ -155,15 +157,14 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
update_ansible.assert_called_once_with( update_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='Compute', nodes='Compute',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='fake-playbook.yaml', playbook='fake-playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags=None, tags=None,
@ -172,6 +173,8 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
extra_vars=None extra_vars=None
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -180,7 +183,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_update_limit_with_all_playbooks(self, mock_execute, def test_update_limit_with_all_playbooks(self, mock_execute,
mock_expanduser, update_ansible, mock_expanduser, update_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'Compute', '--playbook', 'all'] argslist = ['--limit', 'Compute', '--playbook', 'all']
verifylist = [ verifylist = [
@ -190,8 +193,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
for book in constants.MINOR_UPDATE_PLAYBOOKS: for book in constants.MINOR_UPDATE_PLAYBOOKS:
@ -199,7 +201,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='Compute', nodes='Compute',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook=book, playbook=book,
node_user='tripleo-admin', node_user='tripleo-admin',
tags=None, tags=None,

View File

@ -149,6 +149,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.mock_uuid4 = uuid4_patcher.start() self.mock_uuid4 = uuid4_patcher.start()
self.addCleanup(self.mock_uuid4.stop) self.addCleanup(self.mock_uuid4.stop)
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -157,7 +159,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_limit_with_playbook_and_user( def test_upgrade_limit_with_playbook_and_user(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'Compute, Controller', argslist = ['--limit', 'Compute, Controller',
'--playbook', 'fake-playbook.yaml', '--playbook', 'fake-playbook.yaml',
@ -170,15 +172,14 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
upgrade_ansible.assert_called_once_with( upgrade_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='Compute:Controller', nodes='Compute:Controller',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='fake-playbook.yaml', playbook='fake-playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',
@ -187,6 +188,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
extra_vars=None extra_vars=None
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -195,7 +198,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_limit_all_playbooks_skip_validation( def test_upgrade_limit_all_playbooks_skip_validation(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'Compute', '--playbook', 'all', argslist = ['--limit', 'Compute', '--playbook', 'all',
'--skip-tags', 'validation'] '--skip-tags', 'validation']
@ -207,8 +210,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
for book in constants.MAJOR_UPGRADE_PLAYBOOKS: for book in constants.MAJOR_UPGRADE_PLAYBOOKS:
@ -216,7 +218,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='Compute', nodes='Compute',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook=book, playbook=book,
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',
@ -225,6 +227,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
extra_vars=None extra_vars=None
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -233,7 +237,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_limit_all_playbooks_only_validation( def test_upgrade_limit_all_playbooks_only_validation(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'Compute', '--playbook', 'all', argslist = ['--limit', 'Compute', '--playbook', 'all',
'--tags', 'validation'] '--tags', 'validation']
@ -245,8 +249,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
for book in constants.MAJOR_UPGRADE_PLAYBOOKS: for book in constants.MAJOR_UPGRADE_PLAYBOOKS:
@ -254,7 +257,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='Compute', nodes='Compute',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook=book, playbook=book,
node_user='tripleo-admin', node_user='tripleo-admin',
tags='validation', tags='validation',
@ -263,6 +266,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
extra_vars=None extra_vars=None
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -271,7 +276,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_nodes_with_playbook_no_skip_tags( def test_upgrade_nodes_with_playbook_no_skip_tags(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'compute-0,compute-1', argslist = ['--limit', 'compute-0,compute-1',
'--playbook', 'fake-playbook.yaml', ] '--playbook', 'fake-playbook.yaml', ]
@ -282,15 +287,14 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
upgrade_ansible.assert_called_once_with( upgrade_ansible.assert_called_once_with(
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='compute-0:compute-1', nodes='compute-0:compute-1',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook='fake-playbook.yaml', playbook='fake-playbook.yaml',
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',
@ -299,6 +303,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
extra_vars=None extra_vars=None
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -307,7 +313,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_node_all_playbooks_skip_tags_default( def test_upgrade_node_all_playbooks_skip_tags_default(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'swift-1', '--playbook', 'all'] argslist = ['--limit', 'swift-1', '--playbook', 'all']
verifylist = [ verifylist = [
@ -317,8 +323,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
for book in constants.MAJOR_UPGRADE_PLAYBOOKS: for book in constants.MAJOR_UPGRADE_PLAYBOOKS:
@ -326,7 +331,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='swift-1', nodes='swift-1',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook=book, playbook=book,
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',
@ -335,6 +340,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
extra_vars=None extra_vars=None
) )
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -343,7 +350,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('oslo_concurrency.processutils.execute') @mock.patch('oslo_concurrency.processutils.execute')
def test_upgrade_node_all_playbooks_skip_tags_all_supported( def test_upgrade_node_all_playbooks_skip_tags_all_supported(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'swift-1', '--playbook', 'all', argslist = ['--limit', 'swift-1', '--playbook', 'all',
'--skip-tags', 'pre-upgrade,validation'] '--skip-tags', 'pre-upgrade,validation']
@ -355,8 +362,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
with mock.patch('os.path.exists') as mock_exists, \ with mock.patch('os.path.exists') as mock_exists:
mock.patch('six.moves.builtins.open') as mock_open:
mock_exists.return_value = True mock_exists.return_value = True
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
for book in constants.MAJOR_UPGRADE_PLAYBOOKS: for book in constants.MAJOR_UPGRADE_PLAYBOOKS:
@ -364,7 +370,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.app.client_manager, self.app.client_manager,
container='overcloud', container='overcloud',
nodes='swift-1', nodes='swift-1',
inventory_file=mock_open().__enter__().read(), inventory_file=mock_inventory.return_value,
playbook=book, playbook=book,
node_user='tripleo-admin', node_user='tripleo-admin',
tags='', tags='',
@ -385,6 +391,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.assertRaises(ParserException, lambda: self.check_parser( self.assertRaises(ParserException, lambda: self.check_parser(
self.cmd, argslist, verifylist)) self.cmd, argslist, verifylist))
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -394,7 +402,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
# it is 'validation' not 'validations' # it is 'validation' not 'validations'
def test_upgrade_skip_tags_validations(self, mock_execute, def test_upgrade_skip_tags_validations(self, mock_execute,
mock_expanduser, upgrade_ansible, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'overcloud-compute-1', argslist = ['--limit', 'overcloud-compute-1',
'--skip-tags', 'validations'] '--skip-tags', 'validations']
@ -411,6 +419,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.assertRaises(exceptions.InvalidConfiguration, self.assertRaises(exceptions.InvalidConfiguration,
lambda: self.cmd.take_action(parsed_args)) lambda: self.cmd.take_action(parsed_args))
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -420,7 +430,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
# should only support the constants.MAJOR_UPGRADE_SKIP_TAGS # should only support the constants.MAJOR_UPGRADE_SKIP_TAGS
def test_upgrade_skip_tags_unsupported_validation_anything_else( def test_upgrade_skip_tags_unsupported_validation_anything_else(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'overcloud-compute-1', argslist = ['--limit', 'overcloud-compute-1',
'--skip-tags', 'validation,anything-else'] '--skip-tags', 'validation,anything-else']
@ -437,6 +447,8 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
self.assertRaises(exceptions.InvalidConfiguration, self.assertRaises(exceptions.InvalidConfiguration,
lambda: self.cmd.take_action(parsed_args)) lambda: self.cmd.take_action(parsed_args))
@mock.patch('tripleoclient.utils.get_tripleo_ansible_inventory',
return_value='/home/fake/inventory.yaml')
@mock.patch('tripleoclient.utils.prompt_user_for_confirmation', @mock.patch('tripleoclient.utils.prompt_user_for_confirmation',
return_value=True) return_value=True)
@mock.patch('tripleoclient.workflows.package_update.update_ansible', @mock.patch('tripleoclient.workflows.package_update.update_ansible',
@ -446,7 +458,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
# should only support the constants.MAJOR_UPGRADE_SKIP_TAGS # should only support the constants.MAJOR_UPGRADE_SKIP_TAGS
def test_upgrade_skip_tags_unsupported_pre_upgrade_anything_else( def test_upgrade_skip_tags_unsupported_pre_upgrade_anything_else(
self, mock_execute, mock_expanduser, upgrade_ansible, self, mock_execute, mock_expanduser, upgrade_ansible,
mock_confirm): mock_confirm, mock_inventory):
mock_expanduser.return_value = '/home/fake/' mock_expanduser.return_value = '/home/fake/'
argslist = ['--limit', 'overcloud-compute-1', argslist = ['--limit', 'overcloud-compute-1',
'--skip-tags', 'pre-upgrade,anything-else'] '--skip-tags', 'pre-upgrade,anything-else']

View File

@ -1269,20 +1269,27 @@ def get_tripleo_ansible_inventory(inventory_file=None,
undercloud_connection='ssh', undercloud_connection='ssh',
return_inventory_file_path=False): return_inventory_file_path=False):
if not inventory_file: if not inventory_file:
inventory_file = '%s/%s' % (os.path.expanduser('~'), inventory_file = os.path.join(
'tripleo-ansible-inventory.yaml') constants.CLOUD_HOME_DIR,
try: 'tripleo-ansible-inventory.yaml'
processutils.execute( )
'/usr/bin/tripleo-ansible-inventory',
'--stack', stack, command = ['/usr/bin/tripleo-ansible-inventory',
'--ansible_ssh_user', ssh_user, '--os-cloud', 'undercloud']
'--undercloud-connection', undercloud_connection, if stack:
'--undercloud-key-file', command.extend(['--stack', stack])
'/var/lib/mistral/.ssh/tripleo-admin-rsa', command.extend(['--undercloud-key-file',
'--os-cloud', 'undercloud', '/var/lib/mistral/.ssh/tripleo-admin-rsa'])
'--static-yaml-inventory', inventory_file) if ssh_user:
except processutils.ProcessExecutionError as e: command.extend(['--ansible_ssh_user', ssh_user])
message = _("Failed to generate inventory: %s") % str(e) if undercloud_connection:
command.extend(['--undercloud-connection',
undercloud_connection])
if inventory_file:
command.extend(['--static-yaml-inventory', inventory_file])
rc = run_command_and_log(LOG, command)
if rc != 0:
message = "Failed to generate inventory"
raise exceptions.InvalidConfiguration(message) raise exceptions.InvalidConfiguration(message)
if os.path.exists(inventory_file): if os.path.exists(inventory_file):
if return_inventory_file_path: if return_inventory_file_path:

View File

@ -27,7 +27,7 @@ from prettytable import PrettyTable
from tripleoclient import command from tripleoclient import command
from tripleoclient import constants from tripleoclient import constants
from tripleoclient import utils as oooutils from tripleoclient import utils as oooutils
from tripleoclient.workflows import plan_management from tripleoclient.workflows import deployment
from validations_libs import constants as v_consts from validations_libs import constants as v_consts
from validations_libs import utils as v_utils from validations_libs import utils as v_utils
@ -39,6 +39,7 @@ LOG = logging.getLogger(__name__ + ".TripleoValidator")
RED = "\033[1;31m" RED = "\033[1;31m"
GREEN = "\033[0;32m" GREEN = "\033[0;32m"
CYAN = "\033[36m" CYAN = "\033[36m"
YELLOW = "\033[0;33m"
RESET = "\033[0;0m" RESET = "\033[0;0m"
FAILED_VALIDATION = "{}FAILED{}".format(RED, RESET) FAILED_VALIDATION = "{}FAILED{}".format(RED, RESET)
@ -46,6 +47,8 @@ PASSED_VALIDATION = "{}PASSED{}".format(GREEN, RESET)
GROUP_FILE = constants.VALIDATION_GROUPS_INFO GROUP_FILE = constants.VALIDATION_GROUPS_INFO
NO_VALIDATION_STATE = ['DEPLOY_FAILED', 'DEPLOYING']
class _CommaListGroupAction(argparse.Action): class _CommaListGroupAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None): def __call__(self, parser, namespace, values, option_string=None):
@ -233,10 +236,17 @@ class TripleOValidatorRun(command.Command):
parser.add_argument( parser.add_argument(
'--plan', '--stack', '--plan', '--stack',
dest='plan', dest='plan',
default='overcloud', default=None,
help=_("Execute the validations using a custom plan name") help=_("Execute the validations using a custom plan name")
) )
parser.add_argument(
'--ssh-user',
dest='ssh_user',
default='heat-admin',
help=_("Ssh User name for the Overcloud ssh connection.")
)
parser.add_argument( parser.add_argument(
'--limit', action='store', required=False, help=_( '--limit', action='store', required=False, help=_(
"A string that identifies a single node or comma-separated" "A string that identifies a single node or comma-separated"
@ -328,6 +338,8 @@ class TripleOValidatorRun(command.Command):
def _run_validator_run(self, parsed_args): def _run_validator_run(self, parsed_args):
LOG = logging.getLogger(__name__ + ".ValidationsRunAnsible") LOG = logging.getLogger(__name__ + ".ValidationsRunAnsible")
plan = parsed_args.plan
# Try to perform OpenStack authentication, if no authentication # Try to perform OpenStack authentication, if no authentication
# and static inventory provided continue, else raise error. # and static inventory provided continue, else raise error.
try: try:
@ -335,18 +347,23 @@ class TripleOValidatorRun(command.Command):
clients._auth_required = True clients._auth_required = True
clients.setup_auth() clients.setup_auth()
except os_exceptions.ConfigException: except os_exceptions.ConfigException:
LOG.warning("Running Validations without authentication.") msg = "Running Validations without authentication."
LOG.warning("{}{}{}".format(YELLOW, msg, RESET))
if not parsed_args.static_inventory: if not parsed_args.static_inventory:
raise exceptions.CommandError( raise exceptions.CommandError(
"No static inventory provided, please provide a valid" "No static inventory provided, please provide a valid"
"inventory or use authentication.") "inventory or use authentication.")
else: else:
plans = plan_management.list_deployment_plans(clients) if plan:
if parsed_args.plan and parsed_args.plan not in plans: status = deployment.get_deployment_status(clients, plan)
raise exceptions.CommandError( if not status or status in NO_VALIDATION_STATE:
"The plan '{}' doesn't exist. " raise exceptions.CommandError(
"Please use one of those {}".format(parsed_args, "The plan and the stack '{}' doesn't exist OR are "
plans)) "in 'failed' or 'deploying' state."
"Please use a valid plan".format(plan))
else:
msg = "Running Validations without Overcloud settings."
LOG.warning("{}{}{}".format(YELLOW, msg, RESET))
limit = parsed_args.limit limit = parsed_args.limit
extra_vars = parsed_args.extra_vars extra_vars = parsed_args.extra_vars
if parsed_args.extra_vars_file: if parsed_args.extra_vars_file:
@ -366,7 +383,7 @@ class TripleOValidatorRun(command.Command):
static_inventory = parsed_args.static_inventory static_inventory = parsed_args.static_inventory
else: else:
static_inventory = oooutils.get_tripleo_ansible_inventory( static_inventory = oooutils.get_tripleo_ansible_inventory(
ssh_user='heat-admin', ssh_user=parsed_args.ssh_user,
stack=parsed_args.plan, stack=parsed_args.plan,
undercloud_connection='local', undercloud_connection='local',
return_inventory_file_path=True) return_inventory_file_path=True)