Skip to content

Commit 9613070

Browse files
committed
compute: Replace remaining use of keystoneclient
We also add a missing --project-domain options to the 'usage list' command. Change-Id: Iefe57fcf13da43c5a987ac8f4033e93b71d47747 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent a6df274 commit 9613070

10 files changed

Lines changed: 227 additions & 202 deletions

File tree

openstackclient/compute/v2/flavor.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,9 @@ def take_action(
154154
self, parsed_args: argparse.Namespace
155155
) -> tuple[Sequence[str], Iterable[Any]]:
156156
compute_client = self.app.client_manager.compute
157-
identity_client = self.app.client_manager.identity
157+
identity_client = sdk_utils.ensure_service_version(
158+
self.app.client_manager.sdk_connection.identity, '3'
159+
)
158160

159161
if parsed_args.project and parsed_args.public:
160162
msg = _("--project is only allowed with --private")
@@ -208,11 +210,11 @@ def take_action(
208210

209211
if parsed_args.project:
210212
try:
211-
project_id = identity_common.find_project(
213+
project_id = identity_common.find_project_id_sdk(
212214
identity_client,
213215
parsed_args.project,
214216
parsed_args.project_domain,
215-
).id
217+
)
216218
compute_client.flavor_add_tenant_access(flavor.id, project_id)
217219
except Exception as e:
218220
msg = _(
@@ -450,7 +452,9 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
450452

451453
def take_action(self, parsed_args: argparse.Namespace) -> None:
452454
compute_client = self.app.client_manager.compute
453-
identity_client = self.app.client_manager.identity
455+
identity_client = sdk_utils.ensure_service_version(
456+
self.app.client_manager.sdk_connection.identity, '3'
457+
)
454458

455459
try:
456460
flavor = compute_client.find_flavor(
@@ -496,15 +500,13 @@ def take_action(self, parsed_args: argparse.Namespace) -> None:
496500
if flavor.is_public:
497501
msg = _("Cannot set access for a public flavor")
498502
raise exceptions.CommandError(msg)
499-
else:
500-
project_id = identity_common.find_project(
501-
identity_client,
502-
parsed_args.project,
503-
parsed_args.project_domain,
504-
).id
505-
compute_client.flavor_add_tenant_access(
506-
flavor.id, project_id
507-
)
503+
504+
project_id = identity_common.find_project_id_sdk(
505+
identity_client,
506+
parsed_args.project,
507+
parsed_args.project_domain,
508+
)
509+
compute_client.flavor_add_tenant_access(flavor.id, project_id)
508510
except Exception as e:
509511
LOG.error(_("Failed to set flavor access to project: %s"), e)
510512
result += 1
@@ -599,7 +601,9 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
599601

600602
def take_action(self, parsed_args: argparse.Namespace) -> None:
601603
compute_client = self.app.client_manager.compute
602-
identity_client = self.app.client_manager.identity
604+
identity_client = sdk_utils.ensure_service_version(
605+
self.app.client_manager.sdk_connection.identity, '3'
606+
)
603607

604608
try:
605609
flavor = compute_client.find_flavor(
@@ -625,11 +629,11 @@ def take_action(self, parsed_args: argparse.Namespace) -> None:
625629
msg = _("Cannot remove access for a public flavor")
626630
raise exceptions.CommandError(msg)
627631

628-
project_id = identity_common.find_project(
632+
project_id = identity_common.find_project_id_sdk(
629633
identity_client,
630634
parsed_args.project,
631635
parsed_args.project_domain,
632-
).id
636+
)
633637
compute_client.flavor_remove_tenant_access(
634638
flavor.id, project_id
635639
)

openstackclient/compute/v2/keypair.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,9 @@ def take_action(
131131
self, parsed_args: argparse.Namespace
132132
) -> tuple[Sequence[str], Iterable[Any]]:
133133
compute_client = self.app.client_manager.compute
134-
identity_client = self.app.client_manager.identity
134+
identity_client = sdk_utils.ensure_service_version(
135+
self.app.client_manager.sdk_connection.identity, '3'
136+
)
135137

136138
kwargs = {'name': parsed_args.name}
137139

@@ -192,11 +194,11 @@ def take_action(
192194
)
193195
raise exceptions.CommandError(msg)
194196

195-
kwargs['user_id'] = identity_common.find_user(
197+
kwargs['user_id'] = identity_common.find_user_id_sdk(
196198
identity_client,
197199
parsed_args.user,
198200
parsed_args.user_domain,
199-
).id
201+
)
200202

201203
keypair = compute_client.create_keypair(**kwargs)
202204

@@ -239,7 +241,9 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
239241

240242
def take_action(self, parsed_args: argparse.Namespace) -> Any:
241243
compute_client = self.app.client_manager.compute
242-
identity_client = self.app.client_manager.identity
244+
identity_client = sdk_utils.ensure_service_version(
245+
self.app.client_manager.sdk_connection.identity, '3'
246+
)
243247

244248
kwargs = {}
245249
result = 0
@@ -252,11 +256,11 @@ def take_action(self, parsed_args: argparse.Namespace) -> Any:
252256
)
253257
raise exceptions.CommandError(msg)
254258

255-
kwargs['user_id'] = identity_common.find_user(
259+
kwargs['user_id'] = identity_common.find_user_id_sdk(
256260
identity_client,
257261
parsed_args.user,
258262
parsed_args.user_domain,
259-
).id
263+
)
260264

261265
for n in parsed_args.name:
262266
try:
@@ -311,8 +315,7 @@ def take_action(
311315
self, parsed_args: argparse.Namespace
312316
) -> tuple[Sequence[str], Iterable[Any]]:
313317
compute_client = self.app.client_manager.compute
314-
identity_client = self.app.client_manager.identity
315-
identity_sdk_client = sdk_utils.ensure_service_version(
318+
identity_client = sdk_utils.ensure_service_version(
316319
self.app.client_manager.sdk_connection.identity, '3'
317320
)
318321

@@ -358,12 +361,12 @@ def take_action(
358361
# NOTE(stephenfin): This is done client side because nova doesn't
359362
# currently support doing so server-side. If this is slow, we can
360363
# think about spinning up a threadpool or similar.
361-
project = identity_common.find_project(
364+
project = identity_common.find_project_id_sdk(
362365
identity_client,
363366
parsed_args.project,
364367
parsed_args.project_domain,
365-
).id
366-
assignments = identity_sdk_client.role_assignments(
368+
)
369+
assignments = identity_client.role_assignments(
367370
scope_project_id=project
368371
)
369372
user_ids = set()
@@ -383,12 +386,12 @@ def take_action(
383386
)
384387
raise exceptions.CommandError(msg)
385388

386-
user = identity_common.find_user(
389+
user_id = identity_common.find_user_id_sdk(
387390
identity_client,
388391
parsed_args.user,
389392
parsed_args.user_domain,
390393
)
391-
kwargs['user_id'] = user.id
394+
kwargs['user_id'] = user_id
392395

393396
data = list(compute_client.keypairs(**kwargs))
394397
else:
@@ -436,7 +439,9 @@ def take_action(
436439
self, parsed_args: argparse.Namespace
437440
) -> tuple[Sequence[str], Iterable[Any]]:
438441
compute_client = self.app.client_manager.compute
439-
identity_client = self.app.client_manager.identity
442+
identity_client = sdk_utils.ensure_service_version(
443+
self.app.client_manager.sdk_connection.identity, '3'
444+
)
440445

441446
kwargs = {}
442447

@@ -448,11 +453,11 @@ def take_action(
448453
)
449454
raise exceptions.CommandError(msg)
450455

451-
kwargs['user_id'] = identity_common.find_user(
456+
kwargs['user_id'] = identity_common.find_user_id_sdk(
452457
identity_client,
453458
parsed_args.user,
454459
parsed_args.user_domain,
455-
).id
460+
)
456461

457462
keypair = compute_client.find_keypair(
458463
parsed_args.name, **kwargs, ignore_missing=False

openstackclient/compute/v2/server.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2724,25 +2724,27 @@ def take_action(
27242724
self, parsed_args: argparse.Namespace
27252725
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
27262726
compute_client = self.app.client_manager.compute
2727-
identity_client = self.app.client_manager.identity
2727+
identity_client = sdk_utils.ensure_service_version(
2728+
self.app.client_manager.sdk_connection.identity, '3'
2729+
)
27282730
image_client = self.app.client_manager.image
27292731

27302732
project_id = None
27312733
if parsed_args.project:
2732-
project_id = identity_common.find_project(
2734+
project_id = identity_common.find_project_id_sdk(
27332735
identity_client,
27342736
parsed_args.project,
27352737
parsed_args.project_domain,
2736-
).id
2738+
)
27372739
parsed_args.all_projects = True
27382740

27392741
user_id = None
27402742
if parsed_args.user:
2741-
user_id = identity_common.find_user(
2743+
user_id = identity_common.find_user_id_sdk(
27422744
identity_client,
27432745
parsed_args.user,
27442746
parsed_args.user_domain,
2745-
).id
2747+
)
27462748

27472749
# Nova only supports list servers searching by flavor ID. So if a
27482750
# flavor name is given, map it to ID.

openstackclient/compute/v2/server_migration.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,9 @@ def take_action(
165165
self, parsed_args: argparse.Namespace
166166
) -> tuple[list[str], Iterable[tuple[Any, ...]]]:
167167
compute_client = self.app.client_manager.compute
168-
identity_client = self.app.client_manager.identity
168+
identity_client = sdk_utils.ensure_service_version(
169+
self.app.client_manager.sdk_connection.identity, '3'
170+
)
169171

170172
search_opts = {}
171173

@@ -236,11 +238,11 @@ def take_action(
236238
)
237239
raise exceptions.CommandError(msg)
238240

239-
search_opts['project_id'] = identity_common.find_project(
241+
search_opts['project_id'] = identity_common.find_project_id_sdk(
240242
identity_client,
241243
parsed_args.project,
242244
parsed_args.project_domain,
243-
).id
245+
)
244246

245247
if parsed_args.user:
246248
if not sdk_utils.supports_microversion(compute_client, "2.80"):
@@ -250,11 +252,11 @@ def take_action(
250252
)
251253
raise exceptions.CommandError(msg)
252254

253-
search_opts['user_id'] = identity_common.find_user(
255+
search_opts['user_id'] = identity_common.find_user_id_sdk(
254256
identity_client,
255257
parsed_args.user,
256258
parsed_args.user_domain,
257-
).id
259+
)
258260

259261
migrations = list(compute_client.migrations(**search_opts))
260262

openstackclient/compute/v2/usage.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
from collections.abc import Collection, Iterable, Sequence
2020
import datetime
2121
import functools
22-
from typing import Any, cast
22+
from typing import Any
2323

2424
from cliff import columns as cliff_columns
25+
from openstack import utils as sdk_utils
2526
from osc_lib import utils
2627

2728
from openstackclient import command
2829
from openstackclient.i18n import _
30+
from openstackclient.identity import common as identity_common
2931

3032

3133
# TODO(stephenfin): This exists in a couple of places and should be moved to a
@@ -41,7 +43,9 @@ class ProjectColumn(cliff_columns.FormattableColumn[str]):
4143
project_cache)`` to use this.
4244
"""
4345

44-
def __init__(self, value: str, project_cache: Any = None) -> None:
46+
def __init__(
47+
self, value: str, project_cache: dict[str, str] | None = None
48+
) -> None:
4549
super().__init__(value)
4650
self.project_cache = project_cache or {}
4751

@@ -50,8 +54,8 @@ def human_readable(self) -> str:
5054
if not project:
5155
return ''
5256

53-
if project in self.project_cache.keys():
54-
return cast(str, self.project_cache[project].name)
57+
if project in self.project_cache:
58+
return self.project_cache[project]
5559

5660
return project
5761

@@ -66,7 +70,7 @@ def human_readable(self) -> str:
6670
return f"{self._value:.2f}"
6771

6872

69-
def _formatters(project_cache: Any) -> dict[str, Any]:
73+
def _formatters(project_cache: dict[str, str] | None) -> dict[str, Any]:
7074
return {
7175
'project_id': functools.partial(
7276
ProjectColumn, project_cache=project_cache
@@ -135,12 +139,16 @@ def take_action(
135139
def _format_project(project: str) -> str:
136140
if not project:
137141
return ""
138-
if project in project_cache.keys():
139-
return cast(str, project_cache[project].name)
142+
if project in project_cache:
143+
return project_cache[project]
140144
else:
141145
return project
142146

143147
compute_client = self.app.client_manager.compute
148+
identity_client = sdk_utils.ensure_service_version(
149+
self.app.client_manager.sdk_connection.identity, '3'
150+
)
151+
144152
columns = (
145153
"project_id",
146154
"server_usages",
@@ -182,8 +190,8 @@ def _format_project(project: str) -> str:
182190
# Cache the project list
183191
project_cache = {}
184192
try:
185-
for p in self.app.client_manager.identity.projects.list():
186-
project_cache[p.id] = p
193+
for p in identity_client.projects():
194+
project_cache[p.id] = p.name
187195
except Exception: # noqa: S110
188196
# Just forget it if there's any trouble
189197
pass
@@ -221,6 +229,7 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
221229
default=None,
222230
help=_("Name or ID of project to show usage for"),
223231
)
232+
identity_common.add_project_domain_option_to_parser(parser)
224233
parser.add_argument(
225234
"--start",
226235
metavar="<start>",
@@ -240,8 +249,11 @@ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
240249
def take_action(
241250
self, parsed_args: argparse.Namespace
242251
) -> tuple[Sequence[str], Iterable[Any]]:
243-
identity_client = self.app.client_manager.identity
244252
compute_client = self.app.client_manager.compute
253+
identity_client = sdk_utils.ensure_service_version(
254+
self.app.client_manager.sdk_connection.identity, '3'
255+
)
256+
245257
date_cli_format = "%Y-%m-%d"
246258
now = datetime.datetime.now(datetime.UTC).replace(tzinfo=None)
247259

@@ -258,13 +270,16 @@ def take_action(
258270
end = now + datetime.timedelta(days=1)
259271

260272
if parsed_args.project:
261-
project = utils.find_resource(
262-
identity_client.projects,
273+
project = identity_common.find_project_id_sdk(
274+
identity_client,
263275
parsed_args.project,
264-
).id
276+
parsed_args.project_domain,
277+
)
265278
else:
266279
# Get the project from the current auth
267-
project = self.app.client_manager.auth_ref.project_id
280+
_project_id = self.app.client_manager.auth_ref.project_id
281+
assert _project_id is not None # narrow type
282+
project = _project_id
268283

269284
usage = compute_client.get_usage(
270285
project=project,

0 commit comments

Comments
 (0)