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
|
@@ -13,8 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
"""Identity v3 Endpoint Group action implementations"""
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
16
18
|
import json
|
|
17
19
|
import logging
|
|
20
|
+
from typing import Any
|
|
18
21
|
|
|
19
22
|
from osc_lib import exceptions
|
|
20
23
|
from osc_lib import utils
|
|
@@ -30,7 +33,7 @@ LOG = logging.getLogger(__name__)
|
|
|
30
33
|
class _FiltersReader:
|
|
31
34
|
_description = _("Helper class capable of reading filters from files")
|
|
32
35
|
|
|
33
|
-
def _read_filters(self, path):
|
|
36
|
+
def _read_filters(self, path: str) -> Any:
|
|
34
37
|
"""Read and parse rules from path
|
|
35
38
|
|
|
36
39
|
Expect the file to contain a valid JSON structure.
|
|
@@ -62,7 +65,7 @@ class _FiltersReader:
|
|
|
62
65
|
class AddProjectToEndpointGroup(command.Command):
|
|
63
66
|
_description = _("Add a project to an endpoint group")
|
|
64
67
|
|
|
65
|
-
def get_parser(self, prog_name):
|
|
68
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
66
69
|
parser = super().get_parser(prog_name)
|
|
67
70
|
parser.add_argument(
|
|
68
71
|
'endpointgroup',
|
|
@@ -77,7 +80,7 @@ class AddProjectToEndpointGroup(command.Command):
|
|
|
77
80
|
common.add_project_domain_option_to_parser(parser)
|
|
78
81
|
return parser
|
|
79
82
|
|
|
80
|
-
def take_action(self, parsed_args):
|
|
83
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
81
84
|
client = self.app.client_manager.identity
|
|
82
85
|
|
|
83
86
|
endpointgroup = utils.find_resource(
|
|
@@ -96,7 +99,7 @@ class AddProjectToEndpointGroup(command.Command):
|
|
|
96
99
|
class CreateEndpointGroup(command.ShowOne, _FiltersReader):
|
|
97
100
|
_description = _("Create new endpoint group")
|
|
98
101
|
|
|
99
|
-
def get_parser(self, prog_name):
|
|
102
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
100
103
|
parser = super().get_parser(prog_name)
|
|
101
104
|
parser.add_argument(
|
|
102
105
|
'name',
|
|
@@ -114,7 +117,9 @@ class CreateEndpointGroup(command.ShowOne, _FiltersReader):
|
|
|
114
117
|
)
|
|
115
118
|
return parser
|
|
116
119
|
|
|
117
|
-
def take_action(
|
|
120
|
+
def take_action(
|
|
121
|
+
self, parsed_args: argparse.Namespace
|
|
122
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
118
123
|
identity_client = self.app.client_manager.identity
|
|
119
124
|
|
|
120
125
|
filters = None
|
|
@@ -130,13 +135,14 @@ class CreateEndpointGroup(command.ShowOne, _FiltersReader):
|
|
|
130
135
|
info = {}
|
|
131
136
|
endpoint_group._info.pop('links')
|
|
132
137
|
info.update(endpoint_group._info)
|
|
133
|
-
|
|
138
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
139
|
+
return col_headers, col_data
|
|
134
140
|
|
|
135
141
|
|
|
136
142
|
class DeleteEndpointGroup(command.Command):
|
|
137
143
|
_description = _("Delete endpoint group(s)")
|
|
138
144
|
|
|
139
|
-
def get_parser(self, prog_name):
|
|
145
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
140
146
|
parser = super().get_parser(prog_name)
|
|
141
147
|
parser.add_argument(
|
|
142
148
|
'endpointgroup',
|
|
@@ -146,7 +152,7 @@ class DeleteEndpointGroup(command.Command):
|
|
|
146
152
|
)
|
|
147
153
|
return parser
|
|
148
154
|
|
|
149
|
-
def take_action(self, parsed_args):
|
|
155
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
150
156
|
identity_client = self.app.client_manager.identity
|
|
151
157
|
result = 0
|
|
152
158
|
for i in parsed_args.endpointgroup:
|
|
@@ -176,7 +182,7 @@ class DeleteEndpointGroup(command.Command):
|
|
|
176
182
|
class ListEndpointGroup(command.Lister):
|
|
177
183
|
_description = _("List endpoint groups")
|
|
178
184
|
|
|
179
|
-
def get_parser(self, prog_name):
|
|
185
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
180
186
|
parser = super().get_parser(prog_name)
|
|
181
187
|
list_group = parser.add_mutually_exclusive_group()
|
|
182
188
|
list_group.add_argument(
|
|
@@ -196,7 +202,9 @@ class ListEndpointGroup(command.Lister):
|
|
|
196
202
|
)
|
|
197
203
|
return parser
|
|
198
204
|
|
|
199
|
-
def take_action(
|
|
205
|
+
def take_action(
|
|
206
|
+
self, parsed_args: argparse.Namespace
|
|
207
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
200
208
|
client = self.app.client_manager.identity
|
|
201
209
|
|
|
202
210
|
endpointgroup = None
|
|
@@ -241,7 +249,7 @@ class ListEndpointGroup(command.Lister):
|
|
|
241
249
|
class RemoveProjectFromEndpointGroup(command.Command):
|
|
242
250
|
_description = _("Remove project from endpoint group")
|
|
243
251
|
|
|
244
|
-
def get_parser(self, prog_name):
|
|
252
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
245
253
|
parser = super().get_parser(prog_name)
|
|
246
254
|
parser.add_argument(
|
|
247
255
|
'endpointgroup',
|
|
@@ -256,7 +264,7 @@ class RemoveProjectFromEndpointGroup(command.Command):
|
|
|
256
264
|
common.add_project_domain_option_to_parser(parser)
|
|
257
265
|
return parser
|
|
258
266
|
|
|
259
|
-
def take_action(self, parsed_args):
|
|
267
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
260
268
|
client = self.app.client_manager.identity
|
|
261
269
|
|
|
262
270
|
endpointgroup = utils.find_resource(
|
|
@@ -275,7 +283,7 @@ class RemoveProjectFromEndpointGroup(command.Command):
|
|
|
275
283
|
class SetEndpointGroup(command.Command, _FiltersReader):
|
|
276
284
|
_description = _("Set endpoint group properties")
|
|
277
285
|
|
|
278
|
-
def get_parser(self, prog_name):
|
|
286
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
279
287
|
parser = super().get_parser(prog_name)
|
|
280
288
|
parser.add_argument(
|
|
281
289
|
'endpointgroup',
|
|
@@ -300,7 +308,7 @@ class SetEndpointGroup(command.Command, _FiltersReader):
|
|
|
300
308
|
)
|
|
301
309
|
return parser
|
|
302
310
|
|
|
303
|
-
def take_action(self, parsed_args):
|
|
311
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
304
312
|
identity_client = self.app.client_manager.identity
|
|
305
313
|
endpointgroup = utils.find_resource(
|
|
306
314
|
identity_client.endpoint_groups, parsed_args.endpointgroup
|
|
@@ -321,7 +329,7 @@ class SetEndpointGroup(command.Command, _FiltersReader):
|
|
|
321
329
|
class ShowEndpointGroup(command.ShowOne):
|
|
322
330
|
_description = _("Display endpoint group details")
|
|
323
331
|
|
|
324
|
-
def get_parser(self, prog_name):
|
|
332
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
325
333
|
parser = super().get_parser(prog_name)
|
|
326
334
|
parser.add_argument(
|
|
327
335
|
'endpointgroup',
|
|
@@ -330,7 +338,9 @@ class ShowEndpointGroup(command.ShowOne):
|
|
|
330
338
|
)
|
|
331
339
|
return parser
|
|
332
340
|
|
|
333
|
-
def take_action(
|
|
341
|
+
def take_action(
|
|
342
|
+
self, parsed_args: argparse.Namespace
|
|
343
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
334
344
|
identity_client = self.app.client_manager.identity
|
|
335
345
|
endpoint_group = utils.find_resource(
|
|
336
346
|
identity_client.endpoint_groups, parsed_args.endpointgroup
|
|
@@ -339,4 +349,5 @@ class ShowEndpointGroup(command.ShowOne):
|
|
|
339
349
|
info = {}
|
|
340
350
|
endpoint_group._info.pop('links')
|
|
341
351
|
info.update(endpoint_group._info)
|
|
342
|
-
|
|
352
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
353
|
+
return col_headers, col_data
|
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
|
|
15
15
|
"""Identity v3 Protocols actions implementations"""
|
|
16
16
|
|
|
17
|
+
import argparse
|
|
18
|
+
from collections.abc import Iterable, Sequence
|
|
17
19
|
import logging
|
|
20
|
+
from typing import Any
|
|
18
21
|
|
|
22
|
+
from openstack import utils as sdk_utils
|
|
19
23
|
from osc_lib import exceptions
|
|
20
24
|
from osc_lib import utils
|
|
21
25
|
|
|
@@ -26,7 +30,7 @@ from openstackclient.i18n import _
|
|
|
26
30
|
LOG = logging.getLogger(__name__)
|
|
27
31
|
|
|
28
32
|
|
|
29
|
-
def _format_protocol(protocol):
|
|
33
|
+
def _format_protocol(protocol: Any) -> tuple[tuple[str, ...], Any]:
|
|
30
34
|
columns = ('name', 'idp_id', 'mapping_id')
|
|
31
35
|
column_headers = ('id', 'identity_provider', 'mapping')
|
|
32
36
|
return (
|
|
@@ -38,7 +42,7 @@ def _format_protocol(protocol):
|
|
|
38
42
|
class CreateProtocol(command.ShowOne):
|
|
39
43
|
_description = _("Create new federation protocol")
|
|
40
44
|
|
|
41
|
-
def get_parser(self, prog_name):
|
|
45
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
42
46
|
parser = super().get_parser(prog_name)
|
|
43
47
|
parser.add_argument(
|
|
44
48
|
'federation_protocol',
|
|
@@ -66,8 +70,12 @@ class CreateProtocol(command.ShowOne):
|
|
|
66
70
|
|
|
67
71
|
return parser
|
|
68
72
|
|
|
69
|
-
def take_action(
|
|
70
|
-
|
|
73
|
+
def take_action(
|
|
74
|
+
self, parsed_args: argparse.Namespace
|
|
75
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
76
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
77
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
78
|
+
)
|
|
71
79
|
|
|
72
80
|
protocol = identity_client.create_federation_protocol(
|
|
73
81
|
name=parsed_args.federation_protocol,
|
|
@@ -81,7 +89,7 @@ class CreateProtocol(command.ShowOne):
|
|
|
81
89
|
class DeleteProtocol(command.Command):
|
|
82
90
|
_description = _("Delete federation protocol(s)")
|
|
83
91
|
|
|
84
|
-
def get_parser(self, prog_name):
|
|
92
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
85
93
|
parser = super().get_parser(prog_name)
|
|
86
94
|
parser.add_argument(
|
|
87
95
|
'federation_protocol',
|
|
@@ -101,8 +109,10 @@ class DeleteProtocol(command.Command):
|
|
|
101
109
|
|
|
102
110
|
return parser
|
|
103
111
|
|
|
104
|
-
def take_action(self, parsed_args):
|
|
105
|
-
identity_client =
|
|
112
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
113
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
114
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
115
|
+
)
|
|
106
116
|
|
|
107
117
|
result = 0
|
|
108
118
|
for i in parsed_args.federation_protocol:
|
|
@@ -134,7 +144,7 @@ class DeleteProtocol(command.Command):
|
|
|
134
144
|
class ListProtocols(command.Lister):
|
|
135
145
|
_description = _("List federation protocols")
|
|
136
146
|
|
|
137
|
-
def get_parser(self, prog_name):
|
|
147
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
138
148
|
parser = super().get_parser(prog_name)
|
|
139
149
|
parser.add_argument(
|
|
140
150
|
'--identity-provider',
|
|
@@ -145,8 +155,12 @@ class ListProtocols(command.Lister):
|
|
|
145
155
|
|
|
146
156
|
return parser
|
|
147
157
|
|
|
148
|
-
def take_action(
|
|
149
|
-
|
|
158
|
+
def take_action(
|
|
159
|
+
self, parsed_args: argparse.Namespace
|
|
160
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
161
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
162
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
163
|
+
)
|
|
150
164
|
|
|
151
165
|
protocols = identity_client.federation_protocols(
|
|
152
166
|
parsed_args.identity_provider
|
|
@@ -163,7 +177,7 @@ class ListProtocols(command.Lister):
|
|
|
163
177
|
class SetProtocol(command.Command):
|
|
164
178
|
_description = _("Set federation protocol properties")
|
|
165
179
|
|
|
166
|
-
def get_parser(self, prog_name):
|
|
180
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
167
181
|
parser = super().get_parser(prog_name)
|
|
168
182
|
parser.add_argument(
|
|
169
183
|
'federation_protocol',
|
|
@@ -186,8 +200,12 @@ class SetProtocol(command.Command):
|
|
|
186
200
|
)
|
|
187
201
|
return parser
|
|
188
202
|
|
|
189
|
-
def take_action(
|
|
190
|
-
|
|
203
|
+
def take_action(
|
|
204
|
+
self, parsed_args: argparse.Namespace
|
|
205
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
206
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
207
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
208
|
+
)
|
|
191
209
|
|
|
192
210
|
kwargs = {'idp_id': parsed_args.identity_provider}
|
|
193
211
|
if parsed_args.federation_protocol:
|
|
@@ -202,7 +220,7 @@ class SetProtocol(command.Command):
|
|
|
202
220
|
class ShowProtocol(command.ShowOne):
|
|
203
221
|
_description = _("Display federation protocol details")
|
|
204
222
|
|
|
205
|
-
def get_parser(self, prog_name):
|
|
223
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
206
224
|
parser = super().get_parser(prog_name)
|
|
207
225
|
parser.add_argument(
|
|
208
226
|
'federation_protocol',
|
|
@@ -220,8 +238,12 @@ class ShowProtocol(command.ShowOne):
|
|
|
220
238
|
)
|
|
221
239
|
return parser
|
|
222
240
|
|
|
223
|
-
def take_action(
|
|
224
|
-
|
|
241
|
+
def take_action(
|
|
242
|
+
self, parsed_args: argparse.Namespace
|
|
243
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
244
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
245
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
246
|
+
)
|
|
225
247
|
|
|
226
248
|
protocol = identity_client.get_federation_protocol(
|
|
227
249
|
idp_id=parsed_args.identity_provider,
|
|
@@ -15,9 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
"""Group 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_group(group):
|
|
36
|
+
def _format_group(group: Any) -> tuple[tuple[str, ...], Any]:
|
|
33
37
|
columns = (
|
|
34
38
|
'description',
|
|
35
39
|
'domain_id',
|
|
@@ -51,7 +55,7 @@ def _format_group(group):
|
|
|
51
55
|
class AddUserToGroup(command.Command):
|
|
52
56
|
_description = _("Add user to group")
|
|
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
|
'group',
|
|
@@ -71,8 +75,10 @@ class AddUserToGroup(command.Command):
|
|
|
71
75
|
common.add_user_domain_option_to_parser(parser)
|
|
72
76
|
return parser
|
|
73
77
|
|
|
74
|
-
def take_action(self, parsed_args):
|
|
75
|
-
identity_client =
|
|
78
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
79
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
80
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
81
|
+
)
|
|
76
82
|
|
|
77
83
|
group_id = common.find_group_id_sdk(
|
|
78
84
|
identity_client, parsed_args.group, parsed_args.group_domain
|
|
@@ -111,7 +117,7 @@ class AddUserToGroup(command.Command):
|
|
|
111
117
|
class CheckUserInGroup(command.Command):
|
|
112
118
|
_description = _("Check user membership in group")
|
|
113
119
|
|
|
114
|
-
def get_parser(self, prog_name):
|
|
120
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
115
121
|
parser = super().get_parser(prog_name)
|
|
116
122
|
parser.add_argument(
|
|
117
123
|
'group',
|
|
@@ -127,8 +133,10 @@ class CheckUserInGroup(command.Command):
|
|
|
127
133
|
common.add_user_domain_option_to_parser(parser)
|
|
128
134
|
return parser
|
|
129
135
|
|
|
130
|
-
def take_action(self, parsed_args):
|
|
131
|
-
identity_client =
|
|
136
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
137
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
138
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
139
|
+
)
|
|
132
140
|
|
|
133
141
|
user_id = common.find_user_id_sdk(
|
|
134
142
|
identity_client,
|
|
@@ -168,7 +176,7 @@ class CheckUserInGroup(command.Command):
|
|
|
168
176
|
class CreateGroup(command.ShowOne):
|
|
169
177
|
_description = _("Create new group")
|
|
170
178
|
|
|
171
|
-
def get_parser(self, prog_name):
|
|
179
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
172
180
|
parser = super().get_parser(prog_name)
|
|
173
181
|
parser.add_argument(
|
|
174
182
|
'name',
|
|
@@ -192,8 +200,12 @@ class CreateGroup(command.ShowOne):
|
|
|
192
200
|
)
|
|
193
201
|
return parser
|
|
194
202
|
|
|
195
|
-
def take_action(
|
|
196
|
-
|
|
203
|
+
def take_action(
|
|
204
|
+
self, parsed_args: argparse.Namespace
|
|
205
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
206
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
207
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
208
|
+
)
|
|
197
209
|
|
|
198
210
|
kwargs = {}
|
|
199
211
|
if parsed_args.name:
|
|
@@ -230,7 +242,7 @@ class CreateGroup(command.ShowOne):
|
|
|
230
242
|
class DeleteGroup(command.Command):
|
|
231
243
|
_description = _("Delete group(s)")
|
|
232
244
|
|
|
233
|
-
def get_parser(self, prog_name):
|
|
245
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
234
246
|
parser = super().get_parser(prog_name)
|
|
235
247
|
parser.add_argument(
|
|
236
248
|
'groups',
|
|
@@ -245,8 +257,10 @@ class DeleteGroup(command.Command):
|
|
|
245
257
|
)
|
|
246
258
|
return parser
|
|
247
259
|
|
|
248
|
-
def take_action(self, parsed_args):
|
|
249
|
-
identity_client =
|
|
260
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
261
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
262
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
263
|
+
)
|
|
250
264
|
|
|
251
265
|
errors = 0
|
|
252
266
|
for group in parsed_args.groups:
|
|
@@ -277,7 +291,7 @@ class DeleteGroup(command.Command):
|
|
|
277
291
|
class ListGroup(command.Lister):
|
|
278
292
|
_description = _("List groups")
|
|
279
293
|
|
|
280
|
-
def get_parser(self, prog_name):
|
|
294
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
281
295
|
parser = super().get_parser(prog_name)
|
|
282
296
|
parser.add_argument(
|
|
283
297
|
'--domain',
|
|
@@ -298,8 +312,12 @@ class ListGroup(command.Lister):
|
|
|
298
312
|
)
|
|
299
313
|
return parser
|
|
300
314
|
|
|
301
|
-
def take_action(
|
|
302
|
-
|
|
315
|
+
def take_action(
|
|
316
|
+
self, parsed_args: argparse.Namespace
|
|
317
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
318
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
319
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
320
|
+
)
|
|
303
321
|
|
|
304
322
|
domain = None
|
|
305
323
|
if parsed_args.domain:
|
|
@@ -314,13 +332,10 @@ class ListGroup(command.Lister):
|
|
|
314
332
|
parsed_args.user,
|
|
315
333
|
parsed_args.user_domain,
|
|
316
334
|
)
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
data = identity_client.user_groups(user, domain_id=domain)
|
|
322
|
-
else:
|
|
323
|
-
data = identity_client.user_groups(user)
|
|
335
|
+
# NOTE(0weng): The API doesn't actually support filtering
|
|
336
|
+
# additionally by domain_id, so this doesn't really do
|
|
337
|
+
# anything.
|
|
338
|
+
data = identity_client.user_groups(user)
|
|
324
339
|
else:
|
|
325
340
|
if domain:
|
|
326
341
|
data = identity_client.groups(domain_id=domain)
|
|
@@ -348,7 +363,7 @@ class ListGroup(command.Lister):
|
|
|
348
363
|
class RemoveUserFromGroup(command.Command):
|
|
349
364
|
_description = _("Remove user from group")
|
|
350
365
|
|
|
351
|
-
def get_parser(self, prog_name):
|
|
366
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
352
367
|
parser = super().get_parser(prog_name)
|
|
353
368
|
parser.add_argument(
|
|
354
369
|
'group',
|
|
@@ -368,8 +383,10 @@ class RemoveUserFromGroup(command.Command):
|
|
|
368
383
|
common.add_user_domain_option_to_parser(parser)
|
|
369
384
|
return parser
|
|
370
385
|
|
|
371
|
-
def take_action(self, parsed_args):
|
|
372
|
-
identity_client =
|
|
386
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
387
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
388
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
389
|
+
)
|
|
373
390
|
|
|
374
391
|
group_id = common.find_group_id_sdk(
|
|
375
392
|
identity_client, parsed_args.group, parsed_args.group_domain
|
|
@@ -408,7 +425,7 @@ class RemoveUserFromGroup(command.Command):
|
|
|
408
425
|
class SetGroup(command.Command):
|
|
409
426
|
_description = _("Set group properties")
|
|
410
427
|
|
|
411
|
-
def get_parser(self, prog_name):
|
|
428
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
412
429
|
parser = super().get_parser(prog_name)
|
|
413
430
|
parser.add_argument(
|
|
414
431
|
'group',
|
|
@@ -432,8 +449,10 @@ class SetGroup(command.Command):
|
|
|
432
449
|
)
|
|
433
450
|
return parser
|
|
434
451
|
|
|
435
|
-
def take_action(self, parsed_args):
|
|
436
|
-
identity_client =
|
|
452
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
453
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
454
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
455
|
+
)
|
|
437
456
|
group = common.find_group_id_sdk(
|
|
438
457
|
identity_client, parsed_args.group, parsed_args.domain
|
|
439
458
|
)
|
|
@@ -449,7 +468,7 @@ class SetGroup(command.Command):
|
|
|
449
468
|
class ShowGroup(command.ShowOne):
|
|
450
469
|
_description = _("Display group details")
|
|
451
470
|
|
|
452
|
-
def get_parser(self, prog_name):
|
|
471
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
453
472
|
parser = super().get_parser(prog_name)
|
|
454
473
|
parser.add_argument(
|
|
455
474
|
'group',
|
|
@@ -463,8 +482,12 @@ class ShowGroup(command.ShowOne):
|
|
|
463
482
|
)
|
|
464
483
|
return parser
|
|
465
484
|
|
|
466
|
-
def take_action(
|
|
467
|
-
|
|
485
|
+
def take_action(
|
|
486
|
+
self, parsed_args: argparse.Namespace
|
|
487
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
488
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
489
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
490
|
+
)
|
|
468
491
|
|
|
469
492
|
if parsed_args.domain:
|
|
470
493
|
domain = common.find_domain_id_sdk(
|