Use the overcloudrc generated in a Mistral action
This removes the code responsible for creating the action in tripleoclient and replaces it with a call to a Mistral action. Closes-Bug: #1615720 Change-Id: I33627cd3661193c0e7ac7fab174cfcbac6c8ab43
This commit is contained in:
parent
1082fdb518
commit
3c8223cd5e
@ -22,8 +22,6 @@ from unittest import TestCase
|
||||
import yaml
|
||||
|
||||
from tripleoclient import exceptions
|
||||
from tripleoclient.tests.v1.utils import (
|
||||
generate_overcloud_passwords_mock)
|
||||
from tripleoclient import utils
|
||||
|
||||
|
||||
@ -377,41 +375,25 @@ class TestEnsureRunAsNormalUser(TestCase):
|
||||
|
||||
class TestCreateOvercloudRC(TestCase):
|
||||
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords',
|
||||
new=generate_overcloud_passwords_mock)
|
||||
def test_create_overcloudrc(self):
|
||||
stack = mock.MagicMock()
|
||||
stack.stack_name = 'teststack'
|
||||
endpoint_map = {'KeystoneAdmin': {'host': 'fd00::1'}}
|
||||
stack.to_dict.return_value = {
|
||||
'outputs': [{'output_key': 'KeystoneURL',
|
||||
'output_value': 'http://foo.com:8000/'},
|
||||
{'output_key': 'EndpointMap',
|
||||
'output_value': endpoint_map}]
|
||||
}
|
||||
def test_write_overcloudrc(self):
|
||||
stack_name = 'teststack'
|
||||
|
||||
tempdir = tempfile.mkdtemp()
|
||||
rcfile = os.path.join(tempdir, 'teststackrc')
|
||||
rcfile_v3 = os.path.join(tempdir, 'teststackrc.v3')
|
||||
mock_clients = mock.Mock()
|
||||
|
||||
overcloudrcs = {
|
||||
"overcloudrc": "overcloudrc not v3",
|
||||
"overcloudrc.v3": "overcloudrc.v3",
|
||||
}
|
||||
|
||||
try:
|
||||
utils.create_overcloudrc(clients=mock_clients,
|
||||
stack=stack,
|
||||
no_proxy='127.0.0.1',
|
||||
config_directory=tempdir)
|
||||
utils.write_overcloudrc(stack_name, overcloudrcs,
|
||||
config_directory=tempdir)
|
||||
rc = open(rcfile, 'rt').read()
|
||||
self.assertIn('export OS_AUTH_URL=http://foo.com:8000/', rc)
|
||||
self.assertIn('export no_proxy=127.0.0.1,foo.com,[fd00::1]',
|
||||
rc)
|
||||
self.assertIn('export OS_CLOUDNAME=teststack', rc)
|
||||
self.assertIn('export PYTHONWARNINGS="ignore:Certificate has no, '
|
||||
'ignore:A true SSLContext object is not available"',
|
||||
rc)
|
||||
self.assertIn('overcloudrc not v3', rc)
|
||||
rc_v3 = open(rcfile_v3, 'rt').read()
|
||||
self.assertIn('export OS_USER_DOMAIN_NAME=Default', rc_v3)
|
||||
self.assertIn('export OS_PROJECT_DOMAIN_NAME=Default', rc_v3)
|
||||
self.assertIn('export OS_IDENTITY_API_VERSION=3', rc_v3)
|
||||
self.assertIn('overcloudrc.v3', rc_v3)
|
||||
finally:
|
||||
if os.path.exists(rcfile):
|
||||
os.unlink(rcfile)
|
||||
|
@ -73,7 +73,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('os_cloud_config.keystone.setup_endpoints', autospec=True)
|
||||
@mock.patch('time.sleep', return_value=None)
|
||||
@mock.patch('os_cloud_config.keystone.initialize', autospec=True)
|
||||
@ -101,7 +101,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
wait_for_stack_ready_mock,
|
||||
mock_remove_known_hosts, mock_keystone_initialize,
|
||||
mock_sleep, mock_setup_endpoints,
|
||||
mock_create_overcloudrc,
|
||||
mock_write_overcloudrc,
|
||||
mock_generate_overcloud_passwords,
|
||||
mock_create_tempest_deployer_input,
|
||||
mock_deploy_postconfig,
|
||||
@ -236,7 +236,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('os_cloud_config.utils.clients.get_nova_bm_client',
|
||||
autospec=True)
|
||||
@mock.patch('os_cloud_config.utils.clients.get_keystone_client',
|
||||
@ -273,7 +273,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
mock_remove_known_hosts, mock_keystone_initialize,
|
||||
mock_sleep, mock_setup_endpoints,
|
||||
mock_get_keystone_client, mock_get_nova_bm_client,
|
||||
mock_create_overcloudrc,
|
||||
mock_write_overcloudrc,
|
||||
mock_generate_overcloud_passwords,
|
||||
mock_create_tempest_deployer_input,
|
||||
mock_create_parameters_env, mock_validate_args,
|
||||
@ -419,7 +419,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('os_cloud_config.keystone.setup_endpoints', autospec=True)
|
||||
@mock.patch('time.sleep', return_value=None)
|
||||
@mock.patch('os_cloud_config.keystone.initialize', autospec=True)
|
||||
@ -445,7 +445,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
mock_remove_known_hosts,
|
||||
mock_keystone_initialize,
|
||||
mock_sleep, mock_setup_endpoints,
|
||||
mock_create_overcloudrc,
|
||||
mock_write_overcloudrc,
|
||||
mock_generate_overcloud_passwords,
|
||||
mock_create_tempest_deployer_input,
|
||||
mock_deploy_postconfig,
|
||||
@ -544,7 +544,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.check_nodes_count', autospec=True)
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
@ -601,7 +601,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.check_nodes_count', autospec=True)
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
@ -657,7 +657,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.check_nodes_count', autospec=True)
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
@ -713,7 +713,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True)
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
'_deploy_tripleo_heat_templates', autospec=True)
|
||||
@ -723,6 +723,11 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
mock_create_ocrc,
|
||||
mock_create_tempest_deployer_input):
|
||||
|
||||
clients = self.app.client_manager
|
||||
workflow_client = clients.workflow_engine
|
||||
workflow_client.action_executions.create.return_value = mock.MagicMock(
|
||||
output='{"result":[]}')
|
||||
|
||||
arglist = ['--templates', '--rhel-reg',
|
||||
'--reg-sat-url', 'https://example.com',
|
||||
'--reg-method', 'satellite', '--reg-org', '123456789',
|
||||
@ -755,7 +760,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('os_cloud_config.keystone.setup_endpoints', autospec=True)
|
||||
@mock.patch('time.sleep', return_value=None)
|
||||
@mock.patch('os_cloud_config.keystone.initialize', autospec=True)
|
||||
@ -786,7 +791,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
mock_remove_known_hosts,
|
||||
mock_keystone_initialize,
|
||||
mock_sleep, mock_setup_endpoints,
|
||||
mock_create_overcloudrc,
|
||||
mock_write_overcloudrc,
|
||||
mock_generate_overcloud_passwords,
|
||||
mock_create_tempest_deployer_input,
|
||||
mock_deploy_postconfig,
|
||||
@ -923,7 +928,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True)
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
'_deploy_tripleo_heat_templates', autospec=True)
|
||||
@ -951,7 +956,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True)
|
||||
@mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True)
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
'_heat_deploy', autospec=True)
|
||||
@ -1156,7 +1161,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
|
||||
'_create_parameters_env')
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords')
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc')
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc')
|
||||
@mock.patch('heatclient.common.template_utils.'
|
||||
'process_environment_and_files', autospec=True)
|
||||
@mock.patch('heatclient.common.template_utils.get_template_contents',
|
||||
@ -1170,7 +1175,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
mock_create_env,
|
||||
mock_get_template_contents,
|
||||
mock_process_env,
|
||||
mock_create_overcloudrc,
|
||||
mock_write_overcloudrc,
|
||||
mock_generate_overcloud_passwords,
|
||||
mock_create_parameters_env,
|
||||
mock_tarball):
|
||||
@ -1221,7 +1226,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
@mock.patch('tripleoclient.utils.create_tempest_deployer_input',
|
||||
autospec=True)
|
||||
@mock.patch('tripleoclient.utils.generate_overcloud_passwords')
|
||||
@mock.patch('tripleoclient.utils.create_overcloudrc')
|
||||
@mock.patch('tripleoclient.utils.write_overcloudrc')
|
||||
@mock.patch('os_cloud_config.utils.clients.get_nova_bm_client',
|
||||
autospec=True)
|
||||
@mock.patch('os_cloud_config.utils.clients.get_keystone_client',
|
||||
@ -1261,7 +1266,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
|
||||
mock_sleep, mock_setup_endpoints,
|
||||
mock_get_keystone_client,
|
||||
mock_get_nova_bm_client,
|
||||
mock_create_overcloudrc,
|
||||
mock_write_overcloudrc,
|
||||
mock_generate_overcloud_passwords,
|
||||
mock_create_tempest_deployer_input,
|
||||
mock_create_parameters_env,
|
||||
|
@ -35,7 +35,6 @@ from heatclient.exc import HTTPNotFound
|
||||
from osc_lib.i18n import _
|
||||
from osc_lib.i18n import _LI
|
||||
from six.moves import configparser
|
||||
from six.moves import urllib
|
||||
|
||||
from tripleoclient import exceptions
|
||||
from tripleoclient.workflows import parameters
|
||||
@ -81,62 +80,17 @@ def unbracket_ipv6(address):
|
||||
return address
|
||||
|
||||
|
||||
def create_overcloudrc(clients, stack, no_proxy, config_directory='.'):
|
||||
"""Given proxy settings and stack, create the overcloudrc
|
||||
def write_overcloudrc(stack_name, overcloudrcs, config_directory='.'):
|
||||
"""Write the overcloudrc files"""
|
||||
|
||||
stack: Heat stack containing the deployed overcloud
|
||||
no_proxy: a comma-separated string of hosts that shouldn't be proxied
|
||||
"""
|
||||
overcloud_endpoint = get_overcloud_endpoint(stack)
|
||||
overcloud_host = urllib.parse.urlparse(overcloud_endpoint).hostname
|
||||
overcloud_admin_vip = get_endpoint('KeystoneAdmin', stack)
|
||||
rcpath = os.path.join(config_directory, '%src' % stack_name)
|
||||
rcv3path = os.path.join(config_directory, '%src.v3' % stack_name)
|
||||
|
||||
no_proxy_list = map(bracket_ipv6,
|
||||
[no_proxy, overcloud_host, overcloud_admin_vip])
|
||||
with open(rcpath, 'w') as rcfile:
|
||||
rcfile.write(overcloudrcs['overcloudrc'])
|
||||
|
||||
rc_params = {
|
||||
'NOVA_VERSION': '1.1',
|
||||
'COMPUTE_API_VERSION': '1.1',
|
||||
'OS_USERNAME': 'admin',
|
||||
'OS_PROJECT_NAME': 'admin',
|
||||
'OS_NO_CACHE': 'True',
|
||||
'OS_CLOUDNAME': stack.stack_name,
|
||||
'no_proxy': ','.join(no_proxy_list),
|
||||
'PYTHONWARNINGS': ('"ignore:Certificate has no, ignore:A true '
|
||||
'SSLContext object is not available"'),
|
||||
}
|
||||
rc_params.update({
|
||||
'OS_PASSWORD': get_password(clients, stack.stack_name,
|
||||
'AdminPassword'),
|
||||
'OS_AUTH_URL': overcloud_endpoint,
|
||||
})
|
||||
|
||||
config_path = os.path.join(config_directory, '%src' % stack.stack_name)
|
||||
|
||||
with open(config_path, 'w') as f:
|
||||
f.write("# Clear any old environment that may conflict.\n")
|
||||
f.write("for key in $( set | awk '{FS=\"=\"} /^OS_/ {print $1}' );"
|
||||
"do unset $key ; done\n")
|
||||
for key, value in rc_params.items():
|
||||
f.write("export %(key)s=%(value)s\n" %
|
||||
{'key': key, 'value': value})
|
||||
|
||||
rc_params.update({
|
||||
'OS_AUTH_URL': overcloud_endpoint.replace('/v2.0', '') + '/v3',
|
||||
'OS_USER_DOMAIN_NAME': 'Default',
|
||||
'OS_PROJECT_DOMAIN_NAME': 'Default',
|
||||
'OS_IDENTITY_API_VERSION': '3'
|
||||
})
|
||||
|
||||
config_path = os.path.join(config_directory, '%src.v3' % stack.stack_name)
|
||||
|
||||
with open(config_path, 'w') as f:
|
||||
f.write("# Clear any old environment that may conflict.\n")
|
||||
f.write("for key in $( set | awk '{FS=\"=\"} /^OS_/ {print $1}' );"
|
||||
"do unset $key ; done\n")
|
||||
for key, value in rc_params.items():
|
||||
f.write("export %(key)s=%(value)s\n" %
|
||||
{'key': key, 'value': value})
|
||||
with open(rcv3path, 'w') as rcv3file:
|
||||
rcv3file.write(overcloudrcs['overcloudrc.v3'])
|
||||
|
||||
|
||||
def create_tempest_deployer_input(config_name='tempest-deployer-input.conf'):
|
||||
|
@ -1123,7 +1123,11 @@ class DeployOvercloud(command.Command):
|
||||
# Force fetching of attributes
|
||||
stack.get()
|
||||
|
||||
utils.create_overcloudrc(clients, stack, parsed_args.no_proxy)
|
||||
overcloudrcs = deployment.overcloudrc(
|
||||
clients.workflow_engine, container=stack.stack_name,
|
||||
no_proxy=parsed_args.no_proxy)
|
||||
|
||||
utils.write_overcloudrc(stack.stack_name, overcloudrcs)
|
||||
utils.create_tempest_deployer_input()
|
||||
|
||||
# Run postconfig on create or force. Use force to makes sure endpoints
|
||||
|
@ -83,3 +83,8 @@ def deploy_and_wait(log, clients, stack, plan_name, verbose_level,
|
||||
raise exceptions.DeploymentError("Heat Stack create failed.")
|
||||
else:
|
||||
raise exceptions.DeploymentError("Heat Stack update failed.")
|
||||
|
||||
|
||||
def overcloudrc(workflow_client, **input_):
|
||||
return base.call_action(workflow_client, 'tripleo.deployment.overcloudrc',
|
||||
**input_)
|
||||
|
Loading…
x
Reference in New Issue
Block a user