python-openstackclient 9.0.0__py3-none-any.whl → 10.1.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 (352) 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 +59 -43
  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 +36 -34
  14. openstackclient/common/pagination.py +50 -6
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +11 -6
  17. openstackclient/common/quota.py +105 -103
  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 +42 -22
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +16 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +35 -16
  29. openstackclient/compute/v2/server.py +268 -179
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +28 -12
  32. openstackclient/compute/v2/server_group.py +23 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +27 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +13 -5
  37. openstackclient/compute/v2/service.py +17 -8
  38. openstackclient/compute/v2/usage.py +28 -23
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +82 -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 +32 -12
  51. openstackclient/identity/v3/application_credential.py +66 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +39 -17
  55. openstackclient/identity/v3/domain.py +40 -19
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +98 -64
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +44 -20
  60. openstackclient/identity/v3/group.py +64 -40
  61. openstackclient/identity/v3/identity_provider.py +95 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +42 -17
  64. openstackclient/identity/v3/mapping.py +58 -28
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +59 -26
  67. openstackclient/identity/v3/region.py +39 -17
  68. openstackclient/identity/v3/registered_limit.py +41 -16
  69. openstackclient/identity/v3/role.py +62 -31
  70. openstackclient/identity/v3/role_assignment.py +25 -7
  71. openstackclient/identity/v3/service.py +39 -17
  72. openstackclient/identity/v3/service_provider.py +40 -16
  73. openstackclient/identity/v3/tag.py +23 -6
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +39 -18
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +86 -36
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +16 -11
  81. openstackclient/image/v2/image.py +88 -56
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +117 -20
  84. openstackclient/image/v2/metadef_objects.py +32 -19
  85. openstackclient/image/v2/metadef_properties.py +30 -16
  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 +25 -27
  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 +27 -54
  93. openstackclient/network/v2/address_group.py +39 -16
  94. openstackclient/network/v2/address_scope.py +36 -20
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +477 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +226 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +504 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +301 -0
  100. openstackclient/network/v2/default_security_group_rule.py +31 -14
  101. openstackclient/network/v2/floating_ip.py +121 -162
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +41 -19
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +499 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +610 -0
  107. openstackclient/network/v2/ip_availability.py +25 -8
  108. openstackclient/network/v2/l3_conntrack_helper.py +35 -13
  109. openstackclient/network/v2/local_ip.py +27 -13
  110. openstackclient/network/v2/local_ip_association.py +17 -7
  111. openstackclient/network/v2/ndp_proxy.py +23 -11
  112. openstackclient/network/v2/network.py +213 -213
  113. openstackclient/network/v2/network_agent.py +77 -34
  114. openstackclient/network/v2/network_auto_allocated_topology.py +27 -15
  115. openstackclient/network/v2/network_flavor.py +45 -21
  116. openstackclient/network/v2/network_flavor_profile.py +42 -17
  117. openstackclient/network/v2/network_meter.py +39 -15
  118. openstackclient/network/v2/network_meter_rule.py +40 -12
  119. openstackclient/network/v2/network_qos_policy.py +39 -21
  120. openstackclient/network/v2/network_qos_rule.py +48 -18
  121. openstackclient/network/v2/network_qos_rule_type.py +28 -9
  122. openstackclient/network/v2/network_rbac.py +34 -16
  123. openstackclient/network/v2/network_segment.py +32 -11
  124. openstackclient/network/v2/network_segment_range.py +70 -31
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +41 -22
  127. openstackclient/network/v2/port.py +141 -40
  128. openstackclient/network/v2/router.py +101 -67
  129. openstackclient/network/v2/security_group.py +97 -198
  130. openstackclient/network/v2/security_group_rule.py +115 -282
  131. openstackclient/network/v2/subnet.py +63 -34
  132. openstackclient/network/v2/subnet_pool.py +42 -24
  133. openstackclient/network/v2/taas/tap_flow.py +35 -14
  134. openstackclient/network/v2/taas/tap_mirror.py +28 -14
  135. openstackclient/network/v2/taas/tap_service.py +26 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +28 -16
  139. openstackclient/object/v1/object.py +28 -16
  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 +59 -19
  151. openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
  152. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  153. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  154. openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
  155. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  156. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  157. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  158. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  159. openstackclient/tests/functional/image/base.py +1 -6
  160. openstackclient/tests/functional/network/v2/common.py +5 -2
  161. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  162. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  163. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  164. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  165. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  166. openstackclient/tests/functional/object/v1/common.py +4 -0
  167. openstackclient/tests/functional/volume/v2/common.py +4 -0
  168. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  169. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  170. openstackclient/tests/functional/volume/v3/common.py +4 -0
  171. openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
  172. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
  173. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  174. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  175. openstackclient/tests/unit/common/test_extension.py +2 -2
  176. openstackclient/tests/unit/common/test_limits.py +1 -1
  177. openstackclient/tests/unit/common/test_module.py +82 -44
  178. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  179. openstackclient/tests/unit/common/test_quota.py +15 -26
  180. openstackclient/tests/unit/compute/v2/fakes.py +26 -57
  181. openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
  182. openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
  183. openstackclient/tests/unit/compute/v2/test_console.py +2 -2
  184. openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
  185. openstackclient/tests/unit/compute/v2/test_flavor.py +29 -3
  186. openstackclient/tests/unit/compute/v2/test_host.py +3 -3
  187. openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
  188. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
  189. openstackclient/tests/unit/compute/v2/test_keypair.py +7 -7
  190. openstackclient/tests/unit/compute/v2/test_server.py +26 -111
  191. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  192. openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
  193. openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
  194. openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
  195. openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
  196. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  197. openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
  198. openstackclient/tests/unit/compute/v2/test_service.py +3 -3
  199. openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
  200. openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
  201. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
  202. openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
  203. openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
  204. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
  205. openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
  206. openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
  207. openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
  208. openstackclient/tests/unit/identity/v3/fakes.py +8 -38
  209. openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
  210. openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
  211. openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
  212. openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
  213. openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
  214. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
  215. openstackclient/tests/unit/identity/v3/test_group.py +12 -22
  216. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  217. openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
  218. openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
  219. openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
  220. openstackclient/tests/unit/identity/v3/test_project.py +28 -5
  221. openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
  222. openstackclient/tests/unit/identity/v3/test_region.py +5 -5
  223. openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
  224. openstackclient/tests/unit/identity/v3/test_role.py +8 -8
  225. openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
  226. openstackclient/tests/unit/identity/v3/test_service.py +5 -5
  227. openstackclient/tests/unit/identity/v3/test_token.py +2 -2
  228. openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
  229. openstackclient/tests/unit/identity/v3/test_user.py +77 -10
  230. openstackclient/tests/unit/image/v2/test_image.py +11 -11
  231. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  232. openstackclient/tests/unit/network/test_common.py +0 -155
  233. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  234. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  235. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  236. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  237. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  238. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  239. openstackclient/tests/unit/network/v2/fakes.py +5 -77
  240. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  241. openstackclient/tests/unit/network/v2/fwaas/test_group.py +923 -0
  242. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  243. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +1005 -0
  244. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  245. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  246. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  247. openstackclient/tests/unit/network/v2/test_address_group.py +26 -2
  248. openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
  249. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +27 -2
  250. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +37 -13
  251. openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
  252. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
  253. openstackclient/tests/unit/network/v2/test_network.py +74 -12
  254. openstackclient/tests/unit/network/v2/test_network_agent.py +58 -5
  255. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  256. openstackclient/tests/unit/network/v2/test_network_flavor.py +26 -2
  257. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
  258. openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
  259. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +25 -1
  260. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  261. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
  262. openstackclient/tests/unit/network/v2/test_network_rbac.py +25 -1
  263. openstackclient/tests/unit/network/v2/test_network_segment.py +25 -1
  264. openstackclient/tests/unit/network/v2/test_network_segment_range.py +31 -10
  265. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  266. openstackclient/tests/unit/network/v2/test_port.py +166 -0
  267. openstackclient/tests/unit/network/v2/test_router.py +36 -16
  268. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +11 -8
  269. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +28 -37
  270. openstackclient/tests/unit/network/v2/test_subnet.py +30 -5
  271. openstackclient/tests/unit/network/v2/test_subnet_pool.py +26 -1
  272. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  273. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  274. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  275. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  276. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  277. openstackclient/tests/unit/test_hacking.py +108 -0
  278. openstackclient/tests/unit/volume/v2/fakes.py +21 -140
  279. openstackclient/tests/unit/volume/v2/test_volume_backup.py +6 -14
  280. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +8 -1
  281. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  282. openstackclient/tests/unit/volume/v3/fakes.py +205 -100
  283. openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
  284. openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
  285. openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
  286. openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
  287. openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
  288. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -1
  289. openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
  290. openstackclient/tests/unit/volume/v3/test_volume_backup.py +6 -14
  291. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
  292. openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
  293. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +61 -1
  294. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  295. openstackclient/volume/client.py +7 -3
  296. openstackclient/volume/v2/backup_record.py +15 -6
  297. openstackclient/volume/v2/consistency_group.py +29 -17
  298. openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
  299. openstackclient/volume/v2/qos_specs.py +28 -17
  300. openstackclient/volume/v2/service.py +17 -6
  301. openstackclient/volume/v2/volume.py +60 -30
  302. openstackclient/volume/v2/volume_backend.py +19 -6
  303. openstackclient/volume/v2/volume_backup.py +48 -23
  304. openstackclient/volume/v2/volume_host.py +6 -4
  305. openstackclient/volume/v2/volume_snapshot.py +49 -24
  306. openstackclient/volume/v2/volume_transfer_request.py +31 -13
  307. openstackclient/volume/v2/volume_type.py +43 -24
  308. openstackclient/volume/v3/backup_record.py +94 -0
  309. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  310. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  311. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  312. openstackclient/volume/v3/block_storage_manage.py +10 -4
  313. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  314. openstackclient/volume/v3/consistency_group.py +400 -0
  315. openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
  316. openstackclient/volume/v3/qos_specs.py +389 -0
  317. openstackclient/volume/v3/service.py +16 -6
  318. openstackclient/volume/v3/volume.py +92 -40
  319. openstackclient/volume/v3/volume_attachment.py +47 -21
  320. openstackclient/volume/v3/volume_backend.py +130 -0
  321. openstackclient/volume/v3/volume_backup.py +55 -27
  322. openstackclient/volume/v3/volume_group.py +23 -13
  323. openstackclient/volume/v3/volume_group_snapshot.py +34 -17
  324. openstackclient/volume/v3/volume_group_type.py +27 -14
  325. openstackclient/volume/v3/volume_host.py +74 -0
  326. openstackclient/volume/v3/volume_message.py +18 -8
  327. openstackclient/volume/v3/volume_snapshot.py +70 -32
  328. openstackclient/volume/v3/volume_transfer_request.py +31 -13
  329. openstackclient/volume/v3/volume_type.py +42 -24
  330. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +7 -8
  331. python_openstackclient-10.1.0.dist-info/RECORD +524 -0
  332. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +1 -1
  333. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +77 -25
  334. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +9 -0
  335. python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
  336. openstackclient/api/image_v1.py +0 -69
  337. openstackclient/api/image_v2.py +0 -79
  338. openstackclient/network/v2/floating_ip_pool.py +0 -38
  339. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  340. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  341. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  342. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  343. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  344. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  345. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  346. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  347. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  348. python_openstackclient-9.0.0.dist-info/RECORD +0 -499
  349. python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
  350. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  351. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
  352. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
