Skip to content

Commit fa3077d

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Refactor network endpoint enablement checking"
2 parents bd1adaf + 57dac0b commit fa3077d

4 files changed

Lines changed: 68 additions & 9 deletions

File tree

openstackclient/common/clientmanager.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,26 @@ def auth_ref(self):
191191
self._auth_ref = self.auth.get_auth_ref(self.session)
192192
return self._auth_ref
193193

194+
def is_network_endpoint_enabled(self):
195+
"""Check if the network endpoint is enabled"""
196+
# Trigger authentication necessary to determine if the network
197+
# endpoint is enabled.
198+
if self.auth_ref:
199+
service_catalog = self.auth_ref.service_catalog
200+
else:
201+
service_catalog = None
202+
# Assume that the network endpoint is enabled.
203+
network_endpoint_enabled = True
204+
if service_catalog:
205+
if 'network' in service_catalog.get_endpoints():
206+
LOG.debug("Network endpoint in service catalog")
207+
else:
208+
LOG.debug("No network endpoint in service catalog")
209+
network_endpoint_enabled = False
210+
else:
211+
LOG.debug("No service catalog, assuming network endpoint enabled")
212+
return network_endpoint_enabled
213+
194214
def get_endpoint_for_service_type(self, service_type, region_name=None,
195215
interface='public'):
196216
"""Return the endpoint URL for the service type."""

openstackclient/compute/v2/server.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -257,10 +257,6 @@ class CreateServer(show.ShowOne):
257257

258258
log = logging.getLogger(__name__ + '.CreateServer')
259259

260-
def _is_neutron_enabled(self):
261-
service_catalog = self.app.client_manager.auth_ref.service_catalog
262-
return 'network' in service_catalog.get_endpoints()
263-
264260
def get_parser(self, prog_name):
265261
parser = super(CreateServer, self).get_parser(prog_name)
266262
parser.add_argument(
@@ -460,8 +456,6 @@ def take_action(self, parsed_args):
460456
block_device_mapping.update({dev_key: block_volume})
461457

462458
nics = []
463-
if parsed_args.nic:
464-
neutron_enabled = self._is_neutron_enabled()
465459
for nic_str in parsed_args.nic:
466460
nic_info = {"net-id": "", "v4-fixed-ip": "",
467461
"v6-fixed-ip": "", "port-id": ""}
@@ -471,7 +465,7 @@ def take_action(self, parsed_args):
471465
msg = _("either net-id or port-id should be specified "
472466
"but not both")
473467
raise exceptions.CommandError(msg)
474-
if neutron_enabled:
468+
if self.app.client_manager.is_network_endpoint_enabled():
475469
network_client = self.app.client_manager.network
476470
if nic_info["net-id"]:
477471
net = network_client.find_network(
@@ -489,7 +483,7 @@ def take_action(self, parsed_args):
489483
).id
490484
if nic_info["port-id"]:
491485
msg = _("can't create server with port specified "
492-
"since neutron not enabled")
486+
"since network endpoint not enabled")
493487
raise exceptions.CommandError(msg)
494488
nics.append(nic_info)
495489

openstackclient/tests/common/test_clientmanager.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ def setUp(self):
7777
self.requests = self.useFixture(fixture.Fixture())
7878
# fake v2password token retrieval
7979
self.stub_auth(json=fakes.TEST_RESPONSE_DICT)
80+
# fake token and token_endpoint retrieval
81+
self.stub_auth(json=fakes.TEST_RESPONSE_DICT,
82+
url='/'.join([fakes.AUTH_URL, 'v2.0/tokens']))
8083
# fake v3password token retrieval
8184
self.stub_auth(json=fakes.TEST_RESPONSE_DICT_V3,
8285
url='/'.join([fakes.AUTH_URL, 'auth/tokens']))
@@ -99,6 +102,7 @@ def test_client_manager_token_endpoint(self):
99102
verify=True
100103
)
101104
client_manager.setup_auth()
105+
client_manager.auth_ref
102106

103107
self.assertEqual(
104108
fakes.AUTH_URL,
@@ -114,6 +118,7 @@ def test_client_manager_token_endpoint(self):
114118
)
115119
self.assertFalse(client_manager._insecure)
116120
self.assertTrue(client_manager._verify)
121+
self.assertTrue(client_manager.is_network_endpoint_enabled())
117122

118123
def test_client_manager_token(self):
119124

@@ -131,6 +136,7 @@ def test_client_manager_token(self):
131136
verify=True
132137
)
133138
client_manager.setup_auth()
139+
client_manager.auth_ref
134140

