python-openstackclient 9.0.0__py3-none-any.whl → 10.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. openstackclient/__init__.py +2 -6
  2. openstackclient/api/api.py +41 -23
  3. openstackclient/api/compute_v2.py +44 -25
  4. openstackclient/api/object_store_v1.py +75 -97
  5. openstackclient/api/volume_v2.py +2 -1
  6. openstackclient/api/volume_v3.py +2 -1
  7. openstackclient/common/availability_zone.py +58 -42
  8. openstackclient/common/clientmanager.py +56 -29
  9. openstackclient/common/configuration.py +10 -3
  10. openstackclient/common/envvars.py +2 -2
  11. openstackclient/common/extension.py +14 -5
  12. openstackclient/common/limits.py +10 -5
  13. openstackclient/common/module.py +14 -6
  14. openstackclient/common/pagination.py +8 -2
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +13 -7
  17. openstackclient/common/quota.py +97 -99
  18. openstackclient/common/versions.py +8 -2
  19. openstackclient/compute/client.py +7 -3
  20. openstackclient/compute/v2/agent.py +17 -10
  21. openstackclient/compute/v2/aggregate.py +36 -22
  22. openstackclient/compute/v2/console.py +14 -8
  23. openstackclient/compute/v2/console_connection.py +11 -3
  24. openstackclient/compute/v2/flavor.py +39 -21
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +14 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +29 -14
  29. openstackclient/compute/v2/server.py +249 -169
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +21 -12
  32. openstackclient/compute/v2/server_group.py +21 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +24 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +10 -4
  37. openstackclient/compute/v2/service.py +14 -7
  38. openstackclient/compute/v2/usage.py +26 -21
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +78 -47
  41. openstackclient/identity/v2_0/catalog.py +14 -7
  42. openstackclient/identity/v2_0/ec2creds.py +21 -10
  43. openstackclient/identity/v2_0/endpoint.py +23 -11
  44. openstackclient/identity/v2_0/project.py +25 -14
  45. openstackclient/identity/v2_0/role.py +28 -14
  46. openstackclient/identity/v2_0/role_assignment.py +9 -3
  47. openstackclient/identity/v2_0/service.py +23 -11
  48. openstackclient/identity/v2_0/token.py +12 -5
  49. openstackclient/identity/v2_0/user.py +26 -15
  50. openstackclient/identity/v3/access_rule.py +26 -12
  51. openstackclient/identity/v3/application_credential.py +59 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +36 -16
  55. openstackclient/identity/v3/domain.py +37 -18
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +42 -20
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +38 -16
  60. openstackclient/identity/v3/group.py +55 -32
  61. openstackclient/identity/v3/identity_provider.py +92 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +38 -16
  64. openstackclient/identity/v3/mapping.py +26 -13
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +43 -23
  67. openstackclient/identity/v3/region.py +36 -16
  68. openstackclient/identity/v3/registered_limit.py +40 -16
  69. openstackclient/identity/v3/role.py +61 -31
  70. openstackclient/identity/v3/role_assignment.py +23 -6
  71. openstackclient/identity/v3/service.py +36 -16
  72. openstackclient/identity/v3/service_provider.py +37 -15
  73. openstackclient/identity/v3/tag.py +23 -6
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +32 -14
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +49 -26
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +14 -9
  81. openstackclient/image/v2/image.py +74 -48
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +109 -13
  84. openstackclient/image/v2/metadef_objects.py +28 -15
  85. openstackclient/image/v2/metadef_properties.py +24 -13
  86. openstackclient/image/v2/metadef_resource_type_association.py +14 -7
  87. openstackclient/image/v2/metadef_resource_types.py +7 -1
  88. openstackclient/image/v2/task.py +15 -6
  89. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
  90. openstackclient/network/client.py +7 -2
  91. openstackclient/network/common.py +16 -241
  92. openstackclient/network/utils.py +36 -22
  93. openstackclient/network/v2/address_group.py +27 -16
  94. openstackclient/network/v2/address_scope.py +24 -13
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +214 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +490 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +288 -0
  100. openstackclient/network/v2/default_security_group_rule.py +19 -10
  101. openstackclient/network/v2/floating_ip.py +110 -159
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +466 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +574 -0
  107. openstackclient/network/v2/ip_availability.py +13 -5
  108. openstackclient/network/v2/l3_conntrack_helper.py +22 -13
  109. openstackclient/network/v2/local_ip.py +24 -13
  110. openstackclient/network/v2/local_ip_association.py +14 -7
  111. openstackclient/network/v2/ndp_proxy.py +20 -11
  112. openstackclient/network/v2/network.py +129 -196
  113. openstackclient/network/v2/network_agent.py +46 -25
  114. openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
  115. openstackclient/network/v2/network_flavor.py +27 -16
  116. openstackclient/network/v2/network_flavor_profile.py +23 -12
  117. openstackclient/network/v2/network_meter.py +21 -10
  118. openstackclient/network/v2/network_meter_rule.py +21 -11
  119. openstackclient/network/v2/network_qos_policy.py +25 -15
  120. openstackclient/network/v2/network_qos_rule.py +32 -17
  121. openstackclient/network/v2/network_qos_rule_type.py +13 -5
  122. openstackclient/network/v2/network_rbac.py +23 -12
  123. openstackclient/network/v2/network_segment.py +20 -11
  124. openstackclient/network/v2/network_segment_range.py +56 -29
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +38 -22
  127. openstackclient/network/v2/port.py +54 -29
  128. openstackclient/network/v2/router.py +75 -52
  129. openstackclient/network/v2/security_group.py +87 -157
  130. openstackclient/network/v2/security_group_rule.py +100 -280
  131. openstackclient/network/v2/subnet.py +49 -28
  132. openstackclient/network/v2/subnet_pool.py +30 -17
  133. openstackclient/network/v2/taas/tap_flow.py +22 -11
  134. openstackclient/network/v2/taas/tap_mirror.py +22 -11
  135. openstackclient/network/v2/taas/tap_service.py +23 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +25 -15
  139. openstackclient/object/v1/object.py +25 -15
  140. openstackclient/py.typed +0 -0
  141. openstackclient/shell.py +46 -10
  142. openstackclient/tests/functional/base.py +55 -20
  143. openstackclient/tests/functional/common/test_extension.py +4 -0
  144. openstackclient/tests/functional/common/test_quota.py +3 -1
  145. openstackclient/tests/functional/compute/v2/common.py +14 -13
  146. openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
  147. openstackclient/tests/functional/compute/v2/test_server.py +3 -0
  148. openstackclient/tests/functional/identity/v2/common.py +10 -6
  149. openstackclient/tests/functional/identity/v2/test_role.py +4 -4
  150. openstackclient/tests/functional/identity/v3/common.py +25 -19
  151. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  152. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  153. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  154. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  155. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  156. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  157. openstackclient/tests/functional/image/base.py +1 -6
  158. openstackclient/tests/functional/network/v2/common.py +5 -2
  159. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  160. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  161. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  162. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  163. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  164. openstackclient/tests/functional/object/v1/common.py +4 -0
  165. openstackclient/tests/functional/volume/v2/common.py +4 -0
  166. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  167. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  168. openstackclient/tests/functional/volume/v3/common.py +4 -0
  169. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
  170. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  171. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  172. openstackclient/tests/unit/common/test_extension.py +2 -2
  173. openstackclient/tests/unit/common/test_module.py +12 -7
  174. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  175. openstackclient/tests/unit/common/test_quota.py +6 -26
  176. openstackclient/tests/unit/compute/v2/fakes.py +25 -0
  177. openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
  178. openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
  179. openstackclient/tests/unit/compute/v2/test_server.py +11 -96
  180. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  181. openstackclient/tests/unit/identity/v3/fakes.py +3 -0
  182. openstackclient/tests/unit/identity/v3/test_group.py +4 -14
  183. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  184. openstackclient/tests/unit/identity/v3/test_user.py +4 -4
  185. openstackclient/tests/unit/image/v2/test_image.py +11 -11
  186. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  187. openstackclient/tests/unit/network/test_common.py +0 -155
  188. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  189. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  190. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  191. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  192. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  193. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  194. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  195. openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
  196. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  197. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
  198. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  199. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  200. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  201. openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
  202. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
  203. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
  204. openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
  205. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  206. openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
  207. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
  208. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  209. openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
  210. openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
  211. openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
  212. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  213. openstackclient/tests/unit/network/v2/test_router.py +8 -9
  214. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
  215. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
  216. openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
  217. openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
  218. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  219. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  220. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  221. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  222. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  223. openstackclient/tests/unit/test_hacking.py +108 -0
  224. openstackclient/tests/unit/volume/v2/fakes.py +1 -0
  225. openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
  226. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
  227. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  228. openstackclient/tests/unit/volume/v3/fakes.py +1 -0
  229. openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
  230. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  231. openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
  232. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
  233. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  234. openstackclient/volume/client.py +7 -3
  235. openstackclient/volume/v2/backup_record.py +15 -6
  236. openstackclient/volume/v2/consistency_group.py +29 -17
  237. openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
  238. openstackclient/volume/v2/qos_specs.py +28 -17
  239. openstackclient/volume/v2/service.py +17 -6
  240. openstackclient/volume/v2/volume.py +57 -29
  241. openstackclient/volume/v2/volume_backend.py +19 -6
  242. openstackclient/volume/v2/volume_backup.py +46 -20
  243. openstackclient/volume/v2/volume_host.py +6 -4
  244. openstackclient/volume/v2/volume_snapshot.py +50 -24
  245. openstackclient/volume/v2/volume_transfer_request.py +31 -13
  246. openstackclient/volume/v2/volume_type.py +43 -24
  247. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  248. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  249. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  250. openstackclient/volume/v3/block_storage_manage.py +10 -4
  251. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  252. openstackclient/volume/v3/service.py +16 -6
  253. openstackclient/volume/v3/volume.py +89 -39
  254. openstackclient/volume/v3/volume_attachment.py +43 -21
  255. openstackclient/volume/v3/volume_backup.py +53 -24
  256. openstackclient/volume/v3/volume_group.py +23 -13
  257. openstackclient/volume/v3/volume_group_snapshot.py +32 -13
  258. openstackclient/volume/v3/volume_group_type.py +26 -13
  259. openstackclient/volume/v3/volume_message.py +15 -7
  260. openstackclient/volume/v3/volume_snapshot.py +69 -32
  261. openstackclient/volume/v3/volume_transfer_request.py +31 -13
  262. openstackclient/volume/v3/volume_type.py +42 -24
  263. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
  264. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +271 -260
  265. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
  266. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
  267. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +4 -0
  268. python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
  269. openstackclient/api/image_v1.py +0 -69
  270. openstackclient/api/image_v2.py +0 -79
  271. openstackclient/network/v2/floating_ip_pool.py +0 -38
  272. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  273. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  274. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  275. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  276. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  277. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  278. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  279. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  280. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  281. python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
  282. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  283. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
  284. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
@@ -15,8 +15,12 @@
15
15
 
16
16
  """Identity v3 Credential action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
18
20
  import logging
21
+ from typing import Any
19
22
 
23
+ from openstack import utils as sdk_utils
20
24
  from osc_lib import exceptions
21
25
  from osc_lib import utils
22
26
 
@@ -28,7 +32,7 @@ from openstackclient.identity import common
28
32
  LOG = logging.getLogger(__name__)
29
33
 
30
34
 
31
- def _format_credential(credential):
35
+ def _format_credential(credential: Any) -> tuple[tuple[str, ...], Any]:
32
36
  columns = (
33
37
  'blob',
34
38
  'id',
@@ -48,7 +52,7 @@ def _format_credential(credential):
48
52
  class CreateCredential(command.ShowOne):
49
53
  _description = _("Create new credential")
50
54
 
51
- def get_parser(self, prog_name):
55
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
52
56
  parser = super().get_parser(prog_name)
53
57
  parser.add_argument(
54
58
  'user',
@@ -75,8 +79,12 @@ class CreateCredential(command.ShowOne):
75
79
  )
76
80
  return parser
77
81
 
78
- def take_action(self, parsed_args):
79
- identity_client = self.app.client_manager.sdk_connection.identity
82
+ def take_action(
83
+ self, parsed_args: argparse.Namespace
84
+ ) -> tuple[Sequence[str], Iterable[Any]]:
85
+ identity_client = sdk_utils.ensure_service_version(
86
+ self.app.client_manager.sdk_connection.identity, '3'
87
+ )
80
88
  user_id = identity_client.find_user(
81
89
  parsed_args.user, ignore_missing=False
82
90
  ).id
@@ -99,7 +107,7 @@ class CreateCredential(command.ShowOne):
99
107
  class DeleteCredential(command.Command):
100
108
  _description = _("Delete credential(s)")
101
109
 
102
- def get_parser(self, prog_name):
110
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
103
111
  parser = super().get_parser(prog_name)
104
112
  parser.add_argument(
105
113
  'credential',
@@ -109,8 +117,10 @@ class DeleteCredential(command.Command):
109
117
  )
110
118
  return parser
111
119
 
112
- def take_action(self, parsed_args):
113
- identity_client = self.app.client_manager.sdk_connection.identity
120
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
121
+ identity_client = sdk_utils.ensure_service_version(
122
+ self.app.client_manager.sdk_connection.identity, '3'
123
+ )
114
124
  result = 0
115
125
  for i in parsed_args.credential:
116
126
  try:
@@ -137,7 +147,7 @@ class DeleteCredential(command.Command):
137
147
  class ListCredential(command.Lister):
138
148
  _description = _("List credentials")
139
149
 
140
- def get_parser(self, prog_name):
150
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
141
151
  parser = super().get_parser(prog_name)
142
152
  parser.add_argument(
143
153
  '--user',
@@ -152,8 +162,12 @@ class ListCredential(command.Lister):
152
162
  )
153
163
  return parser
154
164
 
155
- def take_action(self, parsed_args):
156
- identity_client = self.app.client_manager.sdk_connection.identity
165
+ def take_action(
166
+ self, parsed_args: argparse.Namespace
167
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
168
+ identity_client = sdk_utils.ensure_service_version(
169
+ self.app.client_manager.sdk_connection.identity, '3'
170
+ )
157
171
 
158
172
  kwargs = {}
159
173
  if parsed_args.user:
@@ -190,7 +204,7 @@ class ListCredential(command.Lister):
190
204
  class SetCredential(command.Command):
191
205
  _description = _("Set credential properties")
192
206
 
193
- def get_parser(self, prog_name):
207
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
194
208
  parser = super().get_parser(prog_name)
195
209
  parser.add_argument(
196
210
  'credential',
@@ -224,8 +238,10 @@ class SetCredential(command.Command):
224
238
  )
225
239
  return parser
226
240
 
227
- def take_action(self, parsed_args):
228
- identity_client = self.app.client_manager.sdk_connection.identity
241
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
242
+ identity_client = sdk_utils.ensure_service_version(
243
+ self.app.client_manager.sdk_connection.identity, '3'
244
+ )
229
245
 
230
246
  user_id = identity_client.find_user(
231
247
  parsed_args.user, ignore_missing=False
@@ -250,7 +266,7 @@ class SetCredential(command.Command):
250
266
  class ShowCredential(command.ShowOne):
251
267
  _description = _("Display credential details")
252
268
 
253
- def get_parser(self, prog_name):
269
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
254
270
  parser = super().get_parser(prog_name)
255
271
  parser.add_argument(
256
272
  'credential',
@@ -259,8 +275,12 @@ class ShowCredential(command.ShowOne):
259
275
  )
260
276
  return parser
261
277
 
262
- def take_action(self, parsed_args):
263
- identity_client = self.app.client_manager.sdk_connection.identity
278
+ def take_action(
279
+ self, parsed_args: argparse.Namespace
280
+ ) -> tuple[Sequence[str], Iterable[Any]]:
281
+ identity_client = sdk_utils.ensure_service_version(
282
+ self.app.client_manager.sdk_connection.identity, '3'
283
+ )
264
284
  credential = identity_client.get_credential(parsed_args.credential)
265
285
 
266
286
  return _format_credential(credential)
@@ -15,9 +15,13 @@
15
15
 
16
16
  """Identity v3 Domain action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
18
20
  import logging
21
+ from typing import Any
19
22
 
20
23
  from openstack import exceptions as sdk_exceptions
24
+ from openstack import utils as sdk_utils
21
25
  from osc_lib import exceptions
22
26
  from osc_lib import utils
23
27
 
@@ -29,7 +33,7 @@ from openstackclient.identity import common
29
33
  LOG = logging.getLogger(__name__)
30
34
 
31
35
 
32
- def _format_domain(domain):
36
+ def _format_domain(domain: Any) -> tuple[tuple[str, ...], Any]:
33
37
  columns = (
34
38
  'id',
35
39
  'name',
@@ -57,7 +61,7 @@ def _format_domain(domain):
57
61
  class CreateDomain(command.ShowOne):
58
62
  _description = _("Create new domain")
59
63
 
60
- def get_parser(self, prog_name):
64
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
61
65
  parser = super().get_parser(prog_name)
62
66
  parser.add_argument(
63
67
  'name',
@@ -91,8 +95,12 @@ class CreateDomain(command.ShowOne):
91
95
  common.add_resource_option_to_parser(parser)
92
96
  return parser
93
97
 
94
- def take_action(self, parsed_args):
95
- identity_client = self.app.client_manager.sdk_connection.identity
98
+ def take_action(
99
+ self, parsed_args: argparse.Namespace
100
+ ) -> tuple[Sequence[str], Iterable[Any]]:
101
+ identity_client = sdk_utils.ensure_service_version(
102
+ self.app.client_manager.sdk_connection.identity, '3'
103
+ )
96
104
 
97
105
  options = {}
98
106
  if parsed_args.immutable is not None:
@@ -120,7 +128,7 @@ class CreateDomain(command.ShowOne):
120
128
  class DeleteDomain(command.Command):
121
129
  _description = _("Delete domain(s)")
122
130
 
123
- def get_parser(self, prog_name):
131
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
124
132
  parser = super().get_parser(prog_name)
125
133
  parser.add_argument(
126
134
  'domain',
@@ -130,8 +138,10 @@ class DeleteDomain(command.Command):
130
138
  )
131
139
  return parser
132
140
 
133
- def take_action(self, parsed_args):
134
- identity_client = self.app.client_manager.sdk_connection.identity
141
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
142
+ identity_client = sdk_utils.ensure_service_version(
143
+ self.app.client_manager.sdk_connection.identity, '3'
144
+ )
135
145
  result = 0
136
146
  for i in parsed_args.domain:
137
147
  try:
@@ -159,7 +169,7 @@ class DeleteDomain(command.Command):
159
169
  class ListDomain(command.Lister):
160
170
  _description = _("List domains")
161
171
 
162
- def get_parser(self, prog_name):
172
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
163
173
  parser = super().get_parser(prog_name)
164
174
  parser.add_argument(
165
175
  '--name',
@@ -174,7 +184,12 @@ class ListDomain(command.Lister):
174
184
  )
175
185
  return parser
176
186
 
177
- def take_action(self, parsed_args):
187
+ def take_action(
188
+ self, parsed_args: argparse.Namespace
189
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
190
+ identity_client = sdk_utils.ensure_service_version(
191
+ self.app.client_manager.sdk_connection.identity, '3'
192
+ )
178
193
  kwargs = {}
179
194
  if parsed_args.name:
180
195
  kwargs['name'] = parsed_args.name
@@ -183,9 +198,7 @@ class ListDomain(command.Lister):
183
198
 
184
199
  columns = ('id', 'name', 'is_enabled', 'description')
185
200
  column_headers = ('ID', 'Name', 'Enabled', 'Description')
186
- data = self.app.client_manager.sdk_connection.identity.domains(
187
- **kwargs
188
- )
201
+ data = identity_client.domains(**kwargs)
189
202
 
190
203
  return (
191
204
  column_headers,
@@ -203,7 +216,7 @@ class ListDomain(command.Lister):
203
216
  class SetDomain(command.Command):
204
217
  _description = _("Set domain properties")
205
218
 
206
- def get_parser(self, prog_name):
219
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
207
220
  parser = super().get_parser(prog_name)
208
221
  parser.add_argument(
209
222
  'domain',
@@ -238,8 +251,10 @@ class SetDomain(command.Command):
238
251
  common.add_resource_option_to_parser(parser)
239
252
  return parser
240
253
 
241
- def take_action(self, parsed_args):
242
- identity_client = self.app.client_manager.sdk_connection.identity
254
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
255
+ identity_client = sdk_utils.ensure_service_version(
256
+ self.app.client_manager.sdk_connection.identity, '3'
257
+ )
243
258
  domain = identity_client.find_domain(
244
259
  parsed_args.domain, ignore_missing=False
245
260
  )
@@ -259,7 +274,7 @@ class SetDomain(command.Command):
259
274
  class ShowDomain(command.ShowOne):
260
275
  _description = _("Display domain details")
261
276
 
262
- def get_parser(self, prog_name):
277
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
263
278
  parser = super().get_parser(prog_name)
264
279
  parser.add_argument(
265
280
  'domain',
@@ -268,8 +283,12 @@ class ShowDomain(command.ShowOne):
268
283
  )
269
284
  return parser
270
285
 
271
- def take_action(self, parsed_args):
272
- identity_client = self.app.client_manager.sdk_connection.identity
286
+ def take_action(
287
+ self, parsed_args: argparse.Namespace
288
+ ) -> tuple[Sequence[str], Iterable[Any]]:
289
+ identity_client = sdk_utils.ensure_service_version(
290
+ self.app.client_manager.sdk_connection.identity, '3'
291
+ )
273
292
  domain = identity_client.find_domain(
274
293
  parsed_args.domain, ignore_missing=False
275
294
  )
@@ -12,7 +12,10 @@
12
12
 
13
13
  """Identity v3 EC2 Credentials action implementations"""
14
14
 
15
+ import argparse
16
+ from collections.abc import Iterable, Sequence
15
17
  import logging
18
+ from typing import Any, cast
16
19
 
17
20
  from osc_lib import exceptions
18
21
  from osc_lib import utils
@@ -25,7 +28,9 @@ from openstackclient.identity import common
25
28
  LOG = logging.getLogger(__name__)
26
29
 
27
30
 
28
- def _determine_ec2_user(parsed_args, client_manager):
31
+ def _determine_ec2_user(
32
+ parsed_args: argparse.Namespace, client_manager: Any
33
+ ) -> str:
29
34
  """Determine a user several different ways.
30
35
 
31
36
  Assumes parsed_args has user and user_domain arguments. Attempts to find
@@ -53,13 +58,13 @@ def _determine_ec2_user(parsed_args, client_manager):
53
58
  else:
54
59
  # Get the user from the current auth
55
60
  user = client_manager.auth_ref.user_id
56
- return user
61
+ return cast(str, user)
57
62
 
58
63
 
59
64
  class CreateEC2Creds(command.ShowOne):
60
65
  _description = _("Create EC2 credentials")
61
66
 
62
- def get_parser(self, prog_name):
67
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
63
68
  parser = super().get_parser(prog_name)
64
69
  parser.add_argument(
65
70
  '--project',
@@ -81,7 +86,9 @@ class CreateEC2Creds(command.ShowOne):
81
86
  common.add_project_domain_option_to_parser(parser)
82
87
  return parser
83
88
 
84
- def take_action(self, parsed_args):
89
+ def take_action(
90
+ self, parsed_args: argparse.Namespace
91
+ ) -> tuple[Sequence[str], Iterable[Any]]:
85
92
  identity_client = self.app.client_manager.identity
86
93
  client_manager = self.app.client_manager
87
94
  user = _determine_ec2_user(parsed_args, client_manager)
@@ -115,13 +122,14 @@ class CreateEC2Creds(command.ShowOne):
115
122
  if 'tenant_id' in info:
116
123
  info.update({'project_id': info.pop('tenant_id')})
117
124
 
118
- return zip(*sorted(info.items()))
125
+ col_headers, col_data = zip(*sorted(info.items()))
126
+ return col_headers, col_data
119
127
 
120
128
 
121
129
  class DeleteEC2Creds(command.Command):
122
130
  _description = _("Delete EC2 credentials")
123
131
 
124
- def get_parser(self, prog_name):
132
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
125
133
  parser = super().get_parser(prog_name)
126
134
  parser.add_argument(
127
135
  'access_key',
@@ -137,7 +145,7 @@ class DeleteEC2Creds(command.Command):
137
145
  common.add_user_domain_option_to_parser(parser)
138
146
  return parser
139
147
 
140
- def take_action(self, parsed_args):
148
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
141
149
  client_manager = self.app.client_manager
142
150
  user = _determine_ec2_user(parsed_args, client_manager)
143
151
  result = 0
@@ -166,7 +174,7 @@ class DeleteEC2Creds(command.Command):
166
174
  class ListEC2Creds(command.Lister):
167
175
  _description = _("List EC2 credentials")
168
176
 
169
- def get_parser(self, prog_name):
177
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
170
178
  parser = super().get_parser(prog_name)
171
179
  parser.add_argument(
172
180
  '--user',
@@ -176,7 +184,9 @@ class ListEC2Creds(command.Lister):
176
184
  common.add_user_domain_option_to_parser(parser)
177
185
  return parser
178
186
 
179
- def take_action(self, parsed_args):
187
+ def take_action(
188
+ self, parsed_args: argparse.Namespace
189
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
180
190
  client_manager = self.app.client_manager
181
191
  user = _determine_ec2_user(parsed_args, client_manager)
182
192
 
@@ -200,7 +210,7 @@ class ListEC2Creds(command.Lister):
200
210
  class ShowEC2Creds(command.ShowOne):
201
211
  _description = _("Display EC2 credentials details")
202
212
 
203
- def get_parser(self, prog_name):
213
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
204
214
  parser = super().get_parser(prog_name)
205
215
  parser.add_argument(
206
216
  'access_key',
@@ -215,7 +225,9 @@ class ShowEC2Creds(command.ShowOne):
215
225
  common.add_user_domain_option_to_parser(parser)
216
226
  return parser
217
227
 
218
- def take_action(self, parsed_args):
228
+ def take_action(
229
+ self, parsed_args: argparse.Namespace
230
+ ) -> tuple[Sequence[str], Iterable[Any]]:
219
231
  client_manager = self.app.client_manager
220
232
  user = _determine_ec2_user(parsed_args, client_manager)
221
233
  creds = client_manager.identity.ec2.get(user, parsed_args.access_key)
@@ -226,4 +238,5 @@ class ShowEC2Creds(command.ShowOne):
226
238
  if 'tenant_id' in info:
227
239
  info.update({'project_id': info.pop('tenant_id')})
228
240
 
229
- return zip(*sorted(info.items()))
241
+ col_headers, col_data = zip(*sorted(info.items()))
242
+ return col_headers, col_data
@@ -15,8 +15,12 @@
15
15
 
16
16
  """Identity v3 Endpoint action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
18
20
  import logging
21
+ from typing import Any
19
22
 
23
+ from openstack import utils as sdk_utils
20
24
  from osc_lib import exceptions
21
25
  from osc_lib import utils
22
26
 
@@ -28,7 +32,9 @@ from openstackclient.identity import common
28
32
  LOG = logging.getLogger(__name__)
29
33
 
30
34
 
31
- def _format_endpoint(endpoint, service):
35
+ def _format_endpoint(
36
+ endpoint: Any, service: Any
37
+ ) -> tuple[tuple[str, ...], Any]:
32
38
  columns = (
33
39
  'is_enabled',
34
40
  'id',
@@ -58,7 +64,7 @@ def _format_endpoint(endpoint, service):
58
64
  class AddProjectToEndpoint(command.Command):
59
65
  _description = _("Associate a project to an endpoint")
60
66
 
61
- def get_parser(self, prog_name):
67
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
62
68
  parser = super().get_parser(prog_name)
63
69
  parser.add_argument(
64
70
  'endpoint',
@@ -75,7 +81,7 @@ class AddProjectToEndpoint(command.Command):
75
81
  common.add_project_domain_option_to_parser(parser)
76
82
  return parser
77
83
 
78
- def take_action(self, parsed_args):
84
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
79
85
  client = self.app.client_manager.identity
80
86
 
81
87
  endpoint = utils.find_resource(client.endpoints, parsed_args.endpoint)
@@ -92,7 +98,7 @@ class AddProjectToEndpoint(command.Command):
92
98
  class CreateEndpoint(command.ShowOne):
93
99
  _description = _("Create new endpoint")
94
100
 
95
- def get_parser(self, prog_name):
101
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
96
102
  parser = super().get_parser(prog_name)
97
103
  parser.add_argument(
98
104
  'service',
@@ -131,8 +137,12 @@ class CreateEndpoint(command.ShowOne):
131
137
  )
132
138
  return parser
133
139
 
134
- def take_action(self, parsed_args):
135
- identity_client = self.app.client_manager.sdk_connection.identity
140
+ def take_action(
141
+ self, parsed_args: argparse.Namespace
142
+ ) -> tuple[Sequence[str], Iterable[Any]]:
143
+ identity_client = sdk_utils.ensure_service_version(
144
+ self.app.client_manager.sdk_connection.identity, '3'
145
+ )
136
146
  service = common.find_service_sdk(identity_client, parsed_args.service)
137
147
 
138
148
  kwargs = {}
@@ -154,7 +164,7 @@ class CreateEndpoint(command.ShowOne):
154
164
  class DeleteEndpoint(command.Command):
155
165
  _description = _("Delete endpoint(s)")
156
166
 
157
- def get_parser(self, prog_name):
167
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
158
168
  parser = super().get_parser(prog_name)
159
169
  parser.add_argument(
160
170
  'endpoint',
@@ -164,8 +174,10 @@ class DeleteEndpoint(command.Command):
164
174
  )
165
175
  return parser
166
176
 
167
- def take_action(self, parsed_args):
168
- identity_client = self.app.client_manager.sdk_connection.identity
177
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
178
+ identity_client = sdk_utils.ensure_service_version(
179
+ self.app.client_manager.sdk_connection.identity, '3'
180
+ )
169
181
  result = 0
170
182
  for i in parsed_args.endpoint:
171
183
  try:
@@ -195,7 +207,7 @@ class DeleteEndpoint(command.Command):
195
207
  class ListEndpoint(command.Lister):
196
208
  _description = _("List endpoints")
197
209
 
198
- def get_parser(self, prog_name):
210
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
199
211
  parser = super().get_parser(prog_name)
200
212
  parser.add_argument(
201
213
  '--service',
@@ -227,8 +239,12 @@ class ListEndpoint(command.Lister):
227
239
  common.add_project_domain_option_to_parser(parser)
228
240
  return parser
229
241
 
230
- def take_action(self, parsed_args):
231
- identity_client = self.app.client_manager.sdk_connection.identity
242
+ def take_action(
243
+ self, parsed_args: argparse.Namespace
244
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
245
+ identity_client = sdk_utils.ensure_service_version(
246
+ self.app.client_manager.sdk_connection.identity, '3'
247
+ )
232
248
 
233
249
  endpoint = None
234
250
  if parsed_args.endpoint:
@@ -318,7 +334,7 @@ class ListEndpoint(command.Lister):
318
334
  class RemoveProjectFromEndpoint(command.Command):
319
335
  _description = _("Dissociate a project from an endpoint")
320
336
 
321
- def get_parser(self, prog_name):
337
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
322
338
  parser = super().get_parser(prog_name)
323
339
  parser.add_argument(
324
340
  'endpoint',
@@ -337,7 +353,7 @@ class RemoveProjectFromEndpoint(command.Command):
337
353
  common.add_project_domain_option_to_parser(parser)
338
354
  return parser
339
355
 
340
- def take_action(self, parsed_args):
356
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
341
357
  client = self.app.client_manager.identity
342
358
 
343
359
  endpoint = utils.find_resource(client.endpoints, parsed_args.endpoint)
@@ -354,7 +370,7 @@ class RemoveProjectFromEndpoint(command.Command):
354
370
  class SetEndpoint(command.Command):
355
371
  _description = _("Set endpoint properties")
356
372
 
357
- def get_parser(self, prog_name):
373
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
358
374
  parser = super().get_parser(prog_name)
359
375
  parser.add_argument(
360
376
  'endpoint',
@@ -397,8 +413,10 @@ class SetEndpoint(command.Command):
397
413
  )
398
414
  return parser
399
415
 
400
- def take_action(self, parsed_args):
401
- identity_client = self.app.client_manager.sdk_connection.identity
416
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
417
+ identity_client = sdk_utils.ensure_service_version(
418
+ self.app.client_manager.sdk_connection.identity, '3'
419
+ )
402
420
  endpoint = identity_client.find_endpoint(
403
421
  parsed_args.endpoint, ignore_missing=False
404
422
  )
@@ -434,7 +452,7 @@ class SetEndpoint(command.Command):
434
452
  class ShowEndpoint(command.ShowOne):
435
453
  _description = _("Display endpoint details")
436
454
 
437
- def get_parser(self, prog_name):
455
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
438
456
  parser = super().get_parser(prog_name)
439
457
  parser.add_argument(
440
458
  'endpoint',
@@ -446,8 +464,12 @@ class ShowEndpoint(command.ShowOne):
446
464
  )
447
465
  return parser
448
466
 
449
- def take_action(self, parsed_args):
450
- identity_client = self.app.client_manager.sdk_connection.identity
467
+ def take_action(
468
+ self, parsed_args: argparse.Namespace
469
+ ) -> tuple[Sequence[str], Iterable[Any]]:
470
+ identity_client = sdk_utils.ensure_service_version(
471
+ self.app.client_manager.sdk_connection.identity, '3'
472
+ )
451
473
  endpoint = identity_client.find_endpoint(
452
474
  parsed_args.endpoint, ignore_missing=False
453
475
  )