Add --overcloud-ssh-network
In some cases, we may not want to always assume the ctlplane as the network to use for both ssh access to the overcloud nodes, and for generating the ansible inventory. This patches adds a new cli argument, --overcloud-ssh-network that can be used to set the network name to be used. Defaults to ctlplane. Depends-On: I1e3f9a5142bff5e4f77e5e40df164089d9144652 Change-Id: I767984623c7d2402b10bae3d30b695783166f6bf
This commit is contained in:
parent
4ad7dff959
commit
a1c01dfc7a
@ -85,3 +85,25 @@ class TestDeploymentWorkflows(utils.TestCommand):
|
||||
# tmpdir should be cleaned up
|
||||
self.assertEqual(1, mock_rmtree.call_count)
|
||||
self.assertEqual('/foo', mock_rmtree.call_args[0][0])
|
||||
|
||||
@mock.patch('tripleoclient.utils.get_role_net_ip_map')
|
||||
def test_get_overcloud_hosts(self, mock_role_net_ip_map):
|
||||
stack = mock.Mock()
|
||||
mock_role_net_ip_map.return_value = {
|
||||
'Controller': {
|
||||
'ctlplane': ['1.1.1.1', '2.2.2.2', '3.3.3.3'],
|
||||
'external': ['4.4.4.4', '5.5.5.5', '6.6.6.6']},
|
||||
'Compute': {
|
||||
'ctlplane': ['7.7.7.7', '8.8.8.8', '9.9.9.9'],
|
||||
'external': ['10.10.10.10', '11.11.11.11', '12.12.12.12']},
|
||||
}
|
||||
|
||||
ips = deployment.get_overcloud_hosts(stack, 'ctlplane')
|
||||
expected = ['1.1.1.1', '2.2.2.2', '3.3.3.3',
|
||||
'7.7.7.7', '8.8.8.8', '9.9.9.9']
|
||||
self.assertEqual(sorted(expected), sorted(ips))
|
||||
|
||||
ips = deployment.get_overcloud_hosts(stack, 'external')
|
||||
expected = ['4.4.4.4', '5.5.5.5', '6.6.6.6',
|
||||
'10.10.10.10', '11.11.11.11', '12.12.12.12']
|
||||
self.assertEqual(sorted(expected), sorted(ips))
|
||||
|
@ -378,6 +378,12 @@ def get_role_net_hostname_map(stack):
|
||||
return output['output_value']
|
||||
|
||||
|
||||
def get_role_net_ip_map(stack):
|
||||
for output in stack.to_dict().get('outputs', {}):
|
||||
if output['output_key'] == 'RoleNetIpMap':
|
||||
return output['output_value']
|
||||
|
||||
|
||||
def get_hosts_entry(stack):
|
||||
for output in stack.to_dict().get('outputs', {}):
|
||||
if output['output_key'] == 'HostsEntry':
|
||||
|
@ -633,6 +633,11 @@ class DeployOvercloud(command.Command):
|
||||
os.path.expanduser('~'), '.ssh', 'id_rsa'),
|
||||
help=_('Key path for ssh access to overcloud nodes.')
|
||||
)
|
||||
parser.add_argument(
|
||||
'--overcloud-ssh-network',
|
||||
help=_('Network name to use for ssh access to overcloud nodes.'),
|
||||
default='ctlplane'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--environment-file', '-e', metavar='<HEAT ENVIRONMENT FILE>',
|
||||
action='append', dest='environment_files',
|
||||
@ -906,7 +911,8 @@ class DeployOvercloud(command.Command):
|
||||
if parsed_args.config_download:
|
||||
print("Deploying overcloud configuration")
|
||||
|
||||
hosts = deployment.get_overcloud_hosts(self.clients, stack)
|
||||
hosts = deployment.get_overcloud_hosts(
|
||||
stack, parsed_args.overcloud_ssh_network)
|
||||
deployment.enable_ssh_admin(self.log, self.clients,
|
||||
hosts,
|
||||
parsed_args.overcloud_ssh_user,
|
||||
@ -915,6 +921,7 @@ class DeployOvercloud(command.Command):
|
||||
parsed_args.templates,
|
||||
parsed_args.overcloud_ssh_user,
|
||||
parsed_args.overcloud_ssh_key,
|
||||
parsed_args.overcloud_ssh_network,
|
||||
parsed_args.output_dir,
|
||||
verbosity=self.app_args.verbose_level)
|
||||
|
||||
|
@ -13,7 +13,6 @@ from __future__ import print_function
|
||||
|
||||
import os
|
||||
import pprint
|
||||
import re
|
||||
import shutil
|
||||
import socket
|
||||
import subprocess
|
||||
@ -109,21 +108,13 @@ def overcloudrc(workflow_client, **input_):
|
||||
**input_)
|
||||
|
||||
|
||||
def get_overcloud_hosts(clients, stack):
|
||||
role_net_hostname_map = utils.get_role_net_hostname_map(stack)
|
||||
hostnames = []
|
||||
for role in role_net_hostname_map:
|
||||
hostnames.extend(role_net_hostname_map[role].get('ctlplane', []))
|
||||
def get_overcloud_hosts(stack, ssh_network):
|
||||
ips = []
|
||||
role_net_ip_map = utils.get_role_net_ip_map(stack)
|
||||
for net_ip_map in role_net_ip_map.values():
|
||||
ips.extend(net_ip_map.get(ssh_network, []))
|
||||
|
||||
hosts = []
|
||||
hosts_entry = utils.get_hosts_entry(stack)
|
||||
for hostname in hostnames:
|
||||
for line in hosts_entry.split('\n'):
|
||||
match = re.search('\s*%s\s*' % hostname, line)
|
||||
if match:
|
||||
hosts.append(line.split(' ')[0])
|
||||
|
||||
return hosts
|
||||
return ips
|
||||
|
||||
|
||||
def wait_for_ssh_port(host):
|
||||
@ -231,13 +222,14 @@ def enable_ssh_admin(log, clients, hosts, ssh_user, ssh_key):
|
||||
|
||||
|
||||
def config_download(log, clients, stack, templates,
|
||||
ssh_user, ssh_key, output_dir, verbosity=1):
|
||||
ssh_user, ssh_key, ssh_network, output_dir, verbosity=1):
|
||||
workflow_client = clients.workflow_engine
|
||||
tripleoclients = clients.tripleoclient
|
||||
|
||||
workflow_input = {
|
||||
'verbosity': verbosity or 1,
|
||||
'plan_name': stack.stack_name
|
||||
'plan_name': stack.stack_name,
|
||||
'ssh_network': ssh_network
|
||||
}
|
||||
if output_dir:
|
||||
workflow_input.update(dict(work_dir=output_dir))
|
||||
|
Loading…
Reference in New Issue
Block a user