@@ -13,8 +13,13 @@
13
13
 
14
14
  """Registered limits action implementations."""
15
15
 
16
+ import argparse
17
+ from collections.abc import Iterable, Sequence
16
18
  import logging
19
+ from typing import Any
17
20
 
21
+ from openstack.identity.v3 import registered_limit as _registered_limit
22
+ from openstack import utils as sdk_utils
18
23
  from osc_lib import exceptions
19
24
  from osc_lib import utils
20
25
 
@@ -25,7 +30,9 @@ from openstackclient.identity import common as common_utils
25
30
  LOG = logging.getLogger(__name__)
26
31
 
27
32
 
28
- def _format_registered_limit(registered_limit):
33
+ def _format_registered_limit(
34
+ registered_limit: _registered_limit.RegisteredLimit,
35
+ ) -> tuple[tuple[str, ...], tuple[Any, ...]]:
29
36
  columns = (
30
37
  'default_limit',
31
38
  'description',
@@ -51,7 +58,7 @@ def _format_registered_limit(registered_limit):
51
58
  class CreateRegisteredLimit(command.ShowOne):
52
59
  _description = _("Create a registered limit")
53
60
 
54
- def get_parser(self, prog_name):
61
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
55
62
  parser = super().get_parser(prog_name)
56
63
  parser.add_argument(
57
64
  '--description',
@@ -86,8 +93,12 @@ class CreateRegisteredLimit(command.ShowOne):
86
93
  )
87
94
  return parser
88
95
 
89
- def take_action(self, parsed_args):
90
- identity_client = self.app.client_manager.sdk_connection.identity
96
+ def take_action(
97
+ self, parsed_args: argparse.Namespace
98
+ ) -> tuple[Sequence[str], Iterable[Any]]:
99
+ identity_client = sdk_utils.ensure_service_version(
100
+ self.app.client_manager.sdk_connection.identity, '3'
101
+ )
91
102
 
92
103
  kwargs = {}
93
104
 
@@ -114,7 +125,7 @@ class CreateRegisteredLimit(command.ShowOne):
114
125
  class DeleteRegisteredLimit(command.Command):
115
126
  _description = _("Delete a registered limit")
116
127
 
117
- def get_parser(self, prog_name):
128
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
118
129
  parser = super().get_parser(prog_name)
119
130
  parser.add_argument(
120
131
  'registered_limits',
@@ -127,8 +138,10 @@ class DeleteRegisteredLimit(command.Command):
127
138
  )
128
139
  return parser
129
140
 
130
- def take_action(self, parsed_args):
131
- 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
+ )
132
145
 
