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,38 @@
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_limit(limit):
29
+ columns = (
30
+ "description",
31
+ "id",
32
+ "project_id",
33
+ "region_id",
34
+ "resource_limit",
35
+ "resource_name",
36
+ "service_id",
37
+ )
38
+ column_headers = (
39
+ "description",
40
+ "id",
41
+ "project_id",
42
+ "region_id",
43
+ "resource_limit",
44
+ "resource_name",
45
+ "service_id",
46
+ )
47
+ return (column_headers, utils.get_item_properties(limit, columns))
48
+
49
+
28
50
  class CreateLimit(command.ShowOne):
29
51
  _description = _("Create a limit")
30
52
 
@@ -46,6 +68,7 @@ class CreateLimit(command.ShowOne):
46
68
  required=True,
47
69
  help=_('Project to associate the resource limit to'),
48
70
  )
71
+ common_utils.add_project_domain_option_to_parser(parser)
49
72
  parser.add_argument(
50
73
  '--service',
51
74
  metavar='<service>',
@@ -67,47 +90,33 @@ class CreateLimit(command.ShowOne):
67
90
  return parser
68
91
 
69
92
  def take_action(self, parsed_args):
70
- identity_client = self.app.client_manager.identity
71
-
72
- project = common_utils.find_project(
73
- identity_client, parsed_args.project
93
+ identity_client = self.app.client_manager.sdk_connection.identity
94
+
95
+ kwargs = {
96
+ "resource_name": parsed_args.resource_name,
97
+ "resource_limit": parsed_args.resource_limit,
98
+ }
99
+ if parsed_args.description:
100
+ kwargs["description"] = parsed_args.description
101
+
102
+ kwargs["project_id"] = common_utils.find_project_id_sdk(
103
+ identity_client,
104
+ parsed_args.project,
105
+ domain_name_or_id=parsed_args.project_domain,
74
106
  )
75
- service = common_utils.find_service(
107
+
108
+ kwargs["service_id"] = common_utils.find_service_sdk(
76
109
  identity_client, parsed_args.service
77
- )
78
- region = None
110
+ ).id
111
+
79
112
  if parsed_args.region:
80
- if 'None' not in parsed_args.region:
81
- # NOTE (vishakha): Due to bug #1799153 and for any another
82
- # related case where GET resource API does not support the
83
- # filter by name, osc_lib.utils.find_resource() method cannot
84
- # be used because that method try to fall back to list all the
85
- # resource if requested resource cannot be get via name. Which
86
- # ends up with NoUniqueMatch error.
87
- # So osc_lib.utils.find_resource() function cannot be used for
88
- # 'regions', using common_utils.get_resource() instead.
89
- region = common_utils.get_resource(
90
- identity_client.regions, parsed_args.region
91
- )
92
- else:
93
- self.log.warning(
94
- _(
95
- "Passing 'None' to indicate no region is deprecated. "
96
- "Instead, don't pass --region."
97
- )
98
- )
113
+ kwargs["region_id"] = identity_client.get_region(
114
+ parsed_args.region
115
+ ).id
99
116
 
100
- limit = identity_client.limits.create(
101
- project,
102
- service,
103
- parsed_args.resource_name,
104
- parsed_args.resource_limit,
105
- description=parsed_args.description,
106
- region=region,
107
- )
117
+ limit = identity_client.create_limit(**kwargs)
108
118
 
109
- limit._info.pop('links', None)
110
- return zip(*sorted(limit._info.items()))
119
+ return _format_limit(limit)
111
120
 
112
121
 
113
122
  class ListLimit(command.Lister):
@@ -136,50 +145,41 @@ class ListLimit(command.Lister):
136
145
  metavar='<project>',
137
146
  help=_('List resource limits associated with project'),
138
147
  )
148
+ common_utils.add_project_domain_option_to_parser(parser)
149
+
139
150
  return parser
140
151
 
141
152
  def take_action(self, parsed_args):
142
- identity_client = self.app.client_manager.identity
153
+ identity_client = self.app.client_manager.sdk_connection.identity
143
154
 
144
- service = None
155
+ kwargs = {}
145
156
  if parsed_args.service:
146
- service = common_utils.find_service(
157
+ kwargs["service_id"] = common_utils.find_service_sdk(
147
158
  identity_client, parsed_args.service
148
159
  )
149
- region = None
160
+
150
161
  if parsed_args.region:
151
- if 'None' not in parsed_args.region:
152
- # NOTE (vishakha): Due to bug #1799153 and for any another
153
- # related case where GET resource API does not support the
154
- # filter by name, osc_lib.utils.find_resource() method cannot
155
- # be used because that method try to fall back to list all the
156
- # resource if requested resource cannot be get via name. Which
157
- # ends up with NoUniqueMatch error.
158
- # So osc_lib.utils.find_resource() function cannot be used for
159
- # 'regions', using common_utils.get_resource() instead.
160
- region = common_utils.get_resource(
161
- identity_client.regions, parsed_args.region
162
- )
163
- else:
164
- self.log.warning(
165
- _(
166
- "Passing 'None' to indicate no region is deprecated. "
167
- "Instead, don't pass --region."
168
- )
169
- )
162
+ kwargs["region_id"] = identity_client.get_region(
163
+ parsed_args.region
164
+ ).id
170
165
 
171
- project = None
172
166
  if parsed_args.project:
173
- project = utils.find_resource(
174
- identity_client.projects, parsed_args.project
167
+ project_domain_id = None
168
+ if parsed_args.project_domain:
169
+ project_domain_id = common_utils.find_domain_id_sdk(
170
+ identity_client, parsed_args.project_domain
171
+ )
172
+
173
+ kwargs["project_id"] = common_utils._find_sdk_id(
174
+ identity_client.find_project,
175
+ name_or_id=parsed_args.project,
176
+ domain_id=project_domain_id,
175
177
  )
176
178
 
177
- limits = identity_client.limits.list(
178
- service=service,
179
- resource_name=parsed_args.resource_name,
180
- region=region,
181
- project=project,
182
- )
179
+ if parsed_args.resource_name:
180
+ kwargs["resource_name"] = parsed_args.resource_name
181
+
182
+ limits = identity_client.limits(**kwargs)
183
183
 
184
184
  columns = (
185
185
  'ID',
@@ -209,10 +209,9 @@ class ShowLimit(command.ShowOne):
209
209
  return parser
210
210
 
211
211
  def take_action(self, parsed_args):
212
- identity_client = self.app.client_manager.identity
213
- limit = identity_client.limits.get(parsed_args.limit_id)
214
- limit._info.pop('links', None)
215
- return zip(*sorted(limit._info.items()))
212
+ identity_client = self.app.client_manager.sdk_connection.identity
213
+ limit = identity_client.get_limit(parsed_args.limit_id)
214
+ return _format_limit(limit)
216
215
 
217
216
 
218
217
  class SetLimit(command.ShowOne):
@@ -240,17 +239,16 @@ class SetLimit(command.ShowOne):
240
239
  return parser
241
240
 
242
241
  def take_action(self, parsed_args):
243
- identity_client = self.app.client_manager.identity
244
-
245
- limit = identity_client.limits.update(
246
- parsed_args.limit_id,
247
- description=parsed_args.description,
248
- resource_limit=parsed_args.resource_limit,
249
- )
242
+ identity_client = self.app.client_manager.sdk_connection.identity
250
243
 
251
- limit._info.pop('links', None)
244
+ kwargs = {}
245
+ if parsed_args.description:
246
+ kwargs["description"] = parsed_args.description
247
+ if parsed_args.resource_limit:
248
+ kwargs["resource_limit"] = parsed_args.resource_limit
249
+ limit = identity_client.update_limit(parsed_args.limit_id, **kwargs)
252
250
 
253
- return zip(*sorted(limit._info.items()))
251
+ return _format_limit(limit)
254
252
 
255
253
 
256
254
  class DeleteLimit(command.Command):
@@ -262,17 +260,20 @@ class DeleteLimit(command.Command):
262
260
  'limit_id',
263
261
  metavar='<limit-id>',
264
262
  nargs="+",
265
- help=_('Limit to delete (ID)'),
263
+ help=_(
264
+ 'Limit to delete (ID) '
265
+ '(repeat option to remove multiple limits)'
266
+ ),
266
267
  )
267
268
  return parser
268
269
 
269
270
  def take_action(self, parsed_args):
270
- identity_client = self.app.client_manager.identity
271
+ identity_client = self.app.client_manager.sdk_connection.identity
271
272
 
272
273
  errors = 0
273
274
  for limit_id in parsed_args.limit_id:
274
275
  try:
275
- identity_client.limits.delete(limit_id)
276
+ identity_client.delete_limit(limit_id)
276
277
  except Exception as e:
277
278
  errors += 1
278
279
  LOG.error(
@@ -18,10 +18,10 @@
18
18
  import json
19
19
  import logging
20
20
 
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
 
27
27
 
@@ -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
 
26
26