python-openstackclient 8.2.0__py3-none-any.whl → 9.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/api/object_store_v1.py +4 -1
- openstackclient/command.py +27 -0
- openstackclient/common/availability_zone.py +1 -1
- openstackclient/common/clientmanager.py +59 -21
- openstackclient/common/configuration.py +1 -1
- openstackclient/common/extension.py +1 -1
- openstackclient/common/limits.py +1 -1
- openstackclient/common/module.py +5 -3
- openstackclient/common/project_cleanup.py +10 -8
- openstackclient/common/quota.py +54 -23
- openstackclient/common/versions.py +1 -2
- openstackclient/compute/v2/agent.py +1 -1
- openstackclient/compute/v2/aggregate.py +6 -5
- openstackclient/compute/v2/console.py +5 -3
- openstackclient/compute/v2/console_connection.py +1 -1
- openstackclient/compute/v2/flavor.py +1 -1
- openstackclient/compute/v2/host.py +1 -1
- openstackclient/compute/v2/hypervisor.py +1 -1
- openstackclient/compute/v2/hypervisor_stats.py +1 -1
- openstackclient/compute/v2/keypair.py +1 -1
- openstackclient/compute/v2/server.py +78 -29
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_event.py +1 -1
- openstackclient/compute/v2/server_group.py +4 -2
- openstackclient/compute/v2/server_image.py +1 -1
- openstackclient/compute/v2/server_migration.py +1 -1
- openstackclient/compute/v2/server_volume.py +1 -1
- openstackclient/compute/v2/service.py +1 -1
- openstackclient/compute/v2/usage.py +6 -4
- openstackclient/identity/common.py +33 -1
- openstackclient/identity/v2_0/catalog.py +3 -2
- openstackclient/identity/v2_0/ec2creds.py +1 -1
- openstackclient/identity/v2_0/endpoint.py +1 -1
- openstackclient/identity/v2_0/project.py +17 -7
- openstackclient/identity/v2_0/role.py +1 -1
- openstackclient/identity/v2_0/role_assignment.py +3 -3
- openstackclient/identity/v2_0/service.py +4 -2
- openstackclient/identity/v2_0/token.py +1 -1
- openstackclient/identity/v2_0/user.py +2 -2
- openstackclient/identity/v3/access_rule.py +16 -4
- openstackclient/identity/v3/application_credential.py +30 -10
- openstackclient/identity/v3/catalog.py +3 -3
- openstackclient/identity/v3/consumer.py +1 -1
- openstackclient/identity/v3/credential.py +1 -1
- openstackclient/identity/v3/domain.py +10 -4
- openstackclient/identity/v3/ec2creds.py +1 -1
- openstackclient/identity/v3/endpoint.py +33 -12
- openstackclient/identity/v3/endpoint_group.py +1 -1
- openstackclient/identity/v3/federation_protocol.py +40 -41
- openstackclient/identity/v3/group.py +11 -5
- openstackclient/identity/v3/identity_provider.py +12 -10
- openstackclient/identity/v3/implied_role.py +1 -1
- openstackclient/identity/v3/limit.py +86 -85
- openstackclient/identity/v3/mapping.py +1 -1
- openstackclient/identity/v3/policy.py +1 -1
- openstackclient/identity/v3/project.py +191 -115
- openstackclient/identity/v3/region.py +1 -1
- openstackclient/identity/v3/registered_limit.py +97 -109
- openstackclient/identity/v3/role.py +20 -39
- openstackclient/identity/v3/role_assignment.py +12 -23
- openstackclient/identity/v3/service.py +1 -1
- openstackclient/identity/v3/service_provider.py +1 -1
- openstackclient/identity/v3/tag.py +1 -11
- openstackclient/identity/v3/token.py +3 -2
- openstackclient/identity/v3/trust.py +4 -2
- openstackclient/identity/v3/unscoped_saml.py +1 -1
- openstackclient/identity/v3/user.py +22 -13
- openstackclient/image/v1/image.py +19 -16
- openstackclient/image/v2/cache.py +1 -1
- openstackclient/image/v2/image.py +16 -12
- openstackclient/image/v2/info.py +1 -1
- openstackclient/image/v2/metadef_namespaces.py +1 -1
- openstackclient/image/v2/metadef_objects.py +1 -1
- openstackclient/image/v2/metadef_properties.py +3 -2
- openstackclient/image/v2/metadef_resource_type_association.py +1 -1
- openstackclient/image/v2/metadef_resource_types.py +1 -1
- openstackclient/image/v2/task.py +1 -1
- openstackclient/network/common.py +10 -9
- openstackclient/network/v2/address_group.py +4 -3
- openstackclient/network/v2/address_scope.py +8 -6
- openstackclient/network/v2/default_security_group_rule.py +9 -8
- openstackclient/network/v2/floating_ip.py +16 -9
- openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
- openstackclient/network/v2/ip_availability.py +7 -4
- openstackclient/network/v2/l3_conntrack_helper.py +11 -4
- openstackclient/network/v2/local_ip.py +13 -7
- openstackclient/network/v2/local_ip_association.py +7 -4
- openstackclient/network/v2/ndp_proxy.py +13 -6
- openstackclient/network/v2/network.py +33 -16
- openstackclient/network/v2/network_agent.py +5 -5
- openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
- openstackclient/network/v2/network_flavor.py +1 -1
- openstackclient/network/v2/network_flavor_profile.py +1 -1
- openstackclient/network/v2/network_meter.py +1 -1
- openstackclient/network/v2/network_meter_rule.py +1 -1
- openstackclient/network/v2/network_qos_policy.py +7 -5
- openstackclient/network/v2/network_qos_rule.py +1 -1
- openstackclient/network/v2/network_qos_rule_type.py +1 -1
- openstackclient/network/v2/network_rbac.py +8 -5
- openstackclient/network/v2/network_segment.py +2 -2
- openstackclient/network/v2/network_segment_range.py +13 -6
- openstackclient/network/v2/network_service_provider.py +1 -1
- openstackclient/network/v2/network_trunk.py +65 -42
- openstackclient/network/v2/port.py +22 -20
- openstackclient/network/v2/router.py +19 -8
- openstackclient/network/v2/security_group.py +10 -6
- openstackclient/network/v2/security_group_rule.py +11 -5
- openstackclient/network/v2/subnet.py +17 -18
- openstackclient/network/v2/subnet_pool.py +11 -9
- openstackclient/network/v2/taas/__init__.py +0 -0
- openstackclient/network/v2/taas/tap_flow.py +245 -0
- openstackclient/network/v2/taas/tap_mirror.py +237 -0
- openstackclient/network/v2/taas/tap_service.py +211 -0
- openstackclient/object/v1/account.py +1 -1
- openstackclient/object/v1/container.py +1 -1
- openstackclient/object/v1/object.py +1 -1
- openstackclient/shell.py +18 -8
- openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
- openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
- openstackclient/tests/functional/image/v2/test_cache.py +54 -0
- openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
- openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +46 -132
- openstackclient/tests/unit/common/test_command.py +1 -1
- openstackclient/tests/unit/common/test_extension.py +2 -3
- openstackclient/tests/unit/common/test_module.py +14 -7
- openstackclient/tests/unit/common/test_quota.py +79 -0
- openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
- openstackclient/tests/unit/compute/v2/test_console.py +1 -4
- openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
- openstackclient/tests/unit/compute/v2/test_server.py +370 -38
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
- openstackclient/tests/unit/compute/v2/test_service.py +1 -3
- openstackclient/tests/unit/fakes.py +35 -134
- openstackclient/tests/unit/identity/test_common.py +100 -0
- openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
- openstackclient/tests/unit/identity/v3/fakes.py +10 -2
- openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
- openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
- openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +4 -2
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
- openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
- openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
- openstackclient/tests/unit/identity/v3/test_project.py +832 -513
- openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +356 -221
- openstackclient/tests/unit/identity/v3/test_role.py +1 -82
- openstackclient/tests/unit/identity/v3/test_user.py +7 -51
- openstackclient/tests/unit/image/v2/test_image.py +116 -5
- openstackclient/tests/unit/network/test_common.py +9 -13
- openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
- openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
- openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
- openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
- openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
- openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
- openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
- openstackclient/tests/unit/network/v2/test_network.py +41 -37
- openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
- openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
- openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
- openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
- openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
- openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
- openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
- openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
- openstackclient/tests/unit/network/v2/test_port.py +75 -86
- openstackclient/tests/unit/network/v2/test_router.py +104 -126
- openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
- openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
- openstackclient/tests/unit/volume/test_find_resource.py +4 -13
- openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume.py +38 -12
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
- openstackclient/volume/client.py +7 -17
- openstackclient/volume/v2/backup_record.py +1 -1
- openstackclient/volume/v2/consistency_group.py +9 -9
- openstackclient/volume/v2/consistency_group_snapshot.py +3 -3
- openstackclient/volume/v2/qos_specs.py +3 -3
- openstackclient/volume/v2/service.py +1 -1
- openstackclient/volume/v2/volume.py +14 -7
- openstackclient/volume/v2/volume_backend.py +1 -1
- openstackclient/volume/v2/volume_backup.py +7 -5
- openstackclient/volume/v2/volume_host.py +1 -2
- openstackclient/volume/v2/volume_snapshot.py +4 -4
- openstackclient/volume/v2/volume_transfer_request.py +3 -3
- openstackclient/volume/v2/volume_type.py +16 -11
- openstackclient/volume/v3/block_storage_cleanup.py +1 -1
- openstackclient/volume/v3/block_storage_cluster.py +1 -1
- openstackclient/volume/v3/block_storage_log_level.py +1 -1
- openstackclient/volume/v3/block_storage_manage.py +1 -1
- openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
- openstackclient/volume/v3/service.py +1 -1
- openstackclient/volume/v3/volume.py +16 -9
- openstackclient/volume/v3/volume_attachment.py +6 -5
- openstackclient/volume/v3/volume_backup.py +20 -5
- openstackclient/volume/v3/volume_group.py +1 -1
- openstackclient/volume/v3/volume_group_snapshot.py +1 -1
- openstackclient/volume/v3/volume_group_type.py +1 -1
- openstackclient/volume/v3/volume_message.py +1 -1
- openstackclient/volume/v3/volume_snapshot.py +4 -4
- openstackclient/volume/v3/volume_transfer_request.py +3 -3
- openstackclient/volume/v3/volume_type.py +20 -14
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/METADATA +15 -13
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/RECORD +231 -219
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/entry_points.txt +15 -0
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/AUTHORS +15 -0
- python_openstackclient-9.0.0.dist-info/pbr.json +1 -0
- openstackclient/tests/unit/common/test_logs.py +0 -221
- python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/LICENSE +0 -0
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/top_level.txt +0 -0
|
@@ -15,16 +15,39 @@
|
|
|
15
15
|
|
|
16
16
|
import logging
|
|
17
17
|
|
|
18
|
-
from osc_lib.command import command
|
|
19
18
|
from osc_lib import exceptions
|
|
20
19
|
from osc_lib import utils
|
|
21
20
|
|
|
21
|
+
from openstackclient import command
|
|
22
22
|
from openstackclient.i18n import _
|
|
23
23
|
from openstackclient.identity import common as common_utils
|
|
24
24
|
|
|
25
25
|
LOG = logging.getLogger(__name__)
|
|
26
26
|
|
|
27
27
|
|
|
28
|
+
def _format_registered_limit(registered_limit):
|
|
29
|
+
columns = (
|
|
30
|
+
'default_limit',
|
|
31
|
+
'description',
|
|
32
|
+
'id',
|
|
33
|
+
'region_id',
|
|
34
|
+
'resource_name',
|
|
35
|
+
'service_id',
|
|
36
|
+
)
|
|
37
|
+
column_headers = (
|
|
38
|
+
'default_limit',
|
|
39
|
+
'description',
|
|
40
|
+
'id',
|
|
41
|
+
'region_id',
|
|
42
|
+
'resource_name',
|
|
43
|
+
'service_id',
|
|
44
|
+
)
|
|
45
|
+
return (
|
|
46
|
+
column_headers,
|
|
47
|
+
utils.get_item_properties(registered_limit, columns),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
28
51
|
class CreateRegisteredLimit(command.ShowOne):
|
|
29
52
|
_description = _("Create a registered limit")
|
|
30
53
|
|
|
@@ -44,7 +67,10 @@ class CreateRegisteredLimit(command.ShowOne):
|
|
|
44
67
|
'--service',
|
|
45
68
|
metavar='<service>',
|
|
46
69
|
required=True,
|
|
47
|
-
help=_(
|
|
70
|
+
help=_(
|
|
71
|
+
'Service responsible for the resource to limit (required) '
|
|
72
|
+
'(name or ID)'
|
|
73
|
+
),
|
|
48
74
|
)
|
|
49
75
|
parser.add_argument(
|
|
50
76
|
'--default-limit',
|
|
@@ -61,43 +87,28 @@ class CreateRegisteredLimit(command.ShowOne):
|
|
|
61
87
|
return parser
|
|
62
88
|
|
|
63
89
|
def take_action(self, parsed_args):
|
|
64
|
-
identity_client = self.app.client_manager.identity
|
|
90
|
+
identity_client = self.app.client_manager.sdk_connection.identity
|
|
91
|
+
|
|
92
|
+
kwargs = {}
|
|
93
|
+
|
|
94
|
+
if parsed_args.description:
|
|
95
|
+
kwargs["description"] = parsed_args.description
|
|
96
|
+
|
|
97
|
+
kwargs["service_id"] = common_utils.find_service_sdk(
|
|
98
|
+
identity_client, parsed_args.service
|
|
99
|
+
).id
|
|
65
100
|
|
|
66
|
-
service = utils.find_resource(
|
|
67
|
-
identity_client.services, parsed_args.service
|
|
68
|
-
)
|
|
69
|
-
region = None
|
|
70
101
|
if parsed_args.region:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# filter by name, osc_lib.utils.find_resource() method cannot
|
|
75
|
-
# be used because that method try to fall back to list all the
|
|
76
|
-
# resource if requested resource cannot be get via name. Which
|
|
77
|
-
# ends up with NoUniqueMatch error.
|
|
78
|
-
# So osc_lib.utils.find_resource() function cannot be used for
|
|
79
|
-
# 'regions', using common_utils.get_resource() instead.
|
|
80
|
-
region = common_utils.get_resource(
|
|
81
|
-
identity_client.regions, parsed_args.region
|
|
82
|
-
)
|
|
83
|
-
else:
|
|
84
|
-
self.log.warning(
|
|
85
|
-
_(
|
|
86
|
-
"Passing 'None' to indicate no region is deprecated. "
|
|
87
|
-
"Instead, don't pass --region."
|
|
88
|
-
)
|
|
89
|
-
)
|
|
102
|
+
kwargs["region_id"] = identity_client.get_region(
|
|
103
|
+
parsed_args.region
|
|
104
|
+
).id
|
|
90
105
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
parsed_args.resource_name,
|
|
94
|
-
parsed_args.default_limit,
|
|
95
|
-
description=parsed_args.description,
|
|
96
|
-
region=region,
|
|
97
|
-
)
|
|
106
|
+
kwargs["resource_name"] = parsed_args.resource_name
|
|
107
|
+
kwargs["default_limit"] = parsed_args.default_limit
|
|
98
108
|
|
|
99
|
-
registered_limit.
|
|
100
|
-
|
|
109
|
+
registered_limit = identity_client.create_registered_limit(**kwargs)
|
|
110
|
+
|
|
111
|
+
return _format_registered_limit(registered_limit)
|
|
101
112
|
|
|
102
113
|
|
|
103
114
|
class DeleteRegisteredLimit(command.Command):
|
|
@@ -106,20 +117,25 @@ class DeleteRegisteredLimit(command.Command):
|
|
|
106
117
|
def get_parser(self, prog_name):
|
|
107
118
|
parser = super().get_parser(prog_name)
|
|
108
119
|
parser.add_argument(
|
|
109
|
-
'
|
|
110
|
-
metavar='<registered-
|
|
120
|
+
'registered_limits',
|
|
121
|
+
metavar='<registered-limits>',
|
|
111
122
|
nargs="+",
|
|
112
|
-
help=_(
|
|
123
|
+
help=_(
|
|
124
|
+
'Registered limit(s) to delete (ID) '
|
|
125
|
+
'(repeat option to remove multiple registered limits)'
|
|
126
|
+
),
|
|
113
127
|
)
|
|
114
128
|
return parser
|
|
115
129
|
|
|
116
130
|
def take_action(self, parsed_args):
|
|
117
|
-
identity_client = self.app.client_manager.identity
|
|
131
|
+
identity_client = self.app.client_manager.sdk_connection.identity
|
|
118
132
|
|
|
119
133
|
errors = 0
|
|
120
|
-
for registered_limit_id in parsed_args.
|
|
134
|
+
for registered_limit_id in parsed_args.registered_limits:
|
|
121
135
|
try:
|
|
122
|
-
identity_client.
|
|
136
|
+
identity_client.delete_registered_limit(
|
|
137
|
+
registered_limit_id, ignore_missing=False
|
|
138
|
+
)
|
|
123
139
|
except Exception as e:
|
|
124
140
|
errors += 1
|
|
125
141
|
from pprint import pprint
|
|
@@ -134,7 +150,7 @@ class DeleteRegisteredLimit(command.Command):
|
|
|
134
150
|
)
|
|
135
151
|
|
|
136
152
|
if errors > 0:
|
|
137
|
-
total = len(parsed_args.
|
|
153
|
+
total = len(parsed_args.registered_limits)
|
|
138
154
|
msg = _(
|
|
139
155
|
"%(errors)s of %(total)s registered limits failed to delete."
|
|
140
156
|
) % {'errors': errors, 'total': total}
|
|
@@ -149,7 +165,9 @@ class ListRegisteredLimit(command.Lister):
|
|
|
149
165
|
parser.add_argument(
|
|
150
166
|
'--service',
|
|
151
167
|
metavar='<service>',
|
|
152
|
-
help=_(
|
|
168
|
+
help=_(
|
|
169
|
+
'Service responsible for the resource to limit (name or ID)'
|
|
170
|
+
),
|
|
153
171
|
)
|
|
154
172
|
parser.add_argument(
|
|
155
173
|
'--resource-name',
|
|
@@ -165,40 +183,22 @@ class ListRegisteredLimit(command.Lister):
|
|
|
165
183
|
return parser
|
|
166
184
|
|
|
167
185
|
def take_action(self, parsed_args):
|
|
168
|
-
identity_client = self.app.client_manager.identity
|
|
186
|
+
identity_client = self.app.client_manager.sdk_connection.identity
|
|
169
187
|
|
|
170
|
-
|
|
188
|
+
kwargs = {}
|
|
171
189
|
if parsed_args.service:
|
|
172
|
-
|
|
190
|
+
kwargs["service_id"] = common_utils.find_service_sdk(
|
|
173
191
|
identity_client, parsed_args.service
|
|
174
|
-
)
|
|
175
|
-
region = None
|
|
192
|
+
).id
|
|
176
193
|
if parsed_args.region:
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
# filter by name, osc_lib.utils.find_resource() method cannot
|
|
181
|
-
# be used because that method try to fall back to list all the
|
|
182
|
-
# resource if requested resource cannot be get via name. Which
|
|
183
|
-
# ends up with NoUniqueMatch error.
|
|
184
|
-
# So osc_lib.utils.find_resource() function cannot be used for
|
|
185
|
-
# 'regions', using common_utils.get_resource() instead.
|
|
186
|
-
region = common_utils.get_resource(
|
|
187
|
-
identity_client.regions, parsed_args.region
|
|
188
|
-
)
|
|
189
|
-
else:
|
|
190
|
-
self.log.warning(
|
|
191
|
-
_(
|
|
192
|
-
"Passing 'None' to indicate no region is deprecated. "
|
|
193
|
-
"Instead, don't pass --region."
|
|
194
|
-
)
|
|
195
|
-
)
|
|
194
|
+
kwargs["region_id"] = identity_client.get_region(
|
|
195
|
+
parsed_args.region
|
|
196
|
+
).id
|
|
196
197
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
)
|
|
198
|
+
if parsed_args.resource_name:
|
|
199
|
+
kwargs["resource_name"] = parsed_args.resource_name
|
|
200
|
+
|
|
201
|
+
registered_limits = identity_client.registered_limits(**kwargs)
|
|
202
202
|
|
|
203
203
|
columns = (
|
|
204
204
|
'ID',
|
|
@@ -228,9 +228,9 @@ class SetRegisteredLimit(command.ShowOne):
|
|
|
228
228
|
'--service',
|
|
229
229
|
metavar='<service>',
|
|
230
230
|
help=_(
|
|
231
|
-
'Service to be updated responsible for the resource to '
|
|
232
|
-
'
|
|
233
|
-
'be different than existing value otherwise it will be '
|
|
231
|
+
'Service to be updated responsible for the resource to limit '
|
|
232
|
+
'(name or ID). Either --service, --resource-name or --region '
|
|
233
|
+
'must be different than existing value otherwise it will be '
|
|
234
234
|
'duplicate entry'
|
|
235
235
|
),
|
|
236
236
|
)
|
|
@@ -268,44 +268,33 @@ class SetRegisteredLimit(command.ShowOne):
|
|
|
268
268
|
return parser
|
|
269
269
|
|
|
270
270
|
def take_action(self, parsed_args):
|
|
271
|
-
identity_client = self.app.client_manager.identity
|
|
271
|
+
identity_client = self.app.client_manager.sdk_connection.identity
|
|
272
272
|
|
|
273
|
-
|
|
273
|
+
kwargs = {}
|
|
274
274
|
if parsed_args.service:
|
|
275
|
-
|
|
275
|
+
kwargs["service_id"] = common_utils.find_service_sdk(
|
|
276
276
|
identity_client, parsed_args.service
|
|
277
|
-
)
|
|
277
|
+
).id
|
|
278
|
+
|
|
279
|
+
if parsed_args.resource_name:
|
|
280
|
+
kwargs["resource_name"] = parsed_args.resource_name
|
|
281
|
+
|
|
282
|
+
if parsed_args.default_limit:
|
|
283
|
+
kwargs["default_limit"] = parsed_args.default_limit
|
|
284
|
+
|
|
285
|
+
if parsed_args.description:
|
|
286
|
+
kwargs["description"] = parsed_args.description
|
|
278
287
|
|
|
279
|
-
region = None
|
|
280
288
|
if parsed_args.region:
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
# filter by name, osc_lib.utils.find_resource() method cannot
|
|
285
|
-
# be used because that method try to fall back to list all the
|
|
286
|
-
# resource if requested resource cannot be get via name. Which
|
|
287
|
-
# ends up with NoUniqueMatch error.
|
|
288
|
-
# So osc_lib.utils.find_resource() function cannot be used for
|
|
289
|
-
# 'regions', using common_utils.get_resource() instead.
|
|
290
|
-
region = common_utils.get_resource(
|
|
291
|
-
identity_client.regions, parsed_args.region
|
|
292
|
-
)
|
|
293
|
-
else:
|
|
294
|
-
self.log.warning(
|
|
295
|
-
_("Passing 'None' to indicate no region is deprecated.")
|
|
296
|
-
)
|
|
289
|
+
kwargs["region_id"] = identity_client.get_region(
|
|
290
|
+
parsed_args.region
|
|
291
|
+
).id
|
|
297
292
|
|
|
298
|
-
registered_limit = identity_client.
|
|
299
|
-
parsed_args.registered_limit_id,
|
|
300
|
-
service=service,
|
|
301
|
-
resource_name=parsed_args.resource_name,
|
|
302
|
-
default_limit=parsed_args.default_limit,
|
|
303
|
-
description=parsed_args.description,
|
|
304
|
-
region=region,
|
|
293
|
+
registered_limit = identity_client.update_registered_limit(
|
|
294
|
+
parsed_args.registered_limit_id, **kwargs
|
|
305
295
|
)
|
|
306
296
|
|
|
307
|
-
registered_limit
|
|
308
|
-
return zip(*sorted(registered_limit._info.items()))
|
|
297
|
+
return _format_registered_limit(registered_limit)
|
|
309
298
|
|
|
310
299
|
|
|
311
300
|
class ShowRegisteredLimit(command.ShowOne):
|
|
@@ -321,9 +310,8 @@ class ShowRegisteredLimit(command.ShowOne):
|
|
|
321
310
|
return parser
|
|
322
311
|
|
|
323
312
|
def take_action(self, parsed_args):
|
|
324
|
-
identity_client = self.app.client_manager.identity
|
|
325
|
-
registered_limit = identity_client.
|
|
313
|
+
identity_client = self.app.client_manager.sdk_connection.identity
|
|
314
|
+
registered_limit = identity_client.get_registered_limit(
|
|
326
315
|
parsed_args.registered_limit_id
|
|
327
316
|
)
|
|
328
|
-
registered_limit
|
|
329
|
-
return zip(*sorted(registered_limit._info.items()))
|
|
317
|
+
return _format_registered_limit(registered_limit)
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
import logging
|
|
19
19
|
|
|
20
20
|
from openstack import exceptions as sdk_exc
|
|
21
|
-
from osc_lib.command import command
|
|
22
21
|
from osc_lib import exceptions
|
|
23
22
|
from osc_lib import utils
|
|
24
23
|
|
|
24
|
+
from openstackclient import command
|
|
25
25
|
from openstackclient.i18n import _
|
|
26
26
|
from openstackclient.identity import common
|
|
27
27
|
|
|
@@ -82,32 +82,12 @@ def _add_identity_and_resource_options_to_parser(parser):
|
|
|
82
82
|
common.add_inherited_option_to_parser(parser)
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
def _find_sdk_id(
|
|
86
|
-
find_command, name_or_id, validate_actor_existence=True, **kwargs
|
|
87
|
-
):
|
|
88
|
-
try:
|
|
89
|
-
resource = find_command(
|
|
90
|
-
name_or_id=name_or_id, ignore_missing=False, **kwargs
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
# Mimic the behavior of
|
|
94
|
-
# openstackclient.identity.common._find_identity_resource()
|
|
95
|
-
# and ignore if we don't have permission to find a resource.
|
|
96
|
-
except sdk_exc.ForbiddenException:
|
|
97
|
-
return name_or_id
|
|
98
|
-
except sdk_exc.ResourceNotFound as exc:
|
|
99
|
-
if not validate_actor_existence:
|
|
100
|
-
return name_or_id
|
|
101
|
-
raise exceptions.CommandError from exc
|
|
102
|
-
return resource.id
|
|
103
|
-
|
|
104
|
-
|
|
105
85
|
def _process_identity_and_resource_options(
|
|
106
86
|
parsed_args, identity_client, validate_actor_existence=True
|
|
107
87
|
):
|
|
108
88
|
def _find_user():
|
|
109
89
|
domain_id = (
|
|
110
|
-
_find_sdk_id(
|
|
90
|
+
common._find_sdk_id(
|
|
111
91
|
identity_client.find_domain,
|
|
112
92
|
name_or_id=parsed_args.user_domain,
|
|
113
93
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -115,7 +95,7 @@ def _process_identity_and_resource_options(
|
|
|
115
95
|
if parsed_args.user_domain
|
|
116
96
|
else None
|
|
117
97
|
)
|
|
118
|
-
return _find_sdk_id(
|
|
98
|
+
return common._find_sdk_id(
|
|
119
99
|
identity_client.find_user,
|
|
120
100
|
name_or_id=parsed_args.user,
|
|
121
101
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -124,7 +104,7 @@ def _process_identity_and_resource_options(
|
|
|
124
104
|
|
|
125
105
|
def _find_group():
|
|
126
106
|
domain_id = (
|
|
127
|
-
_find_sdk_id(
|
|
107
|
+
common._find_sdk_id(
|
|
128
108
|
identity_client.find_domain,
|
|
129
109
|
name_or_id=parsed_args.group_domain,
|
|
130
110
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -132,7 +112,7 @@ def _process_identity_and_resource_options(
|
|
|
132
112
|
if parsed_args.group_domain
|
|
133
113
|
else None
|
|
134
114
|
)
|
|
135
|
-
return _find_sdk_id(
|
|
115
|
+
return common._find_sdk_id(
|
|
136
116
|
identity_client.find_group,
|
|
137
117
|
name_or_id=parsed_args.group,
|
|
138
118
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -141,7 +121,7 @@ def _process_identity_and_resource_options(
|
|
|
141
121
|
|
|
142
122
|
def _find_project():
|
|
143
123
|
domain_id = (
|
|
144
|
-
_find_sdk_id(
|
|
124
|
+
common._find_sdk_id(
|
|
145
125
|
identity_client.find_domain,
|
|
146
126
|
name_or_id=parsed_args.project_domain,
|
|
147
127
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -149,7 +129,7 @@ def _process_identity_and_resource_options(
|
|
|
149
129
|
if parsed_args.project_domain
|
|
150
130
|
else None
|
|
151
131
|
)
|
|
152
|
-
return _find_sdk_id(
|
|
132
|
+
return common._find_sdk_id(
|
|
153
133
|
identity_client.find_project,
|
|
154
134
|
name_or_id=parsed_args.project,
|
|
155
135
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -162,7 +142,7 @@ def _process_identity_and_resource_options(
|
|
|
162
142
|
kwargs['system'] = parsed_args.system
|
|
163
143
|
elif parsed_args.user and parsed_args.domain:
|
|
164
144
|
kwargs['user'] = _find_user()
|
|
165
|
-
kwargs['domain'] = _find_sdk_id(
|
|
145
|
+
kwargs['domain'] = common._find_sdk_id(
|
|
166
146
|
identity_client.find_domain,
|
|
167
147
|
name_or_id=parsed_args.domain,
|
|
168
148
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -175,7 +155,7 @@ def _process_identity_and_resource_options(
|
|
|
175
155
|
kwargs['system'] = parsed_args.system
|
|
176
156
|
elif parsed_args.group and parsed_args.domain:
|
|
177
157
|
kwargs['group'] = _find_group()
|
|
178
|
-
kwargs['domain'] = _find_sdk_id(
|
|
158
|
+
kwargs['domain'] = common._find_sdk_id(
|
|
179
159
|
identity_client.find_domain,
|
|
180
160
|
name_or_id=parsed_args.domain,
|
|
181
161
|
validate_actor_existence=validate_actor_existence,
|
|
@@ -228,10 +208,10 @@ class AddRole(command.Command):
|
|
|
228
208
|
|
|
229
209
|
domain_id = None
|
|
230
210
|
if parsed_args.role_domain:
|
|
231
|
-
domain_id = _find_sdk_id(
|
|
211
|
+
domain_id = common._find_sdk_id(
|
|
232
212
|
identity_client.find_domain, name_or_id=parsed_args.role_domain
|
|
233
213
|
)
|
|
234
|
-
role = _find_sdk_id(
|
|
214
|
+
role = common._find_sdk_id(
|
|
235
215
|
identity_client.find_role,
|
|
236
216
|
name_or_id=parsed_args.role,
|
|
237
217
|
domain_id=domain_id,
|
|
@@ -328,7 +308,7 @@ class CreateRole(command.ShowOne):
|
|
|
328
308
|
|
|
329
309
|
create_kwargs = {}
|
|
330
310
|
if parsed_args.domain:
|
|
331
|
-
create_kwargs['domain_id'] = _find_sdk_id(
|
|
311
|
+
create_kwargs['domain_id'] = common._find_sdk_id(
|
|
332
312
|
identity_client.find_domain, name_or_id=parsed_args.domain
|
|
333
313
|
)
|
|
334
314
|
|
|
@@ -381,13 +361,13 @@ class DeleteRole(command.Command):
|
|
|
381
361
|
|
|
382
362
|
domain_id = None
|
|
383
363
|
if parsed_args.domain:
|
|
384
|
-
domain_id = _find_sdk_id(
|
|
364
|
+
domain_id = common._find_sdk_id(
|
|
385
365
|
identity_client.find_domain, parsed_args.domain
|
|
386
366
|
)
|
|
387
367
|
errors = 0
|
|
388
368
|
for role in parsed_args.roles:
|
|
389
369
|
try:
|
|
390
|
-
role_id = _find_sdk_id(
|
|
370
|
+
role_id = common._find_sdk_id(
|
|
391
371
|
identity_client.find_role,
|
|
392
372
|
name_or_id=role,
|
|
393
373
|
domain_id=domain_id,
|
|
@@ -430,6 +410,7 @@ class ListRole(command.Lister):
|
|
|
430
410
|
if parsed_args.domain:
|
|
431
411
|
domain = identity_client.find_domain(
|
|
432
412
|
name_or_id=parsed_args.domain,
|
|
413
|
+
ignore_missing=False,
|
|
433
414
|
)
|
|
434
415
|
data = identity_client.roles(domain_id=domain.id)
|
|
435
416
|
return (
|
|
@@ -482,11 +463,11 @@ class RemoveRole(command.Command):
|
|
|
482
463
|
|
|
483
464
|
domain_id = None
|
|
484
465
|
if parsed_args.role_domain:
|
|
485
|
-
domain_id = _find_sdk_id(
|
|
466
|
+
domain_id = common._find_sdk_id(
|
|
486
467
|
identity_client.find_domain,
|
|
487
468
|
name_or_id=parsed_args.role_domain,
|
|
488
469
|
)
|
|
489
|
-
role = _find_sdk_id(
|
|
470
|
+
role = common._find_sdk_id(
|
|
490
471
|
identity_client.find_role,
|
|
491
472
|
name_or_id=parsed_args.role,
|
|
492
473
|
domain_id=domain_id,
|
|
@@ -582,7 +563,7 @@ class SetRole(command.Command):
|
|
|
582
563
|
|
|
583
564
|
domain_id = None
|
|
584
565
|
if parsed_args.domain:
|
|
585
|
-
domain_id = _find_sdk_id(
|
|
566
|
+
domain_id = common._find_sdk_id(
|
|
586
567
|
identity_client.find_domain,
|
|
587
568
|
name_or_id=parsed_args.domain,
|
|
588
569
|
)
|
|
@@ -591,7 +572,7 @@ class SetRole(command.Command):
|
|
|
591
572
|
if parsed_args.immutable is not None:
|
|
592
573
|
update_kwargs["options"] = {"immutable": parsed_args.immutable}
|
|
593
574
|
|
|
594
|
-
role = _find_sdk_id(
|
|
575
|
+
role = common._find_sdk_id(
|
|
595
576
|
identity_client.find_role,
|
|
596
577
|
name_or_id=parsed_args.role,
|
|
597
578
|
domain_id=domain_id,
|
|
@@ -623,7 +604,7 @@ class ShowRole(command.ShowOne):
|
|
|
623
604
|
|
|
624
605
|
domain_id = None
|
|
625
606
|
if parsed_args.domain:
|
|
626
|
-
domain_id = _find_sdk_id(
|
|
607
|
+
domain_id = common._find_sdk_id(
|
|
627
608
|
identity_client.find_domain,
|
|
628
609
|
name_or_id=parsed_args.domain,
|
|
629
610
|
)
|
|
@@ -13,9 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
"""Identity v3 Assignment action implementations"""
|
|
15
15
|
|
|
16
|
-
from
|
|
17
|
-
from osc_lib.command import command
|
|
18
|
-
|
|
16
|
+
from openstackclient import command
|
|
19
17
|
from openstackclient.i18n import _
|
|
20
18
|
from openstackclient.identity import common
|
|
21
19
|
|
|
@@ -51,15 +49,6 @@ def _format_role_assignment_(assignment, include_names):
|
|
|
51
49
|
)
|
|
52
50
|
|
|
53
51
|
|
|
54
|
-
def _find_sdk_id(find_command, name_or_id, **kwargs):
|
|
55
|
-
try:
|
|
56
|
-
return find_command(
|
|
57
|
-
name_or_id=name_or_id, ignore_missing=False, **kwargs
|
|
58
|
-
).id
|
|
59
|
-
except sdk_exceptions.ForbiddenException:
|
|
60
|
-
return name_or_id
|
|
61
|
-
|
|
62
|
-
|
|
63
52
|
class ListRoleAssignment(command.Lister):
|
|
64
53
|
_description = _("List role assignments")
|
|
65
54
|
|
|
@@ -135,12 +124,12 @@ class ListRoleAssignment(command.Lister):
|
|
|
135
124
|
role_id = None
|
|
136
125
|
role_domain_id = None
|
|
137
126
|
if parsed_args.role_domain:
|
|
138
|
-
role_domain_id = _find_sdk_id(
|
|
127
|
+
role_domain_id = common._find_sdk_id(
|
|
139
128
|
identity_client.find_domain,
|
|
140
129
|
name_or_id=parsed_args.role_domain,
|
|
141
130
|
)
|
|
142
131
|
if parsed_args.role:
|
|
143
|
-
role_id = _find_sdk_id(
|
|
132
|
+
role_id = common._find_sdk_id(
|
|
144
133
|
identity_client.find_role,
|
|
145
134
|
name_or_id=parsed_args.role,
|
|
146
135
|
domain_id=role_domain_id,
|
|
@@ -148,21 +137,21 @@ class ListRoleAssignment(command.Lister):
|
|
|
148
137
|
|
|
149
138
|
user_domain_id = None
|
|
150
139
|
if parsed_args.user_domain:
|
|
151
|
-
user_domain_id = _find_sdk_id(
|
|
140
|
+
user_domain_id = common._find_sdk_id(
|
|
152
141
|
identity_client.find_domain,
|
|
153
142
|
name_or_id=parsed_args.user_domain,
|
|
154
143
|
)
|
|
155
144
|
|
|
156
145
|
user_id = None
|
|
157
146
|
if parsed_args.user:
|
|
158
|
-
user_id = _find_sdk_id(
|
|
147
|
+
user_id = common._find_sdk_id(
|
|
159
148
|
identity_client.find_user,
|
|
160
149
|
name_or_id=parsed_args.user,
|
|
161
150
|
domain_id=user_domain_id,
|
|
162
151
|
)
|
|
163
152
|
elif parsed_args.authuser:
|
|
164
153
|
if auth_ref:
|
|
165
|
-
user_id = _find_sdk_id(
|
|
154
|
+
user_id = common._find_sdk_id(
|
|
166
155
|
identity_client.find_user,
|
|
167
156
|
name_or_id=auth_ref.user_id,
|
|
168
157
|
)
|
|
@@ -173,21 +162,21 @@ class ListRoleAssignment(command.Lister):
|
|
|
173
162
|
|
|
174
163
|
domain_id = None
|
|
175
164
|
if parsed_args.domain:
|
|
176
|
-
domain_id = _find_sdk_id(
|
|
165
|
+
domain_id = common._find_sdk_id(
|
|
177
166
|
identity_client.find_domain,
|
|
178
167
|
name_or_id=parsed_args.domain,
|
|
179
168
|
)
|
|
180
169
|
|
|
181
170
|
project_domain_id = None
|
|
182
171
|
if parsed_args.project_domain:
|
|
183
|
-
project_domain_id = _find_sdk_id(
|
|
172
|
+
project_domain_id = common._find_sdk_id(
|
|
184
173
|
identity_client.find_domain,
|
|
185
174
|
name_or_id=parsed_args.project_domain,
|
|
186
175
|
)
|
|
187
176
|
|
|
188
177
|
project_id = None
|
|
189
178
|
if parsed_args.project:
|
|
190
|
-
project_id = _find_sdk_id(
|
|
179
|
+
project_id = common._find_sdk_id(
|
|
191
180
|
identity_client.find_project,
|
|
192
181
|
name_or_id=common._get_token_resource(
|
|
193
182
|
identity_client, 'project', parsed_args.project
|
|
@@ -196,21 +185,21 @@ class ListRoleAssignment(command.Lister):
|
|
|
196
185
|
)
|
|
197
186
|
elif parsed_args.authproject:
|
|
198
187
|
if auth_ref:
|
|
199
|
-
project_id = _find_sdk_id(
|
|
188
|
+
project_id = common._find_sdk_id(
|
|
200
189
|
identity_client.find_project,
|
|
201
190
|
name_or_id=auth_ref.project_id,
|
|
202
191
|
)
|
|
203
192
|
|
|
204
193
|
group_domain_id = None
|
|
205
194
|
if parsed_args.group_domain:
|
|
206
|
-
group_domain_id = _find_sdk_id(
|
|
195
|
+
group_domain_id = common._find_sdk_id(
|
|
207
196
|
identity_client.find_domain,
|
|
208
197
|
name_or_id=parsed_args.group_domain,
|
|
209
198
|
)
|
|
210
199
|
|
|
211
200
|
group_id = None
|
|
212
201
|
if parsed_args.group:
|
|
213
|
-
group_id = _find_sdk_id(
|
|
202
|
+
group_id = common._find_sdk_id(
|
|
214
203
|
identity_client.find_group,
|
|
215
204
|
name_or_id=parsed_args.group,
|
|
216
205
|
domain_id=group_domain_id,
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
|
|
18
18
|
import logging
|
|
19
19
|
|
|
20
|
-
from osc_lib.command import command
|
|
21
20
|
from osc_lib import exceptions
|
|
22
21
|
from osc_lib import utils
|
|
23
22
|
|
|
23
|
+
from openstackclient import command
|
|
24
24
|
from openstackclient.i18n import _
|
|
25
25
|
from openstackclient.identity import common
|
|
26
26
|
|
|
@@ -114,6 +114,7 @@ def add_tag_option_to_parser_for_set(parser, resource_name):
|
|
|
114
114
|
parser.add_argument(
|
|
115
115
|
'--remove-tag',
|
|
116
116
|
action='append',
|
|
117
|
+
dest='remove_tags',
|
|
117
118
|
metavar='<tag>',
|
|
118
119
|
default=[],
|
|
119
120
|
help=_(
|
|
@@ -122,14 +123,3 @@ def add_tag_option_to_parser_for_set(parser, resource_name):
|
|
|
122
123
|
)
|
|
123
124
|
% resource_name,
|
|
124
125
|
)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def update_tags_in_args(parsed_args, obj, args):
|
|
128
|
-
if parsed_args.clear_tags:
|
|
129
|
-
args['tags'] = []
|
|
130
|
-
obj.tags = []
|
|
131
|
-
if parsed_args.remove_tag:
|
|
132
|
-
args['tags'] = sorted(set(obj.tags) - set(parsed_args.remove_tag))
|
|
133
|
-
return
|
|
134
|
-
if parsed_args.tags:
|
|
135
|
-
args['tags'] = sorted(set(obj.tags).union(set(parsed_args.tags)))
|