Skip to content

Commit 7750fc1

Browse files
agaetepArtofBugs
authored andcommitted
identity: Migrate 'endpoint' commands to SDK
Change-Id: I71b5ae8a4bbcb2fdebf894d8bd5cc8322c31bdb5 Depends-On: I599ff3e88d4e1e9ffafc638bb74186f2739b5a77 Depends-On: I9aa39810fe94f7ee9b68d34050f4adb9dbdfccb8
1 parent 7380fbe commit 7750fc1

File tree

4 files changed

+288
-267
lines changed

4 files changed

+288
-267
lines changed

openstackclient/identity/common.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -88,23 +88,22 @@ def find_service_sdk(identity_client, name_type_or_id):
8888
raise exceptions.CommandError(e.message)
8989

9090
# search for service type
91-
services = identity_client.services()
92-
result = None
93-
for service in services:
94-
if name_type_or_id == service.type:
95-
if result:
96-
msg = _(
97-
"Multiple service matches found for '%s', "
98-
"use an ID or name to be more specific."
99-
)
100-
raise exceptions.CommandError(msg % name_type_or_id)
101-
result = service
102-
103-
if result is None:
104-
msg = _("No service with a type, name or ID of '%s' exists.")
105-
raise exceptions.CommandError(msg % name_type_or_id)
91+
services = identity_client.services(type=name_type_or_id)
92+
try:
93+
service = next(services)
94+
except StopIteration:
95+
msg = _(
96+
"No service with a type, name or ID of '%(query)s' exists."
97+
) % {"query": name_type_or_id}
98+
raise exceptions.CommandError(msg)
99+
100+
if next(services, None):
101+
msg = _(
102+
"Multiple service matches found for '%(query)s', use an ID to be more specific."
103+
) % {"query": name_type_or_id}
104+
raise exceptions.CommandError(msg)
106105

107-
return result
106+
return service
108107

109108

110109
def get_resource(manager, name_type_or_id):

openstackclient/identity/v3/endpoint.py

Lines changed: 96 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,31 @@
2828
LOG = logging.getLogger(__name__)
2929

3030

31-
def get_service_name(service):
32-
if hasattr(service, 'name'):
33-
return service.name
34-
else:
35-
return ''
31+
def _format_endpoint(endpoint, service):
32+
columns = (
33+
'is_enabled',
34+
'id',
35+
'interface',
36+
'region_id',
37+
'region_id',
38+
'service_id',
39+
'url',
40+
)
41+
column_headers = (
42+
'enabled',
43+
'id',
44+
'interface',
45+
'region',
46+
'region_id',
47+
'service_id',
48+
'url',
49+
'service_name',
50+
'service_type',
51+
)
52+
53+
data = utils.get_item_properties(endpoint, columns)
54+
data += (getattr(service, 'name', ''), service.type)
55+
return column_headers, data
3656

3757

3858
class AddProjectToEndpoint(command.Command):
@@ -112,23 +132,23 @@ def get_parser(self, prog_name):
112132
return parser
113133

114134
def take_action(self, parsed_args):
115-
identity_client = self.app.client_manager.identity
116-
service = common.find_service(identity_client, parsed_args.service)
117-
118-
endpoint = identity_client.endpoints.create(
119-
service=service.id,
120-
url=parsed_args.url,
121-
interface=parsed_args.interface,
122-
region=parsed_args.region,
123-
enabled=parsed_args.enabled,
124-
)
135+
identity_client = self.app.client_manager.sdk_connection.identity
136+
service = common.find_service_sdk(identity_client, parsed_args.service)
137+
138+
kwargs = {}
139+
140+
kwargs['service_id'] = service.id
141+
kwargs['url'] = parsed_args.url
142+
kwargs['interface'] = parsed_args.interface
143+
kwargs['is_enabled'] = parsed_args.enabled
144+
145+
if parsed_args.region:
146+
region = identity_client.get_region(parsed_args.region)
147+
kwargs['region_id'] = region.id
148+
149+
endpoint = identity_client.create_endpoint(**kwargs)
125150

126-
info = {}
127-
endpoint._info.pop('links')
128-
info.update(endpoint._info)
129-
info['service_name'] = get_service_name(service)
130-
info['service_type'] = service.type
131-
return zip(*sorted(info.items()))
151+
return _format_endpoint(endpoint, service=service)
132152

133153

134154
class DeleteEndpoint(command.Command):
@@ -145,14 +165,12 @@ def get_parser(self, prog_name):
145165
return parser
146166

