diff --git a/releasenotes/notes/os-cloud-config-b2acae54b4f0baf2.yaml b/releasenotes/notes/os-cloud-config-b2acae54b4f0baf2.yaml new file mode 100644 index 000000000..600a2b25c --- /dev/null +++ b/releasenotes/notes/os-cloud-config-b2acae54b4f0baf2.yaml @@ -0,0 +1,7 @@ +--- +other: + - | + Remove all usage of os-cloud-config. + Indeed, os-cloud-config has been deprecated in Ocata and is not useful anymore + from tripleoclient. Let's stop using it and remove all the code that used it, + including the tests. diff --git a/requirements.txt b/requirements.txt index 3c6f05f03..2b1b0019e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,6 @@ python-ironicclient>=1.11.0 # Apache-2.0 python-mistralclient>=2.0.0 # Apache-2.0 python-openstackclient>=3.3.0 # Apache-2.0 six>=1.9.0 # MIT -os-cloud-config # Apache-2.0 osc-lib>=1.2.0 # Apache-2.0 websocket-client>=0.32.0 # LGPLv2+ tripleo-common>=5.7.0 # Apache-2.0 diff --git a/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py b/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py index 9d8f46e32..881a1d36f 100644 --- a/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py +++ b/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py @@ -20,7 +20,6 @@ import tempfile import yaml from heatclient import exc as hc_exc -from keystoneclient import exceptions as kscexc import mock from osc_lib import exceptions as oscexc from swiftclient.exceptions import ClientException as ObjectClientException @@ -68,9 +67,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): @mock.patch('tripleoclient.utils.create_tempest_deployer_input', 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) @mock.patch('tripleoclient.utils.remove_known_hosts', autospec=True) @mock.patch('tripleoclient.utils.wait_for_stack_ready', autospec=True) @@ -85,8 +81,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): mock_check_hypervisor_stats, mock_get_template_contents, wait_for_stack_ready_mock, - mock_remove_known_hosts, mock_keystone_initialize, - mock_sleep, mock_setup_endpoints, + mock_remove_known_hosts, mock_write_overcloudrc, mock_create_tempest_deployer_input, mock_deploy_postconfig, @@ -181,13 +176,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): @mock.patch('tripleoclient.utils.create_tempest_deployer_input', 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', - 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) @mock.patch('tripleoclient.utils.remove_known_hosts', autospec=True) @mock.patch('tripleoclient.utils.wait_for_stack_ready', autospec=True) @@ -204,9 +192,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): mock_check_hypervisor_stats, mock_get_template_contents, wait_for_stack_ready_mock, - mock_remove_known_hosts, mock_keystone_initialize, - mock_sleep, mock_setup_endpoints, - mock_get_keystone_client, mock_get_nova_bm_client, + mock_remove_known_hosts, mock_write_overcloudrc, mock_create_tempest_deployer_input, mock_create_parameters_env, mock_validate_args, @@ -309,9 +295,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): @mock.patch('tripleoclient.utils.create_tempest_deployer_input', 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) @mock.patch('tripleoclient.utils.remove_known_hosts', autospec=True) @mock.patch('tripleoclient.utils.wait_for_stack_ready', autospec=True) @@ -325,8 +308,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): mock_get_template_contents, wait_for_stack_ready_mock, mock_remove_known_hosts, - mock_keystone_initialize, - mock_sleep, mock_setup_endpoints, mock_write_overcloudrc, mock_create_tempest_deployer_input, mock_deploy_postconfig, @@ -621,7 +602,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.cmd.take_action(parsed_args) self.assertTrue(mock_deploy_tht.called) - self.assertTrue(mock_oc_endpoint.called) self.assertTrue(mock_create_ocrc.called) mock_create_tempest_deployer_input.assert_called_with() @@ -636,9 +616,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): @mock.patch('tripleoclient.utils.create_tempest_deployer_input', 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) @mock.patch('tripleoclient.utils.remove_known_hosts', autospec=True) @mock.patch('tripleoclient.utils.wait_for_stack_ready', autospec=True) @@ -657,8 +634,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): mock_process_env, wait_for_stack_ready_mock, mock_remove_known_hosts, - mock_keystone_initialize, - mock_sleep, mock_setup_endpoints, mock_write_overcloudrc, mock_create_tempest_deployer_input, mock_deploy_postconfig, @@ -811,7 +786,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.cmd.take_action(parsed_args) self.assertFalse(mock_deploy_tht.called) - self.assertFalse(mock_oc_endpoint.called) self.assertFalse(mock_create_ocrc.called) self.assertFalse(mock_create_tempest_deployer_input.called) @@ -879,7 +853,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): self.cmd.take_action(parsed_args) self.assertTrue(mock_heat_deploy.called) - self.assertTrue(mock_oc_endpoint.called) self.assertTrue(mock_create_ocrc.called) self.assertTrue(mock_create_tempest_deployer_input.called) @@ -897,79 +870,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): mock_create_tempest_deployer_input.assert_called_with() - @mock.patch('tripleoclient.workflows.parameters.get_overcloud_passwords') - @mock.patch('tripleoclient.constants.SERVICE_LIST', - {'nova': {'password_field': 'NovaPassword'}}) - @mock.patch('os_cloud_config.keystone.initialize') - @mock.patch('os_cloud_config.utils.clients.get_keystone_client') - def test_keystone_init(self, mock_gkc, mock_init, mock_gp): - mock_gp.return_value = { - "AdminPassword": "password", - "AdminToken": "token", - "NovaPassword": "nova-password" - } - mock_ksc = mock.Mock() - mock_gkc.return_value = mock_ksc - mock_ksc.services.find.return_value = True - stack = mock.MagicMock() - stack.to_dict.return_value = fakes.FAKE_STACK - ip = '192.0.2.1' - - self.cmd._keystone_init(ip, ip, None, stack) - - self.assertFalse(mock_init.called) - - @mock.patch('tripleoclient.workflows.parameters.get_overcloud_passwords') - @mock.patch('tripleoclient.constants.SERVICE_LIST', - {'nova': {'password_field': 'NovaPassword'}}) - @mock.patch('os_cloud_config.keystone.setup_endpoints') - @mock.patch('os_cloud_config.keystone.initialize') - @mock.patch('os_cloud_config.utils.clients.get_keystone_client') - def test_keystone_init_occ(self, mock_gkc, mock_init, mock_se, mock_gp): - mock_gp.return_value = { - "AdminPassword": "password", - "AdminToken": "token", - "NovaPassword": "nova-password" - } - mock_ksc = mock.Mock() - mock_gkc.return_value = mock_ksc - mock_ksc.services.find.side_effect = kscexc.NotFound() - stack = mock.Mock() - stack.to_dict.return_value = fakes.FAKE_STACK - ip = '192.0.2.1' - args = mock.Mock() - - self.cmd._keystone_init(ip, ip, args, stack) - - self.assertTrue(mock_init.called) - - @mock.patch('tripleoclient.workflows.parameters.get_overcloud_passwords') - @mock.patch('tripleoclient.constants.SERVICE_LIST', - {'nova': {'password_field': 'NovaPassword'}, - 'unexistent': {'password_field': 'NovaPassword'}}) - @mock.patch('os_cloud_config.keystone.setup_endpoints') - @mock.patch('os_cloud_config.keystone.initialize') - @mock.patch('os_cloud_config.utils.clients.get_keystone_client') - def test_keystone_init_occ_w_entry_not_in_endpoint_map( - self, mock_gkc, mock_init, mock_se, mock_gp): - mock_gp.return_value = { - "AdminPassword": "password", - "AdminToken": "token", - "NovaPassword": "nova-password" - } - mock_ksc = mock.Mock() - mock_gkc.return_value = mock_ksc - mock_ksc.services.find.side_effect = kscexc.NotFound() - stack = mock.Mock() - stack.to_dict.return_value = fakes.FAKE_STACK - ip = '192.0.2.1' - args = mock.Mock() - - self.cmd._keystone_init(ip, ip, args, stack) - - self.assertTrue(mock_init.called) - self.assertEqual(mock_gp.call_count, 1) - @mock.patch('tripleoclient.utils.check_nodes_count') @mock.patch('tripleoclient.utils.check_hypervisor_stats') @mock.patch('tripleoclient.utils.assign_and_verify_profiles') @@ -1097,13 +997,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): @mock.patch('tripleoclient.utils.create_tempest_deployer_input', autospec=True) @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', - 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) @mock.patch('tripleoclient.utils.remove_known_hosts', autospec=True) @mock.patch('tripleoclient.utils.wait_for_stack_ready', autospec=True) @@ -1123,10 +1016,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): mock_process_env, wait_for_stack_ready_mock, mock_remove_known_hosts, - mock_keystone_initialize, - mock_sleep, mock_setup_endpoints, - mock_get_keystone_client, - mock_get_nova_bm_client, mock_write_overcloudrc, mock_create_tempest_deployer_input, mock_create_parameters_env, diff --git a/tripleoclient/v1/overcloud_deploy.py b/tripleoclient/v1/overcloud_deploy.py index fe3f63d42..8f24af72c 100644 --- a/tripleoclient/v1/overcloud_deploy.py +++ b/tripleoclient/v1/overcloud_deploy.py @@ -29,7 +29,6 @@ import yaml from heatclient.common import template_utils from heatclient import exc as hc_exc -from keystoneclient import exceptions as kscexc from osc_lib.command import command from osc_lib import exceptions as oscexc from osc_lib.i18n import _ @@ -45,13 +44,6 @@ from tripleoclient.workflows import parameters as workflow_params from tripleoclient.workflows import plan_management -level = logging.getLogger('os_cloud_config').getEffectiveLevel() -logging.getLogger('os_cloud_config').setLevel(logging.ERROR) -from os_cloud_config import keystone -from os_cloud_config.utils import clients as occ_clients -logging.getLogger('os_cloud_config').setLevel(level) - - class DeployOvercloud(command.Command): """Deploy Overcloud""" @@ -476,89 +468,6 @@ class DeployOvercloud(command.Command): return self._password_cache[password_name] - def _keystone_init(self, overcloud_endpoint, overcloud_ip_or_fqdn, - parsed_args, stack): - keystone_admin_ip = utils.get_endpoint('KeystoneAdmin', stack) - keystone_admin_ip = utils.unbracket_ipv6(keystone_admin_ip) - keystone_internal_ip = utils.get_endpoint('KeystoneInternal', stack) - keystone_internal_ip = utils.unbracket_ipv6(keystone_internal_ip) - tls_enabled = self._is_tls_enabled(overcloud_endpoint) - keystone_tls_host = None - if tls_enabled: - # NOTE(jaosorior): This triggers set up the keystone endpoint with - # the https protocol and the required port set in - # keystone.initialize. - keystone_tls_host = overcloud_ip_or_fqdn - - keystone_client = occ_clients.get_keystone_client( - 'admin', - self._get_password(stack.stack_name, "AdminPassword"), - 'admin', - overcloud_endpoint) - - services = {} - for service, data in six.iteritems(constants.SERVICE_LIST): - try: - keystone_client.services.find(name=service) - except kscexc.NotFound: - service_data = self._set_service_data(service, data, stack) - if service_data: - services.update({service: service_data}) - - if services: - # This was deprecated in Newton. The deprecation message and - # os-cloud-config keystone init should remain until at least the - # Pike release to ensure users have a chance to update their - # templates, including ones for the previous release. - self.log.warning('DEPRECATED: ' - 'It appears Keystone was not initialized by ' - 'Puppet. Will do initialization via ' - 'os-cloud-config, but this behavior is ' - 'deprecated. Please update your templates to a ' - 'version that has Puppet initialization of ' - 'Keystone.' - ) - # NOTE(jaosorior): These ports will be None if the templates - # don't support the EndpointMap as an output yet. And so the - # default values will be taken. - public_port = None - admin_port = None - internal_port = None - endpoint_map = utils.get_endpoint_map(stack) - if endpoint_map: - public_port = endpoint_map.get('KeystonePublic').get('port') - admin_port = endpoint_map.get('KeystoneAdmin').get('port') - internal_port = endpoint_map.get( - 'KeystoneInternal').get('port') - - # TODO(rbrady): check usages of get_password - keystone.initialize( - keystone_admin_ip, - self._get_password(stack.stack_name, "AdminToken"), - 'admin@example.com', - self._get_password(stack.stack_name, "AdminPassword"), - ssl=keystone_tls_host, - public=overcloud_ip_or_fqdn, - user=parsed_args.overcloud_ssh_user, - admin=keystone_admin_ip, - internal=keystone_internal_ip, - public_port=public_port, - admin_port=admin_port, - internal_port=internal_port) - - if not tls_enabled: - # NOTE(bcrochet): Bad hack. Remove the ssl_port info from the - # os_cloud_config.SERVICES dictionary - for service_name, data in keystone.SERVICES.items(): - data.pop('ssl_port', None) - - keystone.setup_endpoints( - services, - client=keystone_client, - os_auth_url=overcloud_endpoint, - public_host=overcloud_ip_or_fqdn) - # End of deprecated Keystone init - def _set_service_data(self, service, data, stack): self.log.debug("Setting data for service '%s'" % service) service_data = data.copy() @@ -616,14 +525,6 @@ class DeployOvercloud(command.Command): return re.sub('v[0-9]+', '', service.capitalize() + interface.capitalize()) - def _endpoints_managed(self, stack): - for output in stack.to_dict().get('outputs', {}): - if output['output_key'] == 'ManagedEndpoints': - # NOTE(jaosorior): We don't really care about the value as - # long as the key is there. - return output['output_value'] - return False - def _deploy_postconfig(self, stack, parsed_args): self.log.debug("_deploy_postconfig(%s)" % parsed_args) @@ -645,13 +546,6 @@ class DeployOvercloud(command.Command): utils.remove_known_hosts(overcloud_ip_or_fqdn) - if not self._endpoints_managed(stack): - self._keystone_init(overcloud_endpoint, overcloud_ip_or_fqdn, - parsed_args, stack) - else: - self.log.debug("Keystone endpoints and services are managed by " - "puppet. Skipping post-config.") - def _validate_args(self, parsed_args): if parsed_args.templates is None and parsed_args.answers_file is None: raise oscexc.CommandError(