Merge "Always run growvols playbook after provision"
This commit is contained in:
commit
20d234fe39
|
@ -255,6 +255,221 @@ class TestRunAnsiblePlaybook(TestCase):
|
|||
)
|
||||
|
||||
|
||||
class TestRunRolePlaybooks(TestCase):
|
||||
def setUp(self):
|
||||
tmp_dir = utils.TempDirs().dir
|
||||
self.work_dir = os.path.join(tmp_dir, 'working_dir')
|
||||
utils.makedirs(self.work_dir)
|
||||
self.inventory_path = os.path.join(
|
||||
self.work_dir, 'tripleo-ansible-inventory.yaml')
|
||||
with open(self.inventory_path, 'w') as f:
|
||||
f.write('{}')
|
||||
|
||||
self.cmd = mock.Mock()
|
||||
self.cmd.app.options.debug = False
|
||||
self.cmd.app_args.verbose_level = 0
|
||||
|
||||
@mock.patch('tripleoclient.utils.run_ansible_playbook')
|
||||
def test_network_config(self, mock_run):
|
||||
roles = [
|
||||
{'count': 10, 'name': 'Compute'},
|
||||
{'count': 3, 'name': 'Controller'}
|
||||
]
|
||||
utils.run_role_playbooks(self.cmd, self.work_dir, self.work_dir,
|
||||
roles, True)
|
||||
|
||||
self.assertEqual(3, mock_run.call_count)
|
||||
mock_run.assert_has_calls([
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Compute',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Controller',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-network-config.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts=None,
|
||||
extra_vars={}
|
||||
)
|
||||
])
|
||||
|
||||
@mock.patch('tripleoclient.utils.run_ansible_playbook')
|
||||
def test_no_network_config(self, mock_run):
|
||||
roles = [
|
||||
{'count': 10, 'name': 'Compute'},
|
||||
{'count': 3, 'name': 'Controller'}
|
||||
]
|
||||
utils.run_role_playbooks(self.cmd, self.work_dir, self.work_dir,
|
||||
roles, False)
|
||||
|
||||
self.assertEqual(2, mock_run.call_count)
|
||||
mock_run.assert_has_calls([
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Compute',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Controller',
|
||||
extra_vars={}
|
||||
)
|
||||
])
|
||||
|
||||
@mock.patch('tripleoclient.utils.run_ansible_playbook')
|
||||
def test_override_growvols(self, mock_run):
|
||||
roles = [
|
||||
{'count': 10, 'name': 'Compute'},
|
||||
{
|
||||
'count': 3,
|
||||
'name': 'Controller',
|
||||
'ansible_playbooks': [
|
||||
{
|
||||
'playbook': '/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
'extra_vars': {
|
||||
'growvols_args': '/var=50% /srv=50%'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
utils.run_role_playbooks(self.cmd, self.work_dir, self.work_dir,
|
||||
roles, False)
|
||||
|
||||
self.assertEqual(2, mock_run.call_count)
|
||||
mock_run.assert_has_calls([
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Compute',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Controller',
|
||||
extra_vars={'growvols_args': '/var=50% /srv=50%'}
|
||||
)
|
||||
])
|
||||
|
||||
@mock.patch('tripleoclient.utils.run_ansible_playbook')
|
||||
def test_role_playbooks(self, mock_run):
|
||||
roles = [
|
||||
{'count': 10, 'name': 'Compute'},
|
||||
{
|
||||
'count': 3,
|
||||
'name': 'Controller',
|
||||
'ansible_playbooks': [
|
||||
{
|
||||
'playbook': 'the_thing.yaml'
|
||||
},
|
||||
{
|
||||
'playbook': '/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
'extra_vars': {
|
||||
'growvols_args': '/var=50% /srv=50%'
|
||||
}
|
||||
},
|
||||
{
|
||||
'playbook': 'the_other_thing.yaml'
|
||||
},
|
||||
]
|
||||
}
|
||||
]
|
||||
utils.run_role_playbooks(self.cmd, self.work_dir, self.work_dir,
|
||||
roles, True)
|
||||
|
||||
self.assertEqual(5, mock_run.call_count)
|
||||
mock_run.assert_has_calls([
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Compute',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook=os.path.join(self.work_dir, 'the_thing.yaml'),
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir=self.work_dir,
|
||||
verbosity=0,
|
||||
limit_hosts='Controller',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-growvols.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts='Controller',
|
||||
extra_vars={'growvols_args': '/var=50% /srv=50%'}
|
||||
),
|
||||
mock.call(
|
||||
playbook=os.path.join(self.work_dir, 'the_other_thing.yaml'),
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir=self.work_dir,
|
||||
verbosity=0,
|
||||
limit_hosts='Controller',
|
||||
extra_vars={}
|
||||
),
|
||||
mock.call(
|
||||
playbook='/usr/share/ansible/tripleo-playbooks/'
|
||||
'cli-overcloud-node-network-config.yaml',
|
||||
inventory={},
|
||||
workdir=mock.ANY,
|
||||
playbook_dir='/usr/share/ansible/tripleo-playbooks',
|
||||
verbosity=0,
|
||||
limit_hosts=None,
|
||||
extra_vars={}
|
||||
)
|
||||
])
|
||||
|
||||
|
||||
class TestRunCommandAndLog(TestCase):
|
||||
def setUp(self):
|
||||
self.mock_logger = mock.Mock(spec=logging.Logger)
|
||||
|
|
|
@ -103,6 +103,14 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
|||
self.mock_playbook = playbook_runner.start()
|
||||
self.addCleanup(playbook_runner.stop)
|
||||
|
||||
# Mock role playbooks runner
|
||||
role_playbooks = mock.patch(
|
||||
'tripleoclient.utils.run_role_playbooks',
|
||||
autospec=True
|
||||
)
|
||||
self.mock_role_playbooks = role_playbooks.start()
|
||||
self.addCleanup(role_playbooks.stop)
|
||||
|
||||
# Mock horizon url return
|
||||
horizon_url = mock.patch(
|
||||
'tripleoclient.workflows.deployment.get_horizon_url',
|
||||
|
@ -1540,6 +1548,16 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
|||
workdir=mock.ANY
|
||||
)
|
||||
])
|
||||
self.mock_role_playbooks.assert_called_once_with(
|
||||
self.cmd,
|
||||
self.tmp_dir.join('working_dir'),
|
||||
self.tmp_dir.path,
|
||||
[
|
||||
{'count': 10, 'name': 'Compute'},
|
||||
{'count': 3, 'name': 'Controller'}
|
||||
],
|
||||
False
|
||||
)
|
||||
|
||||
def test__provision_networks(self):
|
||||
networks_file_path = self.tmp_dir.join('networks.yaml')
|
||||
|
|
|
@ -315,7 +315,9 @@ class TestProvisionNode(fakes.TestOvercloudNode):
|
|||
|
||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||
autospec=True)
|
||||
def test_ok(self, mock_playbook):
|
||||
@mock.patch('tripleoclient.utils.run_role_playbooks',
|
||||
autospec=True)
|
||||
def test_ok(self, mock_role_playbooks, mock_playbook):
|
||||
with tempfile.NamedTemporaryFile() as inp:
|
||||
with tempfile.NamedTemporaryFile() as outp:
|
||||
with tempfile.NamedTemporaryFile() as keyf:
|
||||
|
@ -362,6 +364,16 @@ class TestProvisionNode(fakes.TestOvercloudNode):
|
|||
verbosity=mock.ANY,
|
||||
workdir=mock.ANY
|
||||
)
|
||||
mock_role_playbooks.assert_called_once_with(
|
||||
self.cmd,
|
||||
mock.ANY,
|
||||
'/tmp',
|
||||
[
|
||||
{'name': 'Compute'},
|
||||
{'name': 'Controller'}
|
||||
],
|
||||
False
|
||||
)
|
||||
|
||||
|
||||
class TestUnprovisionNode(fakes.TestOvercloudNode):
|
||||
|
|
|
@ -2847,7 +2847,7 @@ def validate_roles_playbooks(roles_file_dir, roles):
|
|||
def run_role_playbook(self, inventory, relative_dir, playbook,
|
||||
limit_hosts=None, extra_vars=dict()):
|
||||
playbook_path = rel_or_abs_path_role_playbook(relative_dir, playbook)
|
||||
playbook_dir = os.path.basename(playbook_path)
|
||||
playbook_dir = os.path.dirname(playbook_path)
|
||||
|
||||
with TempDirs() as tmp:
|
||||
run_ansible_playbook(
|
||||
|
@ -2861,22 +2861,39 @@ def run_role_playbook(self, inventory, relative_dir, playbook,
|
|||
)
|
||||
|
||||
|
||||
def run_role_playbooks(self, working_dir, roles_file_dir, roles):
|
||||
def run_role_playbooks(self, working_dir, roles_file_dir, roles,
|
||||
network_config=True):
|
||||
inventory_file = os.path.join(working_dir,
|
||||
'tripleo-ansible-inventory.yaml')
|
||||
with open(inventory_file, 'r') as f:
|
||||
inventory = yaml.safe_load(f.read())
|
||||
|
||||
growvols_play = 'cli-overcloud-node-growvols.yaml'
|
||||
growvols_path = rel_or_abs_path_role_playbook(
|
||||
constants.ANSIBLE_TRIPLEO_PLAYBOOKS, growvols_play)
|
||||
|
||||
# Pre-Network Config
|
||||
for role in roles:
|
||||
role_playbooks = []
|
||||
|
||||
for x in role.get('ansible_playbooks', []):
|
||||
role_playbooks.append(x['playbook'])
|
||||
|
||||
run_role_playbook(self, inventory, roles_file_dir, x['playbook'],
|
||||
limit_hosts=role['name'],
|
||||
extra_vars=x.get('extra_vars', {}))
|
||||
|
||||
# Network Config
|
||||
run_role_playbook(self, inventory, constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||
'cli-overcloud-node-network-config.yaml')
|
||||
if growvols_path not in role_playbooks:
|
||||
# growvols was not run with custom extra_vars, run it with defaults
|
||||
run_role_playbook(self, inventory,
|
||||
constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||
growvols_play,
|
||||
limit_hosts=role['name'])
|
||||
|
||||
if network_config:
|
||||
# Network Config
|
||||
run_role_playbook(self, inventory, constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||
'cli-overcloud-node-network-config.yaml')
|
||||
|
||||
|
||||
def create_archive_dir(archive_dir=constants.TRIPLEO_ARCHIVE_DIR):
|
||||
|
|
|
@ -465,9 +465,8 @@ class DeployOvercloud(command.Command):
|
|||
verbosity=utils.playbook_verbosity(self=self),
|
||||
extra_vars=extra_vars,
|
||||
)
|
||||
if parsed_args.network_config:
|
||||
utils.run_role_playbooks(self, self.working_dir, roles_file_dir,
|
||||
roles)
|
||||
utils.run_role_playbooks(self, self.working_dir, roles_file_dir,
|
||||
roles, parsed_args.network_config)
|
||||
|
||||
return [output_path]
|
||||
|
||||
|
|
|
@ -337,10 +337,8 @@ class ProvisionNode(command.Command):
|
|||
verbosity=oooutils.playbook_verbosity(self=self),
|
||||
extra_vars=extra_vars,
|
||||
)
|
||||
|
||||
if parsed_args.network_config:
|
||||
oooutils.run_role_playbooks(self, working_dir, roles_file_dir,
|
||||
roles)
|
||||
oooutils.run_role_playbooks(self, working_dir, roles_file_dir,
|
||||
roles, parsed_args.network_config)
|
||||
|
||||
print('Nodes deployed successfully, add %s to your deployment '
|
||||
'environment' % parsed_args.output)
|
||||
|
|
Loading…
Reference in New Issue