python-openstackclient 9.0.0__py3-none-any.whl → 10.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +58 -42
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +14 -6
- openstackclient/common/pagination.py +8 -2
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +13 -7
- openstackclient/common/quota.py +97 -99
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +39 -21
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +14 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +29 -14
- openstackclient/compute/v2/server.py +249 -169
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +21 -12
- openstackclient/compute/v2/server_group.py +21 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +24 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +10 -4
- openstackclient/compute/v2/service.py +14 -7
- openstackclient/compute/v2/usage.py +26 -21
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +78 -47
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +23 -11
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +26 -12
- openstackclient/identity/v3/application_credential.py +59 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +36 -16
- openstackclient/identity/v3/domain.py +37 -18
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +42 -20
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +38 -16
- openstackclient/identity/v3/group.py +55 -32
- openstackclient/identity/v3/identity_provider.py +92 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +38 -16
- openstackclient/identity/v3/mapping.py +26 -13
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +43 -23
- openstackclient/identity/v3/region.py +36 -16
- openstackclient/identity/v3/registered_limit.py +40 -16
- openstackclient/identity/v3/role.py +61 -31
- openstackclient/identity/v3/role_assignment.py +23 -6
- openstackclient/identity/v3/service.py +36 -16
- openstackclient/identity/v3/service_provider.py +37 -15
- openstackclient/identity/v3/tag.py +23 -6
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +32 -14
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +49 -26
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +14 -9
- openstackclient/image/v2/image.py +74 -48
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +109 -13
- openstackclient/image/v2/metadef_objects.py +28 -15
- openstackclient/image/v2/metadef_properties.py +24 -13
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +15 -6
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +36 -22
- openstackclient/network/v2/address_group.py +27 -16
- openstackclient/network/v2/address_scope.py +24 -13
- openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +214 -0
- openstackclient/network/v2/bgpvpn/port_association.py +490 -0
- openstackclient/network/v2/bgpvpn/router_association.py +288 -0
- openstackclient/network/v2/default_security_group_rule.py +19 -10
- openstackclient/network/v2/floating_ip.py +110 -159
- openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +466 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +574 -0
- openstackclient/network/v2/ip_availability.py +13 -5
- openstackclient/network/v2/l3_conntrack_helper.py +22 -13
- openstackclient/network/v2/local_ip.py +24 -13
- openstackclient/network/v2/local_ip_association.py +14 -7
- openstackclient/network/v2/ndp_proxy.py +20 -11
- openstackclient/network/v2/network.py +129 -196
- openstackclient/network/v2/network_agent.py +46 -25
- openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
- openstackclient/network/v2/network_flavor.py +27 -16
- openstackclient/network/v2/network_flavor_profile.py +23 -12
- openstackclient/network/v2/network_meter.py +21 -10
- openstackclient/network/v2/network_meter_rule.py +21 -11
- openstackclient/network/v2/network_qos_policy.py +25 -15
- openstackclient/network/v2/network_qos_rule.py +32 -17
- openstackclient/network/v2/network_qos_rule_type.py +13 -5
- openstackclient/network/v2/network_rbac.py +23 -12
- openstackclient/network/v2/network_segment.py +20 -11
- openstackclient/network/v2/network_segment_range.py +56 -29
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +38 -22
- openstackclient/network/v2/port.py +54 -29
- openstackclient/network/v2/router.py +75 -52
- openstackclient/network/v2/security_group.py +87 -157
- openstackclient/network/v2/security_group_rule.py +100 -280
- openstackclient/network/v2/subnet.py +49 -28
- openstackclient/network/v2/subnet_pool.py +30 -17
- openstackclient/network/v2/taas/tap_flow.py +22 -11
- openstackclient/network/v2/taas/tap_mirror.py +22 -11
- openstackclient/network/v2/taas/tap_service.py +23 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +25 -15
- openstackclient/object/v1/object.py +25 -15
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +25 -19
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_module.py +12 -7
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +6 -26
- openstackclient/tests/unit/compute/v2/fakes.py +25 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
- openstackclient/tests/unit/compute/v2/test_server.py +11 -96
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/identity/v3/fakes.py +3 -0
- openstackclient/tests/unit/identity/v3/test_group.py +4 -14
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_user.py +4 -4
- openstackclient/tests/unit/image/v2/test_image.py +11 -11
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
- openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_router.py +8 -9
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
- openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +1 -0
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +1 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +29 -17
- openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
- openstackclient/volume/v2/qos_specs.py +28 -17
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +57 -29
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +46 -20
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +50 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +89 -39
- openstackclient/volume/v3/volume_attachment.py +43 -21
- openstackclient/volume/v3/volume_backup.py +53 -24
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +32 -13
- openstackclient/volume/v3/volume_group_type.py +26 -13
- openstackclient/volume/v3/volume_message.py +15 -7
- openstackclient/volume/v3/volume_snapshot.py +69 -32
- openstackclient/volume/v3/volume_transfer_request.py +31 -13
- openstackclient/volume/v3/volume_type.py +42 -24
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +271 -260
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +4 -0
- python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -15,9 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
"""Identity v3 Role action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
20
23
|
from openstack import exceptions as sdk_exc
|
|
24
|
+
from openstack import utils as sdk_utils
|
|
21
25
|
from osc_lib import exceptions
|
|
22
26
|
from osc_lib import utils
|
|
23
27
|
|
|
@@ -29,7 +33,7 @@ from openstackclient.identity import common
|
|
|
29
33
|
LOG = logging.getLogger(__name__)
|
|
30
34
|
|
|
31
35
|
|
|
32
|
-
def _format_role(role):
|
|
36
|
+
def _format_role(role: Any) -> tuple[tuple[str, ...], Any]:
|
|
33
37
|
columns = (
|
|
34
38
|
"id",
|
|
35
39
|
"name",
|
|
@@ -48,7 +52,9 @@ def _format_role(role):
|
|
|
48
52
|
)
|
|
49
53
|
|
|
50
54
|
|
|
51
|
-
def _add_identity_and_resource_options_to_parser(
|
|
55
|
+
def _add_identity_and_resource_options_to_parser(
|
|
56
|
+
parser: argparse.ArgumentParser,
|
|
57
|
+
) -> None:
|
|
52
58
|
system_or_domain_or_project = parser.add_mutually_exclusive_group()
|
|
53
59
|
system_or_domain_or_project.add_argument(
|
|
54
60
|
'--system',
|
|
@@ -83,9 +89,11 @@ def _add_identity_and_resource_options_to_parser(parser):
|
|
|
83
89
|
|
|
84
90
|
|
|
85
91
|
def _process_identity_and_resource_options(
|
|
86
|
-
parsed_args
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
parsed_args: argparse.Namespace,
|
|
93
|
+
identity_client: Any,
|
|
94
|
+
validate_actor_existence: bool = True,
|
|
95
|
+
) -> dict[str, Any]:
|
|
96
|
+
def _find_user() -> Any:
|
|
89
97
|
domain_id = (
|
|
90
98
|
common._find_sdk_id(
|
|
91
99
|
identity_client.find_domain,
|
|
@@ -102,7 +110,7 @@ def _process_identity_and_resource_options(
|
|
|
102
110
|
domain_id=domain_id,
|
|
103
111
|
)
|
|
104
112
|
|
|
105
|
-
def _find_group():
|
|
113
|
+
def _find_group() -> Any:
|
|
106
114
|
domain_id = (
|
|
107
115
|
common._find_sdk_id(
|
|
108
116
|
identity_client.find_domain,
|
|
@@ -119,7 +127,7 @@ def _process_identity_and_resource_options(
|
|
|
119
127
|
domain_id=domain_id,
|
|
120
128
|
)
|
|
121
129
|
|
|
122
|
-
def _find_project():
|
|
130
|
+
def _find_project() -> Any:
|
|
123
131
|
domain_id = (
|
|
124
132
|
common._find_sdk_id(
|
|
125
133
|
identity_client.find_domain,
|
|
@@ -180,7 +188,7 @@ class AddRole(command.Command):
|
|
|
180
188
|
"system, a domain, or a project"
|
|
181
189
|
)
|
|
182
190
|
|
|
183
|
-
def get_parser(self, prog_name):
|
|
191
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
184
192
|
parser = super().get_parser(prog_name)
|
|
185
193
|
parser.add_argument(
|
|
186
194
|
'role',
|
|
@@ -191,8 +199,10 @@ class AddRole(command.Command):
|
|
|
191
199
|
common.add_role_domain_option_to_parser(parser)
|
|
192
200
|
return parser
|
|
193
201
|
|
|
194
|
-
def take_action(self, parsed_args):
|
|
195
|
-
identity_client =
|
|
202
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
203
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
204
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
205
|
+
)
|
|
196
206
|
|
|
197
207
|
if (
|
|
198
208
|
not parsed_args.user
|
|
@@ -278,7 +288,7 @@ class AddRole(command.Command):
|
|
|
278
288
|
class CreateRole(command.ShowOne):
|
|
279
289
|
_description = _("Create new role")
|
|
280
290
|
|
|
281
|
-
def get_parser(self, prog_name):
|
|
291
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
282
292
|
parser = super().get_parser(prog_name)
|
|
283
293
|
parser.add_argument(
|
|
284
294
|
'name',
|
|
@@ -303,10 +313,14 @@ class CreateRole(command.ShowOne):
|
|
|
303
313
|
common.add_resource_option_to_parser(parser)
|
|
304
314
|
return parser
|
|
305
315
|
|
|
306
|
-
def take_action(
|
|
307
|
-
|
|
316
|
+
def take_action(
|
|
317
|
+
self, parsed_args: argparse.Namespace
|
|
318
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
319
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
320
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
321
|
+
)
|
|
308
322
|
|
|
309
|
-
create_kwargs = {}
|
|
323
|
+
create_kwargs: dict[str, Any] = {}
|
|
310
324
|
if parsed_args.domain:
|
|
311
325
|
create_kwargs['domain_id'] = common._find_sdk_id(
|
|
312
326
|
identity_client.find_domain, name_or_id=parsed_args.domain
|
|
@@ -341,7 +355,7 @@ class CreateRole(command.ShowOne):
|
|
|
341
355
|
class DeleteRole(command.Command):
|
|
342
356
|
_description = _("Delete role(s)")
|
|
343
357
|
|
|
344
|
-
def get_parser(self, prog_name):
|
|
358
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
345
359
|
parser = super().get_parser(prog_name)
|
|
346
360
|
parser.add_argument(
|
|
347
361
|
'roles',
|
|
@@ -356,8 +370,10 @@ class DeleteRole(command.Command):
|
|
|
356
370
|
)
|
|
357
371
|
return parser
|
|
358
372
|
|
|
359
|
-
def take_action(self, parsed_args):
|
|
360
|
-
identity_client =
|
|
373
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
374
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
375
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
376
|
+
)
|
|
361
377
|
|
|
362
378
|
domain_id = None
|
|
363
379
|
if parsed_args.domain:
|
|
@@ -395,7 +411,7 @@ class DeleteRole(command.Command):
|
|
|
395
411
|
class ListRole(command.Lister):
|
|
396
412
|
_description = _("List roles")
|
|
397
413
|
|
|
398
|
-
def get_parser(self, prog_name):
|
|
414
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
399
415
|
parser = super().get_parser(prog_name)
|
|
400
416
|
parser.add_argument(
|
|
401
417
|
'--domain',
|
|
@@ -404,8 +420,12 @@ class ListRole(command.Lister):
|
|
|
404
420
|
)
|
|
405
421
|
return parser
|
|
406
422
|
|
|
407
|
-
def take_action(
|
|
408
|
-
|
|
423
|
+
def take_action(
|
|
424
|
+
self, parsed_args: argparse.Namespace
|
|
425
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
426
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
427
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
428
|
+
)
|
|
409
429
|
|
|
410
430
|
if parsed_args.domain:
|
|
411
431
|
domain = identity_client.find_domain(
|
|
@@ -416,8 +436,10 @@ class ListRole(command.Lister):
|
|
|
416
436
|
return (
|
|
417
437
|
('ID', 'Name', 'Domain'),
|
|
418
438
|
(
|
|
419
|
-
|
|
420
|
-
|
|
439
|
+
(
|
|
440
|
+
*utils.get_item_properties(s, ('id', 'name')),
|
|
441
|
+
domain.name,
|
|
442
|
+
)
|
|
421
443
|
for s in data
|
|
422
444
|
),
|
|
423
445
|
)
|
|
@@ -435,7 +457,7 @@ class RemoveRole(command.Command):
|
|
|
435
457
|
"Removes a role assignment from system/domain/project : user/group"
|
|
436
458
|
)
|
|
437
459
|
|
|
438
|
-
def get_parser(self, prog_name):
|
|
460
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
439
461
|
parser = super().get_parser(prog_name)
|
|
440
462
|
parser.add_argument(
|
|
441
463
|
'role',
|
|
@@ -447,8 +469,10 @@ class RemoveRole(command.Command):
|
|
|
447
469
|
|
|
448
470
|
return parser
|
|
449
471
|
|
|
450
|
-
def take_action(self, parsed_args):
|
|
451
|
-
identity_client =
|
|
472
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
473
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
474
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
475
|
+
)
|
|
452
476
|
if (
|
|
453
477
|
not parsed_args.user
|
|
454
478
|
and not parsed_args.domain
|
|
@@ -527,7 +551,7 @@ class RemoveRole(command.Command):
|
|
|
527
551
|
class SetRole(command.Command):
|
|
528
552
|
_description = _("Set role properties")
|
|
529
553
|
|
|
530
|
-
def get_parser(self, prog_name):
|
|
554
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
531
555
|
parser = super().get_parser(prog_name)
|
|
532
556
|
parser.add_argument(
|
|
533
557
|
'role',
|
|
@@ -552,8 +576,10 @@ class SetRole(command.Command):
|
|
|
552
576
|
common.add_resource_option_to_parser(parser)
|
|
553
577
|
return parser
|
|
554
578
|
|
|
555
|
-
def take_action(self, parsed_args):
|
|
556
|
-
identity_client =
|
|
579
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
580
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
581
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
582
|
+
)
|
|
557
583
|
|
|
558
584
|
update_kwargs = {}
|
|
559
585
|
if parsed_args.description:
|
|
@@ -585,7 +611,7 @@ class SetRole(command.Command):
|
|
|
585
611
|
class ShowRole(command.ShowOne):
|
|
586
612
|
_description = _("Display role details")
|
|
587
613
|
|
|
588
|
-
def get_parser(self, prog_name):
|
|
614
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
589
615
|
parser = super().get_parser(prog_name)
|
|
590
616
|
parser.add_argument(
|
|
591
617
|
'role',
|
|
@@ -599,8 +625,12 @@ class ShowRole(command.ShowOne):
|
|
|
599
625
|
)
|
|
600
626
|
return parser
|
|
601
627
|
|
|
602
|
-
def take_action(
|
|
603
|
-
|
|
628
|
+
def take_action(
|
|
629
|
+
self, parsed_args: argparse.Namespace
|
|
630
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
631
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
632
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
633
|
+
)
|
|
604
634
|
|
|
605
635
|
domain_id = None
|
|
606
636
|
if parsed_args.domain:
|
|
@@ -13,13 +13,22 @@
|
|
|
13
13
|
|
|
14
14
|
"""Identity v3 Assignment action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from openstack import utils as sdk_utils
|
|
21
|
+
from osc_lib import exceptions
|
|
22
|
+
|
|
16
23
|
from openstackclient import command
|
|
17
24
|
from openstackclient.i18n import _
|
|
18
25
|
from openstackclient.identity import common
|
|
19
26
|
|
|
20
27
|
|
|
21
|
-
def _format_role_assignment_(
|
|
22
|
-
|
|
28
|
+
def _format_role_assignment_(
|
|
29
|
+
assignment: Any, include_names: Any
|
|
30
|
+
) -> tuple[Any, ...]:
|
|
31
|
+
def _get_names(attr: Any) -> str:
|
|
23
32
|
return (
|
|
24
33
|
(
|
|
25
34
|
attr['name']
|
|
@@ -34,7 +43,7 @@ def _format_role_assignment_(assignment, include_names):
|
|
|
34
43
|
else ''
|
|
35
44
|
)
|
|
36
45
|
|
|
37
|
-
def _get_ids(attr):
|
|
46
|
+
def _get_ids(attr: Any) -> str:
|
|
38
47
|
return attr['id'] or '' if attr else ''
|
|
39
48
|
|
|
40
49
|
func = _get_names if include_names else _get_ids
|
|
@@ -52,7 +61,7 @@ def _format_role_assignment_(assignment, include_names):
|
|
|
52
61
|
class ListRoleAssignment(command.Lister):
|
|
53
62
|
_description = _("List role assignments")
|
|
54
63
|
|
|
55
|
-
def get_parser(self, prog_name):
|
|
64
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
56
65
|
parser = super().get_parser(prog_name)
|
|
57
66
|
parser.add_argument(
|
|
58
67
|
'--effective',
|
|
@@ -117,8 +126,12 @@ class ListRoleAssignment(command.Lister):
|
|
|
117
126
|
)
|
|
118
127
|
return parser
|
|
119
128
|
|
|
120
|
-
def take_action(
|
|
121
|
-
|
|
129
|
+
def take_action(
|
|
130
|
+
self, parsed_args: argparse.Namespace
|
|
131
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
132
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
133
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
134
|
+
)
|
|
122
135
|
auth_ref = self.app.client_manager.auth_ref
|
|
123
136
|
|
|
124
137
|
role_id = None
|
|
@@ -151,6 +164,8 @@ class ListRoleAssignment(command.Lister):
|
|
|
151
164
|
)
|
|
152
165
|
elif parsed_args.authuser:
|
|
153
166
|
if auth_ref:
|
|
167
|
+
if auth_ref.user_id is None:
|
|
168
|
+
raise exceptions.CommandError('missing auth info')
|
|
154
169
|
user_id = common._find_sdk_id(
|
|
155
170
|
identity_client.find_user,
|
|
156
171
|
name_or_id=auth_ref.user_id,
|
|
@@ -185,6 +200,8 @@ class ListRoleAssignment(command.Lister):
|
|
|
185
200
|
)
|
|
186
201
|
elif parsed_args.authproject:
|
|
187
202
|
if auth_ref:
|
|
203
|
+
if auth_ref.project_id is None:
|
|
204
|
+
raise exceptions.CommandError('missing auth info')
|
|
188
205
|
project_id = common._find_sdk_id(
|
|
189
206
|
identity_client.find_project,
|
|
190
207
|
name_or_id=auth_ref.project_id,
|
|
@@ -15,8 +15,12 @@
|
|
|
15
15
|
|
|
16
16
|
"""Identity v3 Service action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
23
|
+
from openstack import utils as sdk_utils
|
|
20
24
|
from osc_lib import exceptions
|
|
21
25
|
from osc_lib import utils
|
|
22
26
|
|
|
@@ -28,7 +32,7 @@ from openstackclient.identity import common
|
|
|
28
32
|
LOG = logging.getLogger(__name__)
|
|
29
33
|
|
|
30
34
|
|
|
31
|
-
def _format_service(service):
|
|
35
|
+
def _format_service(service: Any) -> tuple[tuple[str, ...], Any]:
|
|
32
36
|
columns = (
|
|
33
37
|
'id',
|
|
34
38
|
'name',
|
|
@@ -56,7 +60,7 @@ def _format_service(service):
|
|
|
56
60
|
class CreateService(command.ShowOne):
|
|
57
61
|
_description = _("Create new service")
|
|
58
62
|
|
|
59
|
-
def get_parser(self, prog_name):
|
|
63
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
60
64
|
parser = super().get_parser(prog_name)
|
|
61
65
|
parser.add_argument(
|
|
62
66
|
'type',
|
|
@@ -90,8 +94,12 @@ class CreateService(command.ShowOne):
|
|
|
90
94
|
)
|
|
91
95
|
return parser
|
|
92
96
|
|
|
93
|
-
def take_action(
|
|
94
|
-
|
|
97
|
+
def take_action(
|
|
98
|
+
self, parsed_args: argparse.Namespace
|
|
99
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
100
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
101
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
102
|
+
)
|
|
95
103
|
|
|
96
104
|
service = identity_client.create_service(
|
|
97
105
|
name=parsed_args.name,
|
|
@@ -106,7 +114,7 @@ class CreateService(command.ShowOne):
|
|
|
106
114
|
class DeleteService(command.Command):
|
|
107
115
|
_description = _("Delete service(s)")
|
|
108
116
|
|
|
109
|
-
def get_parser(self, prog_name):
|
|
117
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
110
118
|
parser = super().get_parser(prog_name)
|
|
111
119
|
parser.add_argument(
|
|
112
120
|
'service',
|
|
@@ -116,8 +124,10 @@ class DeleteService(command.Command):
|
|
|
116
124
|
)
|
|
117
125
|
return parser
|
|
118
126
|
|
|
119
|
-
def take_action(self, parsed_args):
|
|
120
|
-
identity_client =
|
|
127
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
128
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
129
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
130
|
+
)
|
|
121
131
|
result = 0
|
|
122
132
|
for i in parsed_args.service:
|
|
123
133
|
try:
|
|
@@ -145,7 +155,7 @@ class DeleteService(command.Command):
|
|
|
145
155
|
class ListService(command.Lister):
|
|
146
156
|
_description = _("List services")
|
|
147
157
|
|
|
148
|
-
def get_parser(self, prog_name):
|
|
158
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
149
159
|
parser = super().get_parser(prog_name)
|
|
150
160
|
parser.add_argument(
|
|
151
161
|
'--long',
|
|
@@ -155,8 +165,12 @@ class ListService(command.Lister):
|
|
|
155
165
|
)
|
|
156
166
|
return parser
|
|
157
167
|
|
|
158
|
-
def take_action(
|
|
159
|
-
|
|
168
|
+
def take_action(
|
|
169
|
+
self, parsed_args: argparse.Namespace
|
|
170
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
171
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
172
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
173
|
+
)
|
|
160
174
|
|
|
161
175
|
columns: tuple[str, ...] = ('id', 'name', 'type')
|
|
162
176
|
column_headers: tuple[str, ...] = ('ID', 'Name', 'Type')
|
|
@@ -175,7 +189,7 @@ class ListService(command.Lister):
|
|
|
175
189
|
class SetService(command.Command):
|
|
176
190
|
_description = _("Set service properties")
|
|
177
191
|
|
|
178
|
-
def get_parser(self, prog_name):
|
|
192
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
179
193
|
parser = super().get_parser(prog_name)
|
|
180
194
|
parser.add_argument(
|
|
181
195
|
'service',
|
|
@@ -214,8 +228,10 @@ class SetService(command.Command):
|
|
|
214
228
|
)
|
|
215
229
|
return parser
|
|
216
230
|
|
|
217
|
-
def take_action(self, parsed_args):
|
|
218
|
-
identity_client =
|
|
231
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
232
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
233
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
234
|
+
)
|
|
219
235
|
|
|
220
236
|
service = common.find_service_sdk(identity_client, parsed_args.service)
|
|
221
237
|
kwargs = {}
|
|
@@ -234,7 +250,7 @@ class SetService(command.Command):
|
|
|
234
250
|
class ShowService(command.ShowOne):
|
|
235
251
|
_description = _("Display service details")
|
|
236
252
|
|
|
237
|
-
def get_parser(self, prog_name):
|
|
253
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
238
254
|
parser = super().get_parser(prog_name)
|
|
239
255
|
parser.add_argument(
|
|
240
256
|
'service',
|
|
@@ -243,8 +259,12 @@ class ShowService(command.ShowOne):
|
|
|
243
259
|
)
|
|
244
260
|
return parser
|
|
245
261
|
|
|
246
|
-
def take_action(
|
|
247
|
-
|
|
262
|
+
def take_action(
|
|
263
|
+
self, parsed_args: argparse.Namespace
|
|
264
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
265
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
266
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
267
|
+
)
|
|
248
268
|
|
|
249
269
|
service = common.find_service_sdk(identity_client, parsed_args.service)
|
|
250
270
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
|
|
14
14
|
"""Service Provider action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
16
18
|
import logging
|
|
19
|
+
from typing import Any
|
|
17
20
|
|
|
21
|
+
from openstack import utils as sdk_utils
|
|
18
22
|
from osc_lib import exceptions
|
|
19
23
|
from osc_lib import utils
|
|
20
24
|
|
|
@@ -25,7 +29,7 @@ from openstackclient.i18n import _
|
|
|
25
29
|
LOG = logging.getLogger(__name__)
|
|
26
30
|
|
|
27
31
|
|
|
28
|
-
def _format_service_provider(sp):
|
|
32
|
+
def _format_service_provider(sp: Any) -> tuple[tuple[str, ...], Any]:
|
|
29
33
|
column_headers = (
|
|
30
34
|
'id',
|
|
31
35
|
'enabled',
|
|
@@ -51,7 +55,7 @@ def _format_service_provider(sp):
|
|
|
51
55
|
class CreateServiceProvider(command.ShowOne):
|
|
52
56
|
_description = _("Create new service provider")
|
|
53
57
|
|
|
54
|
-
def get_parser(self, prog_name):
|
|
58
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
55
59
|
parser = super().get_parser(prog_name)
|
|
56
60
|
parser.add_argument(
|
|
57
61
|
'service_provider_id',
|
|
@@ -98,8 +102,12 @@ class CreateServiceProvider(command.ShowOne):
|
|
|
98
102
|
|
|
99
103
|
return parser
|
|
100
104
|
|
|
101
|
-
def take_action(
|
|
102
|
-
|
|
105
|
+
def take_action(
|
|
106
|
+
self, parsed_args: argparse.Namespace
|
|
107
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
108
|
+
service_client = sdk_utils.ensure_service_version(
|
|
109
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
110
|
+
)
|
|
103
111
|
|
|
104
112
|
kwargs = {}
|
|
105
113
|
|
|
@@ -125,7 +133,7 @@ class CreateServiceProvider(command.ShowOne):
|
|
|
125
133
|
class DeleteServiceProvider(command.Command):
|
|
126
134
|
_description = _("Delete service provider(s)")
|
|
127
135
|
|
|
128
|
-
def get_parser(self, prog_name):
|
|
136
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
129
137
|
parser = super().get_parser(prog_name)
|
|
130
138
|
parser.add_argument(
|
|
131
139
|
'service_provider',
|
|
@@ -135,8 +143,10 @@ class DeleteServiceProvider(command.Command):
|
|
|
135
143
|
)
|
|
136
144
|
return parser
|
|
137
145
|
|
|
138
|
-
def take_action(self, parsed_args):
|
|
139
|
-
service_client =
|
|
146
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
147
|
+
service_client = sdk_utils.ensure_service_version(
|
|
148
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
149
|
+
)
|
|
140
150
|
result = 0
|
|
141
151
|
for i in parsed_args.service_provider:
|
|
142
152
|
try:
|
|
@@ -162,8 +172,12 @@ class DeleteServiceProvider(command.Command):
|
|
|
162
172
|
class ListServiceProvider(command.Lister):
|
|
163
173
|
_description = _("List service providers")
|
|
164
174
|
|
|
165
|
-
def take_action(
|
|
166
|
-
|
|
175
|
+
def take_action(
|
|
176
|
+
self, parsed_args: argparse.Namespace
|
|
177
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
178
|
+
service_client = sdk_utils.ensure_service_version(
|
|
179
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
180
|
+
)
|
|
167
181
|
data = service_client.service_providers()
|
|
168
182
|
|
|
169
183
|
column_headers = (
|
|
@@ -191,7 +205,7 @@ class ListServiceProvider(command.Lister):
|
|
|
191
205
|
class SetServiceProvider(command.ShowOne):
|
|
192
206
|
_description = _("Set service provider properties")
|
|
193
207
|
|
|
194
|
-
def get_parser(self, prog_name):
|
|
208
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
195
209
|
parser = super().get_parser(prog_name)
|
|
196
210
|
parser.add_argument(
|
|
197
211
|
'service_provider',
|
|
@@ -233,8 +247,12 @@ class SetServiceProvider(command.ShowOne):
|
|
|
233
247
|
)
|
|
234
248
|
return parser
|
|
235
249
|
|
|
236
|
-
def take_action(
|
|
237
|
-
|
|
250
|
+
def take_action(
|
|
251
|
+
self, parsed_args: argparse.Namespace
|
|
252
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
253
|
+
service_client = sdk_utils.ensure_service_version(
|
|
254
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
255
|
+
)
|
|
238
256
|
|
|
239
257
|
kwargs = {}
|
|
240
258
|
|
|
@@ -261,7 +279,7 @@ class SetServiceProvider(command.ShowOne):
|
|
|
261
279
|
class ShowServiceProvider(command.ShowOne):
|
|
262
280
|
_description = _("Display service provider details")
|
|
263
281
|
|
|
264
|
-
def get_parser(self, prog_name):
|
|
282
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
265
283
|
parser = super().get_parser(prog_name)
|
|
266
284
|
parser.add_argument(
|
|
267
285
|
'service_provider',
|
|
@@ -270,8 +288,12 @@ class ShowServiceProvider(command.ShowOne):
|
|
|
270
288
|
)
|
|
271
289
|
return parser
|
|
272
290
|
|
|
273
|
-
def take_action(
|
|
274
|
-
|
|
291
|
+
def take_action(
|
|
292
|
+
self, parsed_args: argparse.Namespace
|
|
293
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
294
|
+
service_client = sdk_utils.ensure_service_version(
|
|
295
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
296
|
+
)
|
|
275
297
|
service_provider = service_client.find_service_provider(
|
|
276
298
|
parsed_args.service_provider,
|
|
277
299
|
ignore_missing=False,
|
|
@@ -11,16 +11,27 @@
|
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
13
|
import argparse
|
|
14
|
+
from collections.abc import Sequence
|
|
15
|
+
from typing import Any
|
|
14
16
|
|
|
15
17
|
from openstackclient.i18n import _
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
class _CommaListAction(argparse.Action):
|
|
19
|
-
def __call__(
|
|
20
|
-
|
|
21
|
+
def __call__(
|
|
22
|
+
self,
|
|
23
|
+
parser: argparse.ArgumentParser,
|
|
24
|
+
namespace: argparse.Namespace,
|
|
25
|
+
values: str | Sequence[Any] | None,
|
|
26
|
+
option_string: str | None = None,
|
|
27
|
+
) -> None:
|
|
28
|
+
values = values.split(',') if isinstance(values, str) else values
|
|
29
|
+
setattr(namespace, self.dest, values)
|
|
21
30
|
|
|
22
31
|
|
|
23
|
-
def add_tag_filtering_option_to_parser(
|
|
32
|
+
def add_tag_filtering_option_to_parser(
|
|
33
|
+
parser: argparse.ArgumentParser, collection_name: str
|
|
34
|
+
) -> None:
|
|
24
35
|
parser.add_argument(
|
|
25
36
|
'--tags',
|
|
26
37
|
metavar='<tag>[,<tag>,...]',
|
|
@@ -63,7 +74,9 @@ def add_tag_filtering_option_to_parser(parser, collection_name):
|
|
|
63
74
|
)
|
|
64
75
|
|
|
65
76
|
|
|
66
|
-
def get_tag_filtering_args(
|
|
77
|
+
def get_tag_filtering_args(
|
|
78
|
+
parsed_args: argparse.Namespace, args: dict[str, Any]
|
|
79
|
+
) -> None:
|
|
67
80
|
if parsed_args.tags:
|
|
68
81
|
args['tags'] = ','.join(parsed_args.tags)
|
|
69
82
|
if parsed_args.tags_any:
|
|
@@ -74,7 +87,9 @@ def get_tag_filtering_args(parsed_args, args):
|
|
|
74
87
|
args['not-tags-any'] = ','.join(parsed_args.not_tags_any)
|
|
75
88
|
|
|
76
89
|
|
|
77
|
-
def add_tag_option_to_parser_for_create(
|
|
90
|
+
def add_tag_option_to_parser_for_create(
|
|
91
|
+
parser: argparse.ArgumentParser, resource_name: str
|
|
92
|
+
) -> None:
|
|
78
93
|
tag_group = parser.add_mutually_exclusive_group()
|
|
79
94
|
tag_group.add_argument(
|
|
80
95
|
'--tag',
|
|
@@ -89,7 +104,9 @@ def add_tag_option_to_parser_for_create(parser, resource_name):
|
|
|
89
104
|
)
|
|
90
105
|
|
|
91
106
|
|
|
92
|
-
def add_tag_option_to_parser_for_set(
|
|
107
|
+
def add_tag_option_to_parser_for_set(
|
|
108
|
+
parser: argparse.ArgumentParser, resource_name: str
|
|
109
|
+
) -> None:
|
|
93
110
|
parser.add_argument(
|
|
94
111
|
'--tag',
|
|
95
112
|
action='append',
|