Merge "Refactor network endpoint enablement checking"
This commit is contained in:
		| @@ -191,6 +191,26 @@ class ClientManager(object): | |||||||
|             self._auth_ref = self.auth.get_auth_ref(self.session) |             self._auth_ref = self.auth.get_auth_ref(self.session) | ||||||
|         return self._auth_ref |         return self._auth_ref | ||||||
|  |  | ||||||
|  |     def is_network_endpoint_enabled(self): | ||||||
|  |         """Check if the network endpoint is enabled""" | ||||||
|  |         # Trigger authentication necessary to determine if the network | ||||||
|  |         # endpoint is enabled. | ||||||
|  |         if self.auth_ref: | ||||||
|  |             service_catalog = self.auth_ref.service_catalog | ||||||
|  |         else: | ||||||
|  |             service_catalog = None | ||||||
|  |         # Assume that the network endpoint is enabled. | ||||||
|  |         network_endpoint_enabled = True | ||||||
|  |         if service_catalog: | ||||||
|  |             if 'network' in service_catalog.get_endpoints(): | ||||||
|  |                 LOG.debug("Network endpoint in service catalog") | ||||||
|  |             else: | ||||||
|  |                 LOG.debug("No network endpoint in service catalog") | ||||||
|  |                 network_endpoint_enabled = False | ||||||
|  |         else: | ||||||
|  |             LOG.debug("No service catalog, assuming network endpoint enabled") | ||||||
|  |         return network_endpoint_enabled | ||||||
|  |  | ||||||
|     def get_endpoint_for_service_type(self, service_type, region_name=None, |     def get_endpoint_for_service_type(self, service_type, region_name=None, | ||||||
|                                       interface='public'): |                                       interface='public'): | ||||||
|         """Return the endpoint URL for the service type.""" |         """Return the endpoint URL for the service type.""" | ||||||
|   | |||||||
| @@ -257,10 +257,6 @@ class CreateServer(show.ShowOne): | |||||||
|  |  | ||||||
|     log = logging.getLogger(__name__ + '.CreateServer') |     log = logging.getLogger(__name__ + '.CreateServer') | ||||||
|  |  | ||||||
|     def _is_neutron_enabled(self): |  | ||||||
|         service_catalog = self.app.client_manager.auth_ref.service_catalog |  | ||||||
|         return 'network' in service_catalog.get_endpoints() |  | ||||||
|  |  | ||||||
|     def get_parser(self, prog_name): |     def get_parser(self, prog_name): | ||||||
|         parser = super(CreateServer, self).get_parser(prog_name) |         parser = super(CreateServer, self).get_parser(prog_name) | ||||||
|         parser.add_argument( |         parser.add_argument( | ||||||
| @@ -460,8 +456,6 @@ class CreateServer(show.ShowOne): | |||||||
|                 block_device_mapping.update({dev_key: block_volume}) |                 block_device_mapping.update({dev_key: block_volume}) | ||||||
|  |  | ||||||
|         nics = [] |         nics = [] | ||||||
|         if parsed_args.nic: |  | ||||||
|             neutron_enabled = self._is_neutron_enabled() |  | ||||||
|         for nic_str in parsed_args.nic: |         for nic_str in parsed_args.nic: | ||||||
|             nic_info = {"net-id": "", "v4-fixed-ip": "", |             nic_info = {"net-id": "", "v4-fixed-ip": "", | ||||||
|                         "v6-fixed-ip": "", "port-id": ""} |                         "v6-fixed-ip": "", "port-id": ""} | ||||||
| @@ -471,7 +465,7 @@ class CreateServer(show.ShowOne): | |||||||
|                 msg = _("either net-id or port-id should be specified " |                 msg = _("either net-id or port-id should be specified " | ||||||
|                         "but not both") |                         "but not both") | ||||||
|                 raise exceptions.CommandError(msg) |                 raise exceptions.CommandError(msg) | ||||||
|             if neutron_enabled: |             if self.app.client_manager.is_network_endpoint_enabled(): | ||||||
|                 network_client = self.app.client_manager.network |                 network_client = self.app.client_manager.network | ||||||
|                 if nic_info["net-id"]: |                 if nic_info["net-id"]: | ||||||
|                     net = network_client.find_network( |                     net = network_client.find_network( | ||||||
| @@ -489,7 +483,7 @@ class CreateServer(show.ShowOne): | |||||||
|                     ).id |                     ).id | ||||||
|                 if nic_info["port-id"]: |                 if nic_info["port-id"]: | ||||||
|                     msg = _("can't create server with port specified " |                     msg = _("can't create server with port specified " | ||||||
|                             "since neutron not enabled") |                             "since network endpoint not enabled") | ||||||
|                     raise exceptions.CommandError(msg) |                     raise exceptions.CommandError(msg) | ||||||
|             nics.append(nic_info) |             nics.append(nic_info) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -77,6 +77,9 @@ class TestClientManager(utils.TestCase): | |||||||
|         self.requests = self.useFixture(fixture.Fixture()) |         self.requests = self.useFixture(fixture.Fixture()) | ||||||
|         # fake v2password token retrieval |         # fake v2password token retrieval | ||||||
|         self.stub_auth(json=fakes.TEST_RESPONSE_DICT) |         self.stub_auth(json=fakes.TEST_RESPONSE_DICT) | ||||||
|  |         # fake token and token_endpoint retrieval | ||||||
|  |         self.stub_auth(json=fakes.TEST_RESPONSE_DICT, | ||||||
|  |                        url='/'.join([fakes.AUTH_URL, 'v2.0/tokens'])) | ||||||
|         # fake v3password token retrieval |         # fake v3password token retrieval | ||||||
|         self.stub_auth(json=fakes.TEST_RESPONSE_DICT_V3, |         self.stub_auth(json=fakes.TEST_RESPONSE_DICT_V3, | ||||||
|                        url='/'.join([fakes.AUTH_URL, 'auth/tokens'])) |                        url='/'.join([fakes.AUTH_URL, 'auth/tokens'])) | ||||||
| @@ -99,6 +102,7 @@ class TestClientManager(utils.TestCase): | |||||||
|             verify=True |             verify=True | ||||||
|         ) |         ) | ||||||
|         client_manager.setup_auth() |         client_manager.setup_auth() | ||||||
|  |         client_manager.auth_ref | ||||||
|  |  | ||||||
|         self.assertEqual( |         self.assertEqual( | ||||||
|             fakes.AUTH_URL, |             fakes.AUTH_URL, | ||||||
| @@ -114,6 +118,7 @@ class TestClientManager(utils.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.assertFalse(client_manager._insecure) |         self.assertFalse(client_manager._insecure) | ||||||
|         self.assertTrue(client_manager._verify) |         self.assertTrue(client_manager._verify) | ||||||
|  |         self.assertTrue(client_manager.is_network_endpoint_enabled()) | ||||||
|  |  | ||||||
|     def test_client_manager_token(self): |     def test_client_manager_token(self): | ||||||
|  |  | ||||||
| @@ -131,6 +136,7 @@ class TestClientManager(utils.TestCase): | |||||||
|             verify=True |             verify=True | ||||||
|         ) |         ) | ||||||
|         client_manager.setup_auth() |         client_manager.setup_auth() | ||||||
|  |         client_manager.auth_ref | ||||||
|  |  | ||||||
|         self.assertEqual( |         self.assertEqual( | ||||||
|             fakes.AUTH_URL, |             fakes.AUTH_URL, | ||||||
| @@ -150,6 +156,7 @@ class TestClientManager(utils.TestCase): | |||||||
|         ) |         ) | ||||||
|         self.assertFalse(client_manager._insecure) |         self.assertFalse(client_manager._insecure) | ||||||
|         self.assertTrue(client_manager._verify) |         self.assertTrue(client_manager._verify) | ||||||
|  |         self.assertTrue(client_manager.is_network_endpoint_enabled()) | ||||||
|  |  | ||||||
|     def test_client_manager_password(self): |     def test_client_manager_password(self): | ||||||
|  |  | ||||||
| @@ -166,6 +173,7 @@ class TestClientManager(utils.TestCase): | |||||||
|             verify=False, |             verify=False, | ||||||
|         ) |         ) | ||||||
|         client_manager.setup_auth() |         client_manager.setup_auth() | ||||||
|  |         client_manager.auth_ref | ||||||
|  |  | ||||||
|         self.assertEqual( |         self.assertEqual( | ||||||
|             fakes.AUTH_URL, |             fakes.AUTH_URL, | ||||||
| @@ -195,6 +203,28 @@ class TestClientManager(utils.TestCase): | |||||||
|             dir(SERVICE_CATALOG), |             dir(SERVICE_CATALOG), | ||||||
|             dir(client_manager.auth_ref.service_catalog), |             dir(client_manager.auth_ref.service_catalog), | ||||||
|         ) |         ) | ||||||
|  |         self.assertTrue(client_manager.is_network_endpoint_enabled()) | ||||||
|  |  | ||||||
|  |     def test_client_manager_network_endpoint_disabled(self): | ||||||
|  |  | ||||||
|  |         client_manager = clientmanager.ClientManager( | ||||||
|  |             cli_options=FakeOptions( | ||||||
|  |                 auth=dict( | ||||||
|  |                     auth_url=fakes.AUTH_URL, | ||||||
|  |                     username=fakes.USERNAME, | ||||||
|  |                     password=fakes.PASSWORD, | ||||||
|  |                     project_name=fakes.PROJECT_NAME, | ||||||
|  |                 ), | ||||||
|  |                 auth_type='v3password', | ||||||
|  |             ), | ||||||
|  |             api_version={"identity": "3"}, | ||||||
|  |             verify=False, | ||||||
|  |         ) | ||||||
|  |         client_manager.setup_auth() | ||||||
|  |         client_manager.auth_ref | ||||||
|  |  | ||||||
|  |         # v3 fake doesn't have network endpoint. | ||||||
|  |         self.assertFalse(client_manager.is_network_endpoint_enabled()) | ||||||
|  |  | ||||||
|     def stub_auth(self, json=None, url=None, verb=None, **kwargs): |     def stub_auth(self, json=None, url=None, verb=None, **kwargs): | ||||||
|         subject_token = fakes.AUTH_TOKEN |         subject_token = fakes.AUTH_TOKEN | ||||||
| @@ -229,10 +259,12 @@ class TestClientManager(utils.TestCase): | |||||||
|             verify='cafile', |             verify='cafile', | ||||||
|         ) |         ) | ||||||
|         client_manager.setup_auth() |         client_manager.setup_auth() | ||||||
|  |         client_manager.auth_ref | ||||||
|  |  | ||||||
|         self.assertFalse(client_manager._insecure) |         self.assertFalse(client_manager._insecure) | ||||||
|         self.assertTrue(client_manager._verify) |         self.assertTrue(client_manager._verify) | ||||||
|         self.assertEqual('cafile', client_manager._cacert) |         self.assertEqual('cafile', client_manager._cacert) | ||||||
|  |         self.assertTrue(client_manager.is_network_endpoint_enabled()) | ||||||
|  |  | ||||||
|     def _select_auth_plugin(self, auth_params, api_version, auth_plugin_name): |     def _select_auth_plugin(self, auth_params, api_version, auth_plugin_name): | ||||||
|         auth_params['auth_type'] = auth_plugin_name |         auth_params['auth_type'] = auth_plugin_name | ||||||
| @@ -243,6 +275,7 @@ class TestClientManager(utils.TestCase): | |||||||
|             verify=True |             verify=True | ||||||
|         ) |         ) | ||||||
|         client_manager.setup_auth() |         client_manager.setup_auth() | ||||||
|  |         client_manager.auth_ref | ||||||
|  |  | ||||||
|         self.assertEqual( |         self.assertEqual( | ||||||
|             auth_plugin_name, |             auth_plugin_name, | ||||||
|   | |||||||
| @@ -34,7 +34,15 @@ VERSION = "3" | |||||||
| TEST_RESPONSE_DICT = fixture.V2Token(token_id=AUTH_TOKEN, | TEST_RESPONSE_DICT = fixture.V2Token(token_id=AUTH_TOKEN, | ||||||
|                                      user_name=USERNAME) |                                      user_name=USERNAME) | ||||||
| _s = TEST_RESPONSE_DICT.add_service('identity', name='keystone') | _s = TEST_RESPONSE_DICT.add_service('identity', name='keystone') | ||||||
| _s.add_endpoint(AUTH_URL + '/v2.0') | _s.add_endpoint(AUTH_URL + ':5000/v2.0') | ||||||
|  | _s = TEST_RESPONSE_DICT.add_service('network', name='neutron') | ||||||
|  | _s.add_endpoint(AUTH_URL + ':9696') | ||||||
|  | _s = TEST_RESPONSE_DICT.add_service('compute', name='nova') | ||||||
|  | _s.add_endpoint(AUTH_URL + ':8774/v2') | ||||||
|  | _s = TEST_RESPONSE_DICT.add_service('image', name='glance') | ||||||
|  | _s.add_endpoint(AUTH_URL + ':9292') | ||||||
|  | _s = TEST_RESPONSE_DICT.add_service('object', name='swift') | ||||||
|  | _s.add_endpoint(AUTH_URL + ':8080/v1') | ||||||
|  |  | ||||||
| TEST_RESPONSE_DICT_V3 = fixture.V3Token(user_name=USERNAME) | TEST_RESPONSE_DICT_V3 = fixture.V3Token(user_name=USERNAME) | ||||||
| TEST_RESPONSE_DICT_V3.set_project_scope() | TEST_RESPONSE_DICT_V3.set_project_scope() | ||||||
| @@ -103,6 +111,7 @@ class FakeClientManager(object): | |||||||
|         self.session = None |         self.session = None | ||||||
|         self.auth_ref = None |         self.auth_ref = None | ||||||
|         self.auth_plugin_name = None |         self.auth_plugin_name = None | ||||||
|  |         self.network_endpoint_enabled = True | ||||||
|  |  | ||||||
|     def get_configuration(self): |     def get_configuration(self): | ||||||
|         return { |         return { | ||||||
| @@ -115,6 +124,9 @@ class FakeClientManager(object): | |||||||
|             'identity_api_version': VERSION, |             'identity_api_version': VERSION, | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |     def is_network_endpoint_enabled(self): | ||||||
|  |         return self.network_endpoint_enabled | ||||||
|  |  | ||||||
|  |  | ||||||
| class FakeModule(object): | class FakeModule(object): | ||||||
|     def __init__(self, name, version): |     def __init__(self, name, version): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins