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.
Files changed (233) hide show
  1. openstackclient/api/object_store_v1.py +4 -1
  2. openstackclient/command.py +27 -0
  3. openstackclient/common/availability_zone.py +1 -1
  4. openstackclient/common/clientmanager.py +59 -21
  5. openstackclient/common/configuration.py +1 -1
  6. openstackclient/common/extension.py +1 -1
  7. openstackclient/common/limits.py +1 -1
  8. openstackclient/common/module.py +5 -3
  9. openstackclient/common/project_cleanup.py +10 -8
  10. openstackclient/common/quota.py +54 -23
  11. openstackclient/common/versions.py +1 -2
  12. openstackclient/compute/v2/agent.py +1 -1
  13. openstackclient/compute/v2/aggregate.py +6 -5
  14. openstackclient/compute/v2/console.py +5 -3
  15. openstackclient/compute/v2/console_connection.py +1 -1
  16. openstackclient/compute/v2/flavor.py +1 -1
  17. openstackclient/compute/v2/host.py +1 -1
  18. openstackclient/compute/v2/hypervisor.py +1 -1
  19. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  20. openstackclient/compute/v2/keypair.py +1 -1
  21. openstackclient/compute/v2/server.py +78 -29
  22. openstackclient/compute/v2/server_backup.py +1 -1
  23. openstackclient/compute/v2/server_event.py +1 -1
  24. openstackclient/compute/v2/server_group.py +4 -2
  25. openstackclient/compute/v2/server_image.py +1 -1
  26. openstackclient/compute/v2/server_migration.py +1 -1
  27. openstackclient/compute/v2/server_volume.py +1 -1
  28. openstackclient/compute/v2/service.py +1 -1
  29. openstackclient/compute/v2/usage.py +6 -4
  30. openstackclient/identity/common.py +33 -1
  31. openstackclient/identity/v2_0/catalog.py +3 -2
  32. openstackclient/identity/v2_0/ec2creds.py +1 -1
  33. openstackclient/identity/v2_0/endpoint.py +1 -1
  34. openstackclient/identity/v2_0/project.py +17 -7
  35. openstackclient/identity/v2_0/role.py +1 -1
  36. openstackclient/identity/v2_0/role_assignment.py +3 -3
  37. openstackclient/identity/v2_0/service.py +4 -2
  38. openstackclient/identity/v2_0/token.py +1 -1
  39. openstackclient/identity/v2_0/user.py +2 -2
  40. openstackclient/identity/v3/access_rule.py +16 -4
  41. openstackclient/identity/v3/application_credential.py +30 -10
  42. openstackclient/identity/v3/catalog.py +3 -3
  43. openstackclient/identity/v3/consumer.py +1 -1
  44. openstackclient/identity/v3/credential.py +1 -1
  45. openstackclient/identity/v3/domain.py +10 -4
  46. openstackclient/identity/v3/ec2creds.py +1 -1
  47. openstackclient/identity/v3/endpoint.py +33 -12
  48. openstackclient/identity/v3/endpoint_group.py +1 -1
  49. openstackclient/identity/v3/federation_protocol.py +40 -41
  50. openstackclient/identity/v3/group.py +11 -5
  51. openstackclient/identity/v3/identity_provider.py +12 -10
  52. openstackclient/identity/v3/implied_role.py +1 -1
  53. openstackclient/identity/v3/limit.py +86 -85
  54. openstackclient/identity/v3/mapping.py +1 -1
  55. openstackclient/identity/v3/policy.py +1 -1
  56. openstackclient/identity/v3/project.py +191 -115
  57. openstackclient/identity/v3/region.py +1 -1
  58. openstackclient/identity/v3/registered_limit.py +97 -109
  59. openstackclient/identity/v3/role.py +20 -39
  60. openstackclient/identity/v3/role_assignment.py +12 -23
  61. openstackclient/identity/v3/service.py +1 -1
  62. openstackclient/identity/v3/service_provider.py +1 -1
  63. openstackclient/identity/v3/tag.py +1 -11
  64. openstackclient/identity/v3/token.py +3 -2
  65. openstackclient/identity/v3/trust.py +4 -2
  66. openstackclient/identity/v3/unscoped_saml.py +1 -1
  67. openstackclient/identity/v3/user.py +22 -13
  68. openstackclient/image/v1/image.py +19 -16
  69. openstackclient/image/v2/cache.py +1 -1
  70. openstackclient/image/v2/image.py +16 -12
  71. openstackclient/image/v2/info.py +1 -1
  72. openstackclient/image/v2/metadef_namespaces.py +1 -1
  73. openstackclient/image/v2/metadef_objects.py +1 -1
  74. openstackclient/image/v2/metadef_properties.py +3 -2
  75. openstackclient/image/v2/metadef_resource_type_association.py +1 -1
  76. openstackclient/image/v2/metadef_resource_types.py +1 -1
  77. openstackclient/image/v2/task.py +1 -1
  78. openstackclient/network/common.py +10 -9
  79. openstackclient/network/v2/address_group.py +4 -3
  80. openstackclient/network/v2/address_scope.py +8 -6
  81. openstackclient/network/v2/default_security_group_rule.py +9 -8
  82. openstackclient/network/v2/floating_ip.py +16 -9
  83. openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
  84. openstackclient/network/v2/ip_availability.py +7 -4
  85. openstackclient/network/v2/l3_conntrack_helper.py +11 -4
  86. openstackclient/network/v2/local_ip.py +13 -7
  87. openstackclient/network/v2/local_ip_association.py +7 -4
  88. openstackclient/network/v2/ndp_proxy.py +13 -6
  89. openstackclient/network/v2/network.py +33 -16
  90. openstackclient/network/v2/network_agent.py +5 -5
  91. openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
  92. openstackclient/network/v2/network_flavor.py +1 -1
  93. openstackclient/network/v2/network_flavor_profile.py +1 -1
  94. openstackclient/network/v2/network_meter.py +1 -1
  95. openstackclient/network/v2/network_meter_rule.py +1 -1
  96. openstackclient/network/v2/network_qos_policy.py +7 -5
  97. openstackclient/network/v2/network_qos_rule.py +1 -1
  98. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  99. openstackclient/network/v2/network_rbac.py +8 -5
  100. openstackclient/network/v2/network_segment.py +2 -2
  101. openstackclient/network/v2/network_segment_range.py +13 -6
  102. openstackclient/network/v2/network_service_provider.py +1 -1
  103. openstackclient/network/v2/network_trunk.py +65 -42
  104. openstackclient/network/v2/port.py +22 -20
  105. openstackclient/network/v2/router.py +19 -8
  106. openstackclient/network/v2/security_group.py +10 -6
  107. openstackclient/network/v2/security_group_rule.py +11 -5
  108. openstackclient/network/v2/subnet.py +17 -18
  109. openstackclient/network/v2/subnet_pool.py +11 -9
  110. openstackclient/network/v2/taas/__init__.py +0 -0
  111. openstackclient/network/v2/taas/tap_flow.py +245 -0
  112. openstackclient/network/v2/taas/tap_mirror.py +237 -0
  113. openstackclient/network/v2/taas/tap_service.py +211 -0
  114. openstackclient/object/v1/account.py +1 -1
  115. openstackclient/object/v1/container.py +1 -1
  116. openstackclient/object/v1/object.py +1 -1
  117. openstackclient/shell.py +18 -8
  118. openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
  119. openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
  120. openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
  121. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  122. openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
  123. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  124. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +46 -132
  125. openstackclient/tests/unit/common/test_command.py +1 -1
  126. openstackclient/tests/unit/common/test_extension.py +2 -3
  127. openstackclient/tests/unit/common/test_module.py +14 -7
  128. openstackclient/tests/unit/common/test_quota.py +79 -0
  129. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  130. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  131. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
  132. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  133. openstackclient/tests/unit/compute/v2/test_server.py +370 -38
  134. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  135. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  136. openstackclient/tests/unit/fakes.py +35 -134
  137. openstackclient/tests/unit/identity/test_common.py +100 -0
  138. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  139. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  140. openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
  141. openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
  142. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  143. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  144. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  145. openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
  146. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  147. openstackclient/tests/unit/identity/v3/test_project.py +832 -513
  148. openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
  149. openstackclient/tests/unit/identity/v3/test_registered_limit.py +356 -221
  150. openstackclient/tests/unit/identity/v3/test_role.py +1 -82
  151. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  152. openstackclient/tests/unit/image/v2/test_image.py +116 -5
  153. openstackclient/tests/unit/network/test_common.py +9 -13
  154. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  155. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  156. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  157. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  158. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  159. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  160. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  161. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  162. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  163. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  164. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  165. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  166. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  167. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
  168. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  169. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  170. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  171. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  172. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  173. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  174. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  175. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  176. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  177. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  178. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  179. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  180. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  181. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  182. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  183. openstackclient/tests/unit/network/v2/test_port.py +75 -86
  184. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  185. openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
  186. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
  187. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  188. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  189. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  190. openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
  191. openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
  192. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  193. openstackclient/tests/unit/volume/v3/test_volume.py +38 -12
  194. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  195. openstackclient/volume/client.py +7 -17
  196. openstackclient/volume/v2/backup_record.py +1 -1
  197. openstackclient/volume/v2/consistency_group.py +9 -9
  198. openstackclient/volume/v2/consistency_group_snapshot.py +3 -3
  199. openstackclient/volume/v2/qos_specs.py +3 -3
  200. openstackclient/volume/v2/service.py +1 -1
  201. openstackclient/volume/v2/volume.py +14 -7
  202. openstackclient/volume/v2/volume_backend.py +1 -1
  203. openstackclient/volume/v2/volume_backup.py +7 -5
  204. openstackclient/volume/v2/volume_host.py +1 -2
  205. openstackclient/volume/v2/volume_snapshot.py +4 -4
  206. openstackclient/volume/v2/volume_transfer_request.py +3 -3
  207. openstackclient/volume/v2/volume_type.py +16 -11
  208. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  209. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  210. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  211. openstackclient/volume/v3/block_storage_manage.py +1 -1
  212. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  213. openstackclient/volume/v3/service.py +1 -1
  214. openstackclient/volume/v3/volume.py +16 -9
  215. openstackclient/volume/v3/volume_attachment.py +6 -5
  216. openstackclient/volume/v3/volume_backup.py +20 -5
  217. openstackclient/volume/v3/volume_group.py +1 -1
  218. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  219. openstackclient/volume/v3/volume_group_type.py +1 -1
  220. openstackclient/volume/v3/volume_message.py +1 -1
  221. openstackclient/volume/v3/volume_snapshot.py +4 -4
  222. openstackclient/volume/v3/volume_transfer_request.py +3 -3
  223. openstackclient/volume/v3/volume_type.py +20 -14
  224. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/METADATA +15 -13
  225. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/RECORD +231 -219
  226. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/WHEEL +1 -1
  227. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/entry_points.txt +15 -0
  228. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/AUTHORS +15 -0
  229. python_openstackclient-9.0.0.dist-info/pbr.json +1 -0
  230. openstackclient/tests/unit/common/test_logs.py +0 -221
  231. python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
  232. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/LICENSE +0 -0
  233. {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=_('Service responsible for the resource to limit (required)'),
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
- if 'None' not in parsed_args.region:
72
- # NOTE (vishakha): Due to bug #1799153 and for any another
73
- # related case where GET resource API does not support the
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
- registered_limit = identity_client.registered_limits.create(
92
- service,
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._info.pop('links', None)
100
- return zip(*sorted(registered_limit._info.items()))
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
- 'registered_limit_id',
110
- metavar='<registered-limit-id>',
120
+ 'registered_limits',
121
+ metavar='<registered-limits>',
111
122
  nargs="+",
112
- help=_('Registered limit to delete (ID)'),
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.registered_limit_id:
134
+ for registered_limit_id in parsed_args.registered_limits:
121
135
  try:
122
- identity_client.registered_limits.delete(registered_limit_id)
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.registered_limit_id)
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=_('Service responsible for the resource to limit'),
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
- service = None
188
+ kwargs = {}
171
189
  if parsed_args.service:
172
- service = common_utils.find_service(
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
- if 'None' not in parsed_args.region:
178
- # NOTE (vishakha): Due to bug #1799153 and for any another
179
- # related case where GET resource API does not support the
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
- registered_limits = identity_client.registered_limits.list(
198
- service=service,
199
- resource_name=parsed_args.resource_name,
200
- region=region,
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
- 'limit. Either --service, --resource-name or --region must '
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
- service = None
273
+ kwargs = {}
274
274
  if parsed_args.service:
275
- service = common_utils.find_service(
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
- if 'None' not in parsed_args.region:
282
- # NOTE (vishakha): Due to bug #1799153 and for any another
283
- # related case where GET resource API does not support the
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.registered_limits.update(
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._info.pop('links', None)
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.registered_limits.get(
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._info.pop('links', None)
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 openstack import exceptions as sdk_exceptions
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
 
@@ -15,10 +15,10 @@
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
 
24
24
 
@@ -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)))