147167
def take_action(self, parsed_args):
148-
identity_client = self.app.client_manager.identity
168+
identity_client = self.app.client_manager.sdk_connection.identity
149169
result = 0
150170
for i in parsed_args.endpoint:
151171
try:
152-
endpoint_id = utils.find_resource(
153-
identity_client.endpoints, i
154-
).id
155-
identity_client.endpoints.delete(endpoint_id)
172+
endpoint_id = identity_client.find_endpoint(i).id
173+
identity_client.delete_endpoint(endpoint_id)
156174
except Exception as e:
157175
result += 1
158176
LOG.error(
@@ -208,28 +226,24 @@ def get_parser(self, prog_name):
208226
return parser
209227

210228
def take_action(self, parsed_args):
211-
identity_client = self.app.client_manager.identity
229+
identity_client = self.app.client_manager.sdk_connection.identity
212230

213231
endpoint = None
214232
if parsed_args.endpoint:
215-
endpoint = utils.find_resource(
216-
identity_client.endpoints, parsed_args.endpoint
217-
)
233+
endpoint = identity_client.find_endpoint(parsed_args.endpoint)
218234
project = None
219235
if parsed_args.project:
220-
project = common.find_project(
221-
identity_client,
236+
project = identity_client.find_project(
222237
parsed_args.project,
223238
parsed_args.project_domain,
224239
)
225240

226241
if endpoint:
227-
columns: tuple[str, ...] = ('ID', 'Name')
228-
data = identity_client.endpoint_filter.list_projects_for_endpoint(
229-
endpoint=endpoint.id
230-
)
242+
column_headers = ('ID', 'Name')
243+
columns: tuple[str, ...] = ('id', 'name')
244+
data = identity_client.endpoint_projects(endpoint=endpoint.id)
231245
else:
232-
columns = (
246+
column_headers = (
233247
'ID',
234248
'Region',
235249
'Service Name',
@@ -238,37 +252,41 @@ def take_action(self, parsed_args):
238252
'Interface',
239253
'URL',
240254
)
255+
columns = (
256+
'id',
257+
'region_id',
258+
'service_name',
259+
'service_type',
260+
'is_enabled',
261+
'interface',
262+
'url',
263+
)
241264
kwargs = {}
242265
if parsed_args.service:
243-
service = common.find_service(
266+
service = common.find_service_sdk(
244267
identity_client, parsed_args.service
245268
)
246-
kwargs['service'] = service.id
269+
kwargs['service_id'] = service.id
247270
if parsed_args.interface:
248271
kwargs['interface'] = parsed_args.interface
249272
if parsed_args.region:
250-
kwargs['region'] = parsed_args.region
273+
region = identity_client.get_region(parsed_args.region)
274+
kwargs['region_id'] = region.id
251275

252276
if project:
253-
data = (
254-
identity_client.endpoint_filter.list_endpoints_for_project(
255-
project=project.id
256-
)
277+
data = list(
278+
identity_client.project_endpoints(project=project.id)
257279
)
258280
else:
259-
data = identity_client.endpoints.list(**kwargs)
260-
261-
service_list = identity_client.services.list()
281+
data = list(identity_client.endpoints(**kwargs))
262282

263283
for ep in data:
264-
service = common.find_service_in_list(
265-
service_list, ep.service_id
266-
)
267-
ep.service_name = get_service_name(service)
284+
service = identity_client.find_service(ep.service_id)
285+
ep.service_name = getattr(service, 'name', '')
268286
ep.service_type = service.type
269287

270288
return (
271-
columns,
289+
column_headers,
272290
(
273291
utils.get_item_properties(
274292
s,
@@ -363,28 +381,34 @@ def get_parser(self, prog_name):
363381
return parser
364382

365383
def take_action(self, parsed_args):
366-
identity_client = self.app.client_manager.identity
367-
endpoint = utils.find_resource(
368-
identity_client.endpoints, parsed_args.endpoint
369-
)
384+
identity_client = self.app.client_manager.sdk_connection.identity
385+
endpoint = identity_client.find_endpoint(parsed_args.endpoint)
386+
387+
kwargs = {}
370388

371-
service_id = None
372389
if parsed_args.service:
373-
service = common.find_service(identity_client, parsed_args.service)
374-
service_id = service.id
375-
enabled = None
390+
service = common.find_service_sdk(
391+
identity_client, parsed_args.service
392+
)
393+
kwargs['service_id'] = service.id
394+
376395
if parsed_args.enabled:
377-
enabled = True
396+
kwargs['is_enabled'] = True
378397
if parsed_args.disabled:
379-
enabled = False
398+
kwargs['is_enabled'] = False
399+
400+
if parsed_args.url:
401+
kwargs['url'] = parsed_args.url
402+
403+
if parsed_args.interface:
404+
kwargs['interface'] = parsed_args.interface
380405

381-
identity_client.endpoints.update(
406+
if parsed_args.region:
407+
kwargs['region_id'] = parsed_args.region
408+
409+
identity_client.update_endpoint(
382410
endpoint.id,
383-
service=service_id,
384-
url=parsed_args.url,
385-
interface=parsed_args.interface,
386-
region=parsed_args.region,
387-
enabled=enabled,
411+
**kwargs,
388412
)
389413

390414

@@ -404,16 +428,9 @@ def get_parser(self, prog_name):
404428
return parser
405429

406430
def take_action(self, parsed_args):
407-
identity_client = self.app.client_manager.identity
408-
endpoint = utils.find_resource(
409-
identity_client.endpoints, parsed_args.endpoint
410-
)
431+
identity_client = self.app.client_manager.sdk_connection.identity
432+
endpoint = identity_client.find_endpoint(parsed_args.endpoint)
411433

412-
service = common.find_service(identity_client, endpoint.service_id)
434+
service = common.find_service_sdk(identity_client, endpoint.service_id)
413435

414-
info = {}
415-
endpoint._info.pop('links')
416-
info.update(endpoint._info)
417-
info['service_name'] = get_service_name(service)
418-
info['service_type'] = service.type
419-
return zip(*sorted(info.items()))
436+
return _format_endpoint(endpoint, service)

0 commit comments

Comments
 (0)