135141
self.assertEqual(
136142
fakes.AUTH_URL,
@@ -150,6 +156,7 @@ def test_client_manager_token(self):
150156
)
151157
self.assertFalse(client_manager._insecure)
152158
self.assertTrue(client_manager._verify)
159+
self.assertTrue(client_manager.is_network_endpoint_enabled())
153160

154161
def test_client_manager_password(self):
155162

@@ -166,6 +173,7 @@ def test_client_manager_password(self):
166173
verify=False,
167174
)
168175
client_manager.setup_auth()
176+
client_manager.auth_ref
169177

170178
self.assertEqual(
171179
fakes.AUTH_URL,
@@ -195,6 +203,28 @@ def test_client_manager_password(self):
195203
dir(SERVICE_CATALOG),
196204
dir(client_manager.auth_ref.service_catalog),
197205
)
206+
self.assertTrue(client_manager.is_network_endpoint_enabled())
207+
208+
def test_client_manager_network_endpoint_disabled(self):
209+
210+
client_manager = clientmanager.ClientManager(
211+
cli_options=FakeOptions(
212+
auth=dict(
213+
auth_url=fakes.AUTH_URL,
214+
username=fakes.USERNAME,
215+
password=fakes.PASSWORD,
216+
project_name=fakes.PROJECT_NAME,
217+
),
218+
auth_type='v3password',
219+
),
220+
api_version={"identity": "3"},
221+
verify=False,
222+
)
223+
client_manager.setup_auth()
224+
client_manager.auth_ref
225+
226+
# v3 fake doesn't have network endpoint.
227+
self.assertFalse(client_manager.is_network_endpoint_enabled())
198228

199229
def stub_auth(self, json=None, url=None, verb=None, **kwargs):
200230
subject_token = fakes.AUTH_TOKEN
@@ -229,10 +259,12 @@ def test_client_manager_password_verify_ca(self):
229259
verify='cafile',
230260
)
231261
client_manager.setup_auth()
262+
client_manager.auth_ref
232263

233264
self.assertFalse(client_manager._insecure)
234265
self.assertTrue(client_manager._verify)
235266
self.assertEqual('cafile', client_manager._cacert)
267+
self.assertTrue(client_manager.is_network_endpoint_enabled())
236268

237269
def _select_auth_plugin(self, auth_params, api_version, auth_plugin_name):
238270
auth_params['auth_type'] = auth_plugin_name
@@ -243,6 +275,7 @@ def _select_auth_plugin(self, auth_params, api_version, auth_plugin_name):
243275
verify=True
244276
)
245277
client_manager.setup_auth()
278+
client_manager.auth_ref
246279

247280
self.assertEqual(
248281
auth_plugin_name,

openstackclient/tests/fakes.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,15 @@
3434
TEST_RESPONSE_DICT = fixture.V2Token(token_id=AUTH_TOKEN,
3535
user_name=USERNAME)
3636
_s = TEST_RESPONSE_DICT.add_service('identity', name='keystone')
37-
_s.add_endpoint(AUTH_URL + '/v2.0')
37+
_s.add_endpoint(AUTH_URL + ':5000/v2.0')
38+
_s = TEST_RESPONSE_DICT.add_service('network', name='neutron')
39+
_s.add_endpoint(AUTH_URL + ':9696')
40+
_s = TEST_RESPONSE_DICT.add_service('compute', name='nova')
41+
_s.add_endpoint(AUTH_URL + ':8774/v2')
42+
_s = TEST_RESPONSE_DICT.add_service('image', name='glance')
43+
_s.add_endpoint(AUTH_URL + ':9292')
44+
_s = TEST_RESPONSE_DICT.add_service('object', name='swift')
45+
_s.add_endpoint(AUTH_URL + ':8080/v1')
3846

3947
TEST_RESPONSE_DICT_V3 = fixture.V3Token(user_name=USERNAME)
4048
TEST_RESPONSE_DICT_V3.set_project_scope()
@@ -103,6 +111,7 @@ def __init__(self):
103111
self.session = None
104112
self.auth_ref = None
105113
self.auth_plugin_name = None
114+
self.network_endpoint_enabled = True
106115

107116
def get_configuration(self):
108117
return {
@@ -115,6 +124,9 @@ def get_configuration(self):
115124
'identity_api_version': VERSION,
116125
}
117126

127+
def is_network_endpoint_enabled(self):
128+
return self.network_endpoint_enabled
129+
118130

119131
class FakeModule(object):
120132
def __init__(self, name, version):

0 commit comments

Comments
 (0)