133
146
  errors = 0
134
147
  for registered_limit_id in parsed_args.registered_limits:
@@ -160,7 +173,7 @@ class DeleteRegisteredLimit(command.Command):
160
173
  class ListRegisteredLimit(command.Lister):
161
174
  _description = _("List registered limits")
162
175
 
163
- def get_parser(self, prog_name):
176
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
164
177
  parser = super().get_parser(prog_name)
165
178
  parser.add_argument(
166
179
  '--service',
@@ -182,8 +195,12 @@ class ListRegisteredLimit(command.Lister):
182
195
  )
183
196
  return parser
184
197
 
185
- def take_action(self, parsed_args):
186
- identity_client = self.app.client_manager.sdk_connection.identity
198
+ def take_action(
199
+ self, parsed_args: argparse.Namespace
200
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
201
+ identity_client = sdk_utils.ensure_service_version(
202
+ self.app.client_manager.sdk_connection.identity, '3'
203
+ )
187
204
 
188
205
  kwargs = {}
189
206
  if parsed_args.service:
@@ -217,7 +234,7 @@ class ListRegisteredLimit(command.Lister):
217
234
  class SetRegisteredLimit(command.ShowOne):
218
235
  _description = _("Update information about a registered limit")
219
236
 
220
- def get_parser(self, prog_name):
237
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
221
238
  parser = super().get_parser(prog_name)
222
239
  parser.add_argument(
223
240
  'registered_limit_id',
@@ -267,8 +284,12 @@ class SetRegisteredLimit(command.ShowOne):
267
284
  )
268
285
  return parser
269
286
 
270
- def take_action(self, parsed_args):
271
- identity_client = self.app.client_manager.sdk_connection.identity
287
+ def take_action(
288
+ self, parsed_args: argparse.Namespace
289
+ ) -> tuple[Sequence[str], Iterable[Any]]:
290
+ identity_client = sdk_utils.ensure_service_version(
291
+ self.app.client_manager.sdk_connection.identity, '3'
292
+ )
272
293
 
273
294
  kwargs = {}
274
295
  if parsed_args.service:
@@ -300,7 +321,7 @@ class SetRegisteredLimit(command.ShowOne):
300
321
  class ShowRegisteredLimit(command.ShowOne):
301
322
  _description = _("Display registered limit details")
302
323
 
303
- def get_parser(self, prog_name):
324
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
304
325
  parser = super().get_parser(prog_name)
305
326
  parser.add_argument(
306
327
  'registered_limit_id',
@@ -309,8 +330,12 @@ class ShowRegisteredLimit(command.ShowOne):
309
330
  )
310
331
  return parser
311
332
 
312
- def take_action(self, parsed_args):
313
- identity_client = self.app.client_manager.sdk_connection.identity
333
+ def take_action(
334
+ self, parsed_args: argparse.Namespace
335
+ ) -> tuple[Sequence[str], Iterable[Any]]:
336
+ identity_client = sdk_utils.ensure_service_version(
337
+ self.app.client_manager.sdk_connection.identity, '3'
338
+ )
314
339
  registered_limit = identity_client.get_registered_limit(
315
340
  parsed_args.registered_limit_id
316
341
  )
@@ -15,9 +15,14 @@
15
15
 
16
16
  """Identity v3 Role action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
18
20
  import logging
21
+ from typing import Any
19
22
 
20
23
  from openstack import exceptions as sdk_exc
24
+ from openstack.identity.v3 import role as _role
25
+ from openstack import utils as sdk_utils
21
26
  from osc_lib import exceptions
22
27
  from osc_lib import utils
23
28
 
@@ -29,7 +34,7 @@ from openstackclient.identity import common
29
34
  LOG = logging.getLogger(__name__)
30
35
 
31
36
 
32
- def _format_role(role):
37
+ def _format_role(role: _role.Role) -> tuple[tuple[str, ...], Iterable[Any]]:
33
38
  columns = (
34
39
  "id",
35
40
  "name",
@@ -48,7 +53,9 @@ def _format_role(role):
48
53
  )
49
54
 
50
55
 
51
- def _add_identity_and_resource_options_to_parser(parser):
56
+ def _add_identity_and_resource_options_to_parser(
57
+ parser: argparse.ArgumentParser,
58
+ ) -> None:
52
59
  system_or_domain_or_project = parser.add_mutually_exclusive_group()
53
60
  system_or_domain_or_project.add_argument(
54
61
  '--system',
@@ -83,9 +90,11 @@ def _add_identity_and_resource_options_to_parser(parser):
83
90
 
84
91
 
85
92
  def _process_identity_and_resource_options(
86
- parsed_args, identity_client, validate_actor_existence=True
87
- ):
88
- def _find_user():
93
+ parsed_args: argparse.Namespace,
94
+ identity_client: Any,
95
+ validate_actor_existence: bool = True,
96
+ ) -> dict[str, Any]:
97
+ def _find_user() -> Any:
89
98
  domain_id = (
90
99
  common._find_sdk_id(
91
100
  identity_client.find_domain,
@@ -102,7 +111,7 @@ def _process_identity_and_resource_options(
102
111
  domain_id=domain_id,
103
112
  )
104
113
 
105
- def _find_group():
114
+ def _find_group() -> Any:
106
115
  domain_id = (
107
116
  common._find_sdk_id(
108
117
  identity_client.find_domain,
@@ -119,7 +128,7 @@ def _process_identity_and_resource_options(
119
128
  domain_id=domain_id,
120
129
  )
121
130
 
122
- def _find_project():
131
+ def _find_project() -> Any:
123
132
  domain_id = (
124
133
  common._find_sdk_id(
125
134
  identity_client.find_domain,
@@ -180,7 +189,7 @@ class AddRole(command.Command):
180
189
  "system, a domain, or a project"
181
190
  )
182
191
 
183
- def get_parser(self, prog_name):
192
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
184
193
  parser = super().get_parser(prog_name)
185
194
  parser.add_argument(
186
195
  'role',
@@ -191,8 +200,10 @@ class AddRole(command.Command):
191
200
  common.add_role_domain_option_to_parser(parser)
192
201
  return parser
193
202
 
194
- def take_action(self, parsed_args):
195
- identity_client = self.app.client_manager.sdk_connection.identity
203
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
204
+ identity_client = sdk_utils.ensure_service_version(
205
+ self.app.client_manager.sdk_connection.identity, '3'
206
+ )
196
207
 
197
208
  if (
198
209
  not parsed_args.user
@@ -278,7 +289,7 @@ class AddRole(command.Command):
278
289
  class CreateRole(command.ShowOne):
279
290
  _description = _("Create new role")
280
291
 
281
- def get_parser(self, prog_name):
292
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
282
293
  parser = super().get_parser(prog_name)
283
294
  parser.add_argument(
284
295
  'name',
@@ -303,10 +314,14 @@ class CreateRole(command.ShowOne):
303
314
  common.add_resource_option_to_parser(parser)
304
315
  return parser
305
316
 
306
- def take_action(self, parsed_args):
307
- identity_client = self.app.client_manager.sdk_connection.identity
317
+ def take_action(
318
+ self, parsed_args: argparse.Namespace
319
+ ) -> tuple[Sequence[str], Iterable[Any]]:
320
+ identity_client = sdk_utils.ensure_service_version(
321
+ self.app.client_manager.sdk_connection.identity, '3'
322
+ )
308
323
 
309
- create_kwargs = {}
324
+ create_kwargs: dict[str, Any] = {}
310
325
  if parsed_args.domain:
311
326
  create_kwargs['domain_id'] = common._find_sdk_id(
312
327
  identity_client.find_domain, name_or_id=parsed_args.domain
@@ -341,7 +356,7 @@ class CreateRole(command.ShowOne):
341
356
  class DeleteRole(command.Command):
342
357
  _description = _("Delete role(s)")
343
358
 
344
- def get_parser(self, prog_name):
359
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
345
360
  parser = super().get_parser(prog_name)
346
361
  parser.add_argument(
347
362
  'roles',
@@ -356,8 +371,10 @@ class DeleteRole(command.Command):
356
371
  )
357
372
  return parser
358
373
 
359
- def take_action(self, parsed_args):
360
- identity_client = self.app.client_manager.sdk_connection.identity
374
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
375
+ identity_client = sdk_utils.ensure_service_version(
376
+ self.app.client_manager.sdk_connection.identity, '3'
377
+ )
361
378
 
362
379
  domain_id = None
363
380
  if parsed_args.domain:
@@ -395,7 +412,7 @@ class DeleteRole(command.Command):
395
412
  class ListRole(command.Lister):
396
413
  _description = _("List roles")
397
414
 
398
- def get_parser(self, prog_name):
415
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
399
416
  parser = super().get_parser(prog_name)
400
417
  parser.add_argument(
401
418
  '--domain',
@@ -404,8 +421,12 @@ class ListRole(command.Lister):
404
421
  )
405
422
  return parser
406
423
 
407
- def take_action(self, parsed_args):
408
- identity_client = self.app.client_manager.sdk_connection.identity
424
+ def take_action(
425
+ self, parsed_args: argparse.Namespace
426
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
427
+ identity_client = sdk_utils.ensure_service_version(
428
+ self.app.client_manager.sdk_connection.identity, '3'
429
+ )
409
430
 
410
431
  if parsed_args.domain:
411
432
  domain = identity_client.find_domain(
@@ -416,8 +437,10 @@ class ListRole(command.Lister):
416
437
  return (
417
438
  ('ID', 'Name', 'Domain'),
418
439
  (
419
- utils.get_item_properties(s, ('id', 'name'))
420
- + (domain.name,)
440
+ (
441
+ *utils.get_item_properties(s, ('id', 'name')),
442
+ domain.name,
443
+ )
421
444
  for s in data
422
445
  ),
423
446
  )
@@ -435,7 +458,7 @@ class RemoveRole(command.Command):
435
458
  "Removes a role assignment from system/domain/project : user/group"
436
459
  )
437
460
 
438
- def get_parser(self, prog_name):
461
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
439
462
  parser = super().get_parser(prog_name)
440
463
  parser.add_argument(
441
464
  'role',
@@ -447,8 +470,10 @@ class RemoveRole(command.Command):
447
470
 
448
471
  return parser
449
472
 
450
- def take_action(self, parsed_args):
451
- identity_client = self.app.client_manager.sdk_connection.identity
473
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
474
+ identity_client = sdk_utils.ensure_service_version(
475
+ self.app.client_manager.sdk_connection.identity, '3'
476
+ )
452
477
  if (
453
478
  not parsed_args.user
454
479
  and not parsed_args.domain
@@ -527,7 +552,7 @@ class RemoveRole(command.Command):
527
552
  class SetRole(command.Command):
528
553
  _description = _("Set role properties")
529
554
 
530
- def get_parser(self, prog_name):
555
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
531
556
  parser = super().get_parser(prog_name)
532
557
  parser.add_argument(
533
558
  'role',
@@ -552,8 +577,10 @@ class SetRole(command.Command):
552
577
  common.add_resource_option_to_parser(parser)
553
578
  return parser
554
579
 
555
- def take_action(self, parsed_args):
556
- identity_client = self.app.client_manager.sdk_connection.identity
580
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
581
+ identity_client = sdk_utils.ensure_service_version(
582
+ self.app.client_manager.sdk_connection.identity, '3'
583
+ )
557
584
 
558
585
  update_kwargs = {}
559
586
  if parsed_args.description:
@@ -585,7 +612,7 @@ class SetRole(command.Command):
585
612
  class ShowRole(command.ShowOne):
586
613
  _description = _("Display role details")
587
614
 
588
- def get_parser(self, prog_name):
615
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
589
616
  parser = super().get_parser(prog_name)
590
617
  parser.add_argument(
591
618
  'role',
@@ -599,8 +626,12 @@ class ShowRole(command.ShowOne):
599
626
  )
600
627
  return parser
601
628
 
602
- def take_action(self, parsed_args):
603
- identity_client = self.app.client_manager.sdk_connection.identity
629
+ def take_action(
630
+ self, parsed_args: argparse.Namespace
631
+ ) -> tuple[Sequence[str], Iterable[Any]]:
632
+ identity_client = sdk_utils.ensure_service_version(
633
+ self.app.client_manager.sdk_connection.identity, '3'
634
+ )
604
635
 
605
636
  domain_id = None
606
637
  if parsed_args.domain:
@@ -13,13 +13,23 @@
13
13
 
14
14
  """Identity v3 Assignment action implementations"""
15
15
 
16
+ import argparse
17
+ from collections.abc import Iterable
18
+ from typing import Any
19
+
20
+ from openstack.identity.v3 import role_assignment as _role_assignment
21
+ from openstack import utils as sdk_utils
22
+ from osc_lib import exceptions
23
+
16
24
  from openstackclient import command
17
25
  from openstackclient.i18n import _
18
26
  from openstackclient.identity import common
19
27
 
20
28
 
21
- def _format_role_assignment_(assignment, include_names):
22
- def _get_names(attr):
29
+ def _format_role_assignment_(
30
+ assignment: _role_assignment.RoleAssignment, include_names: bool
31
+ ) -> tuple[Any, ...]:
32
+ def _get_names(attr: Any) -> str:
23
33
  return (
24
34
  (
25
35
  attr['name']
@@ -34,7 +44,7 @@ def _format_role_assignment_(assignment, include_names):
34
44
  else ''
35
45
  )
36
46
 
37
- def _get_ids(attr):
47
+ def _get_ids(attr: Any) -> str:
38
48
  return attr['id'] or '' if attr else ''
39
49
 
40
50
  func = _get_names if include_names else _get_ids
@@ -52,7 +62,7 @@ def _format_role_assignment_(assignment, include_names):
52
62
  class ListRoleAssignment(command.Lister):
53
63
  _description = _("List role assignments")
54
64
 
55
- def get_parser(self, prog_name):
65
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
56
66
  parser = super().get_parser(prog_name)
57
67
  parser.add_argument(
58
68
  '--effective',
@@ -117,8 +127,12 @@ class ListRoleAssignment(command.Lister):
117
127
  )
118
128
  return parser
119
129
 
120
- def take_action(self, parsed_args):
121
- identity_client = self.app.client_manager.sdk_connection.identity
130
+ def take_action(
131
+ self, parsed_args: argparse.Namespace
132
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
133
+ identity_client = sdk_utils.ensure_service_version(
134
+ self.app.client_manager.sdk_connection.identity, '3'
135
+ )
122
136
  auth_ref = self.app.client_manager.auth_ref
123
137
 
124
138
  role_id = None
@@ -151,6 +165,8 @@ class ListRoleAssignment(command.Lister):
151
165
  )
152
166
  elif parsed_args.authuser:
153
167
  if auth_ref:
168
+ if auth_ref.user_id is None:
169
+ raise exceptions.CommandError('missing auth info')
154
170
  user_id = common._find_sdk_id(
155
171
  identity_client.find_user,
156
172
  name_or_id=auth_ref.user_id,
@@ -185,6 +201,8 @@ class ListRoleAssignment(command.Lister):
185
201
  )
186
202
  elif parsed_args.authproject:
187
203
  if auth_ref:
204
+ if auth_ref.project_id is None:
205
+ raise exceptions.CommandError('missing auth info')
188
206
  project_id = common._find_sdk_id(
189
207
  identity_client.find_project,
190
208
  name_or_id=auth_ref.project_id,
@@ -233,7 +251,7 @@ class ListRoleAssignment(command.Lister):
233
251
  data_parsed = []
234
252
  for assignment in data:
235
253
  data_parsed.append(
236
- _format_role_assignment_(assignment, include_names)
254
+ _format_role_assignment_(assignment, bool(include_names))
237
255
  )
238
256
 
239
257
  return columns, tuple(data_parsed)
@@ -15,8 +15,13 @@
15
15
 
16
16
  """Identity v3 Service 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.identity.v3 import service as _service
24
+ from openstack import utils as sdk_utils
20
25
  from osc_lib import exceptions
21
26
  from osc_lib import utils
22
27
 
@@ -24,11 +29,12 @@ from openstackclient import command
24
29
  from openstackclient.i18n import _
25
30
  from openstackclient.identity import common
26
31
 
27
-
28
32
  LOG = logging.getLogger(__name__)
29
33
 
30
34
 
31
- def _format_service(service):
35
+ def _format_service(
36
+ service: _service.Service,
37
+ ) -> tuple[tuple[str, ...], tuple[Any, ...]]:
32
38
  columns = (
33
39
  'id',
34
40
  'name',
@@ -56,7 +62,7 @@ def _format_service(service):
56
62
  class CreateService(command.ShowOne):
57
63
  _description = _("Create new service")
58
64
 
59
- def get_parser(self, prog_name):
65
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
60
66
  parser = super().get_parser(prog_name)
61
67
  parser.add_argument(
62
68
  'type',
@@ -90,8 +96,12 @@ class CreateService(command.ShowOne):
90
96
  )
91
97
  return parser
92
98
 
93
- def take_action(self, parsed_args):
94
- identity_client = self.app.client_manager.sdk_connection.identity
99
+ def take_action(
100
+ self, parsed_args: argparse.Namespace
101
+ ) -> tuple[Sequence[str], Iterable[Any]]:
102
+ identity_client = sdk_utils.ensure_service_version(
103
+ self.app.client_manager.sdk_connection.identity, '3'
104
+ )
95
105
 
96
106
  service = identity_client.create_service(
97
107
  name=parsed_args.name,
@@ -106,7 +116,7 @@ class CreateService(command.ShowOne):
106
116
  class DeleteService(command.Command):
107
117
  _description = _("Delete service(s)")
108
118
 
109
- def get_parser(self, prog_name):
119
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
110
120
  parser = super().get_parser(prog_name)
111
121
  parser.add_argument(
112
122
  'service',
@@ -116,8 +126,10 @@ class DeleteService(command.Command):
116
126
  )
117
127
  return parser
118
128
 
119
- def take_action(self, parsed_args):
120
- identity_client = self.app.client_manager.sdk_connection.identity
129
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
130
+ identity_client = sdk_utils.ensure_service_version(
131
+ self.app.client_manager.sdk_connection.identity, '3'
132
+ )
121
133
  result = 0
122
134
  for i in parsed_args.service:
123
135
  try:
@@ -145,7 +157,7 @@ class DeleteService(command.Command):
145
157
  class ListService(command.Lister):
146
158
  _description = _("List services")
147
159
 
148
- def get_parser(self, prog_name):
160
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
149
161
  parser = super().get_parser(prog_name)
150
162
  parser.add_argument(
151
163
  '--long',
@@ -155,8 +167,12 @@ class ListService(command.Lister):
155
167
  )
156
168
  return parser
157
169
 
158
- def take_action(self, parsed_args):
159
- identity_client = self.app.client_manager.sdk_connection.identity
170
+ def take_action(
171
+ self, parsed_args: argparse.Namespace
172
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
173
+ identity_client = sdk_utils.ensure_service_version(
174
+ self.app.client_manager.sdk_connection.identity, '3'
175
+ )
160
176
 
161
177
  columns: tuple[str, ...] = ('id', 'name', 'type')
162
178
  column_headers: tuple[str, ...] = ('ID', 'Name', 'Type')
@@ -175,7 +191,7 @@ class ListService(command.Lister):
175
191
  class SetService(command.Command):
176
192
  _description = _("Set service properties")
177
193
 
178
- def get_parser(self, prog_name):
194
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
179
195
  parser = super().get_parser(prog_name)
180
196
  parser.add_argument(
181
197
  'service',
@@ -214,8 +230,10 @@ class SetService(command.Command):
214
230
  )
215
231
  return parser
216
232
 
217
- def take_action(self, parsed_args):
218
- identity_client = self.app.client_manager.sdk_connection.identity
233
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
234
+ identity_client = sdk_utils.ensure_service_version(
235
+ self.app.client_manager.sdk_connection.identity, '3'
236
+ )
219
237
 
220
238
  service = common.find_service_sdk(identity_client, parsed_args.service)
221
239
  kwargs = {}
@@ -234,7 +252,7 @@ class SetService(command.Command):
234
252
  class ShowService(command.ShowOne):
235
253
  _description = _("Display service details")
236
254
 
237
- def get_parser(self, prog_name):
255
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
238
256
  parser = super().get_parser(prog_name)
239
257
  parser.add_argument(
240
258
  'service',
@@ -243,8 +261,12 @@ class ShowService(command.ShowOne):
243
261
  )
244
262
  return parser
245
263
 
246
- def take_action(self, parsed_args):
247
- identity_client = self.app.client_manager.sdk_connection.identity
264
+ def take_action(
265
+ self, parsed_args: argparse.Namespace
266
+ ) -> tuple[Sequence[str], Iterable[Any]]:
267
+ identity_client = sdk_utils.ensure_service_version(
268
+ self.app.client_manager.sdk_connection.identity, '3'
269
+ )
248
270
 
249
271
  service = common.find_service_sdk(identity_client, parsed_args.service)
250
272