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
@@ -14,7 +14,10 @@
14
14
 
15
15
  """Volume V3 Messages implementations"""
16
16
 
17
+ import argparse
18
+ from collections.abc import Iterable, Sequence
17
19
  import logging as LOG
20
+ from typing import Any
18
21
 
19
22
  from cinderclient import api_versions
20
23
  from osc_lib import exceptions
@@ -29,7 +32,7 @@ from openstackclient.identity import common as identity_common
29
32
  class DeleteMessage(command.Command):
30
33
  _description = _('Delete a volume failure message')
31
34
 
32
- def get_parser(self, prog_name):
35
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
33
36
  parser = super().get_parser(prog_name)
34
37
  parser.add_argument(
35
38
  'message_ids',
@@ -40,7 +43,7 @@ class DeleteMessage(command.Command):
40
43
 
41
44
  return parser
42
45
 
43
- def take_action(self, parsed_args):
46
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
44
47
  volume_client = self.app.client_manager.volume
45
48
 
46
49
  if volume_client.api_version < api_versions.APIVersion('3.3'):
@@ -70,7 +73,7 @@ class DeleteMessage(command.Command):
70
73
  class ListMessages(command.Lister):
71
74
  _description = _('List volume failure messages')
72
75
 
73
- def get_parser(self, prog_name):
76
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
74
77
  parser = super().get_parser(prog_name)
75
78
 
76
79
  parser.add_argument(
@@ -79,11 +82,15 @@ class ListMessages(command.Lister):
79
82
  help=_('Filter results by project (name or ID) (admin only)'),
80
83
  )
81
84
  identity_common.add_project_domain_option_to_parser(parser)
82
- pagination.add_marker_pagination_option_to_parser(parser)
85
+ pagination.add_marker_pagination_option_to_parser(
86
+ parser, include_max_items=False
87
+ )
83
88
 
84
89
  return parser
85
90
 
86
- def take_action(self, parsed_args):
91
+ def take_action(
92
+ self, parsed_args: argparse.Namespace
93
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
87
94
  volume_client = self.app.client_manager.volume
88
95
  identity_client = self.app.client_manager.identity
89
96
 
@@ -132,7 +139,7 @@ class ListMessages(command.Lister):
132
139
  class ShowMessage(command.ShowOne):
133
140
  _description = _('Show a volume failure message')
134
141
 
135
- def get_parser(self, prog_name):
142
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
136
143
  parser = super().get_parser(prog_name)
137
144
  parser.add_argument(
138
145
  'message_id',
@@ -142,7 +149,9 @@ class ShowMessage(command.ShowOne):
142
149
 
143
150
  return parser
144
151
 
145
- def take_action(self, parsed_args):
152
+ def take_action(
153
+ self, parsed_args: argparse.Namespace
154
+ ) -> tuple[Sequence[str], Iterable[Any]]:
146
155
  volume_client = self.app.client_manager.volume
147
156
 
148
157
  if volume_client.api_version < api_versions.APIVersion('3.3'):
@@ -154,4 +163,5 @@ class ShowMessage(command.ShowOne):
154
163
 
155
164
  message = volume_client.messages.get(parsed_args.message_id)
156
165
 
157
- return zip(*sorted(message._info.items()))
166
+ col_headers, col_data = zip(*sorted(message._info.items()))
167
+ return col_headers, col_data
@@ -14,12 +14,15 @@
14
14
 
15
15
  """Volume v3 snapshot action implementations"""
16
16
 
17
+ import argparse
18
+ from collections.abc import Iterable, Sequence
17
19
  import functools
18
20
  import logging
19
- import typing as ty
21
+ from typing import Any
20
22
 
21
23
  from cliff import columns as cliff_columns
22
24
  from openstack.block_storage.v3 import snapshot as _snapshot
25
+ from openstack import utils as sdk_utils
23
26
  from osc_lib.cli import format_columns
24
27
  from osc_lib.cli import parseractions
25
28
  from osc_lib import exceptions
@@ -44,11 +47,13 @@ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
44
47
  ``functools.partial(VolumeIdColumn, volume_cache)``.
45
48
  """
46
49
 
47
- def __init__(self, value, volume_cache=None):
50
+ def __init__(
51
+ self, value: str, volume_cache: dict[str, Any] | None = None
52
+ ) -> None:
48
53
  super().__init__(value)
49
54
  self._volume_cache = volume_cache or {}
50
55
 
51
- def human_readable(self):
56
+ def human_readable(self) -> str:
52
57
  """Return a volume name if available
53
58
 
54
59
  :rtype: either the volume ID or name
@@ -60,7 +65,7 @@ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
60
65
  return volume
61
66
 
62
67
 
63
- def _format_snapshot(snapshot: _snapshot.Snapshot) -> dict[str, ty.Any]:
68
+ def _format_snapshot(snapshot: _snapshot.Snapshot) -> dict[str, object]:
64
69
  # Some columns returned by openstacksdk should not be shown because they're
65
70
  # either irrelevant or duplicates
66
71
  ignored_columns = {
@@ -99,7 +104,7 @@ def _format_snapshot(snapshot: _snapshot.Snapshot) -> dict[str, ty.Any]:
99
104
  class CreateVolumeSnapshot(command.ShowOne):
100
105
  _description = _("Create new volume snapshot")
101
106
 
102
- def get_parser(self, prog_name):
107
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
103
108
  parser = super().get_parser(prog_name)
104
109
  parser.add_argument(
105
110
  "snapshot_name",
@@ -123,7 +128,9 @@ class CreateVolumeSnapshot(command.ShowOne):
123
128
  action="store_true",
124
129
  default=False,
125
130
  help=_(
126
- "Create a snapshot attached to an instance. Default is False"
131
+ "Allow snapshot of in-use (attached) volume. "
132
+ "Only needed for microversions prior to 3.66; "
133
+ "ignored for 3.66+"
127
134
  ),
128
135
  )
129
136
  parser.add_argument(
@@ -149,8 +156,12 @@ class CreateVolumeSnapshot(command.ShowOne):
149
156
  )
150
157
  return parser
151
158
 
152
- def take_action(self, parsed_args):
153
- volume_client = self.app.client_manager.sdk_connection.volume
159
+ def take_action(
160
+ self, parsed_args: argparse.Namespace
161
+ ) -> tuple[Sequence[str], Iterable[Any]]:
162
+ volume_client = sdk_utils.ensure_service_version(
163
+ self.app.client_manager.sdk_connection.volume, '3'
164
+ )
154
165
 
155
166
  volume = parsed_args.volume
156
167
  if not parsed_args.volume:
@@ -176,22 +187,33 @@ class CreateVolumeSnapshot(command.ShowOne):
176
187
  )
177
188
  else:
178
189
  # Create a new snapshot from scratch
179
- snapshot = volume_client.create_snapshot(
180
- volume_id=volume_id,
181
- force=parsed_args.force,
182
- name=parsed_args.snapshot_name,
183
- description=parsed_args.description,
184
- metadata=parsed_args.properties,
185
- )
190
+ # only for microversion < 3.66, pass force parameter
191
+ # for backward compatibility
192
+ if not sdk_utils.supports_microversion(volume_client, '3.66'):
193
+ snapshot = volume_client.create_snapshot(
194
+ volume_id=volume_id,
195
+ force=parsed_args.force,
196
+ name=parsed_args.snapshot_name,
197
+ description=parsed_args.description,
198
+ metadata=parsed_args.properties,
199
+ )
200
+ else:
201
+ snapshot = volume_client.create_snapshot(
202
+ volume_id=volume_id,
203
+ name=parsed_args.snapshot_name,
204
+ description=parsed_args.description,
205
+ metadata=parsed_args.properties,
206
+ )
186
207
 
187
208
  data = _format_snapshot(snapshot)
188
- return zip(*sorted(data.items()))
209
+ col_headers, col_data = zip(*sorted(data.items()))
210
+ return col_headers, col_data
189
211
 
190
212
 
191
213
  class DeleteVolumeSnapshot(command.Command):
192
214
  _description = _("Delete volume snapshot(s)")
193
215
 
194
- def get_parser(self, prog_name):
216
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
195
217
  parser = super().get_parser(prog_name)
196
218
  parser.add_argument(
197
219
  "snapshots",
@@ -217,8 +239,10 @@ class DeleteVolumeSnapshot(command.Command):
217
239
  )
218
240
  return parser
219
241
 
220
- def take_action(self, parsed_args):
221
- volume_client = self.app.client_manager.sdk_connection.volume
242
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
243
+ volume_client = sdk_utils.ensure_service_version(
244
+ self.app.client_manager.sdk_connection.volume, '3'
245
+ )
222
246
  result = 0
223
247
 
224
248
  if parsed_args.remote:
@@ -262,7 +286,7 @@ class DeleteVolumeSnapshot(command.Command):
262
286
  class ListVolumeSnapshot(command.Lister):
263
287
  _description = _("List volume snapshots")
264
288
 
265
- def get_parser(self, prog_name):
289
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
266
290
  parser = super().get_parser(prog_name)
267
291
  parser.add_argument(
268
292
  '--all-projects',
@@ -313,8 +337,12 @@ class ListVolumeSnapshot(command.Lister):
313
337
  pagination.add_marker_pagination_option_to_parser(parser)
314
338
  return parser
315
339
 
316
- def take_action(self, parsed_args):
317
- volume_client = self.app.client_manager.sdk_connection.volume
340
+ def take_action(
341
+ self, parsed_args: argparse.Namespace
342
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
343
+ volume_client = sdk_utils.ensure_service_version(
344
+ self.app.client_manager.sdk_connection.volume, '3'
345
+ )
318
346
  identity_client = self.app.client_manager.identity
319
347
 
320
348
  columns: tuple[str, ...] = (
@@ -377,6 +405,7 @@ class ListVolumeSnapshot(command.Lister):
377
405
  data = volume_client.snapshots(
378
406
  marker=parsed_args.marker,
379
407
  limit=parsed_args.limit,
408
+ max_items=parsed_args.max_items,
380
409
  all_projects=all_projects,
381
410
  project_id=project_id,
382
411
  name=parsed_args.name,
@@ -402,7 +431,7 @@ class ListVolumeSnapshot(command.Lister):
402
431
  class SetVolumeSnapshot(command.Command):
403
432
  _description = _("Set volume snapshot properties")
404
433
 
405
- def get_parser(self, prog_name):
434
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
406
435
  parser = super().get_parser(prog_name)
407
436
  parser.add_argument(
408
437
  'snapshot',
@@ -458,8 +487,10 @@ class SetVolumeSnapshot(command.Command):
458
487
  )
459
488
  return parser
460
489
 
461
- def take_action(self, parsed_args):
462
- volume_client = self.app.client_manager.sdk_connection.volume
490
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
491
+ volume_client = sdk_utils.ensure_service_version(
492
+ self.app.client_manager.sdk_connection.volume, '3'
493
+ )
463
494
 
464
495
  snapshot = volume_client.find_snapshot(
465
496
  parsed_args.snapshot, ignore_missing=False
@@ -517,7 +548,7 @@ class SetVolumeSnapshot(command.Command):
517
548
  class ShowVolumeSnapshot(command.ShowOne):
518
549
  _description = _("Display volume snapshot details")
519
550
 
520
- def get_parser(self, prog_name):
551
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
521
552
  parser = super().get_parser(prog_name)
522
553
  parser.add_argument(
523
554
  "snapshot",
@@ -526,21 +557,26 @@ class ShowVolumeSnapshot(command.ShowOne):
526
557
  )
527
558
  return parser
528
559
 
529
- def take_action(self, parsed_args):
530
- volume_client = self.app.client_manager.sdk_connection.volume
560
+ def take_action(
561
+ self, parsed_args: argparse.Namespace
562
+ ) -> tuple[Sequence[str], Iterable[Any]]:
563
+ volume_client = sdk_utils.ensure_service_version(
564
+ self.app.client_manager.sdk_connection.volume, '3'
565
+ )
531
566
 
532
567
  snapshot = volume_client.find_snapshot(
533
568
  parsed_args.snapshot, ignore_missing=False
534
569
  )
535
570
 
536
571
  data = _format_snapshot(snapshot)
537
- return zip(*sorted(data.items()))
572
+ col_headers, col_data = zip(*sorted(data.items()))
573
+ return col_headers, col_data
538
574
 
539
575
 
540
576
  class UnsetVolumeSnapshot(command.Command):
541
577
  _description = _("Unset volume snapshot properties")
542
578
 
543
- def get_parser(self, prog_name):
579
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
544
580
  parser = super().get_parser(prog_name)
545
581
  parser.add_argument(
546
582
  'snapshot',
@@ -560,8 +596,10 @@ class UnsetVolumeSnapshot(command.Command):
560
596
  )
561
597
  return parser
562
598
 
563
- def take_action(self, parsed_args):
564
- volume_client = self.app.client_manager.sdk_connection.volume
599
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
600
+ volume_client = sdk_utils.ensure_service_version(
601
+ self.app.client_manager.sdk_connection.volume, '3'
602
+ )
565
603
 
566
604
  snapshot = volume_client.find_snapshot(
567
605
  parsed_args.snapshot, ignore_missing=False
@@ -14,7 +14,10 @@
14
14
 
15
15
  """Volume v3 transfer action implementations"""
16
16
 
17
+ import argparse
18
+ from collections.abc import Iterable, Sequence
17
19
  import logging
20
+ from typing import Any
18
21
 
19
22
  from cinderclient import api_versions
20
23
  from osc_lib import exceptions
@@ -30,7 +33,7 @@ LOG = logging.getLogger(__name__)
30
33
  class AcceptTransferRequest(command.ShowOne):
31
34
  _description = _("Accept volume transfer request.")
32
35
 
33
- def get_parser(self, prog_name):
36
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
34
37
  parser = super().get_parser(prog_name)
35
38
  parser.add_argument(
36
39
  'transfer_request',
@@ -45,7 +48,9 @@ class AcceptTransferRequest(command.ShowOne):
45
48
  )
46
49
  return parser
47
50
 
48
- def take_action(self, parsed_args):
51
+ def take_action(
52
+ self, parsed_args: argparse.Namespace
53
+ ) -> tuple[Sequence[str], Iterable[Any]]:
49
54
  volume_client = self.app.client_manager.volume
50
55
 
51
56
  try:
@@ -63,13 +68,14 @@ class AcceptTransferRequest(command.ShowOne):
63
68
  )
64
69
  transfer_accept._info.pop("links", None)
65
70
 
66
- return zip(*sorted(transfer_accept._info.items()))
71
+ col_headers, col_data = zip(*sorted(transfer_accept._info.items()))
72
+ return col_headers, col_data
67
73
 
68
74
 
69
75
  class CreateTransferRequest(command.ShowOne):
70
76
  _description = _("Create volume transfer request.")
71
77
 
72
- def get_parser(self, prog_name):
78
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
73
79
  parser = super().get_parser(prog_name)
74
80
  parser.add_argument(
75
81
  '--name',
@@ -102,7 +108,9 @@ class CreateTransferRequest(command.ShowOne):
102
108
  )
103
109
  return parser
104
110
 
105
- def take_action(self, parsed_args):
111
+ def take_action(
112
+ self, parsed_args: argparse.Namespace
113
+ ) -> tuple[Sequence[str], Iterable[Any]]:
106
114
  volume_client = self.app.client_manager.volume
107
115
 
108
116
  kwargs = {}
@@ -130,13 +138,16 @@ class CreateTransferRequest(command.ShowOne):
130
138
  )
131
139
  volume_transfer_request._info.pop("links", None)
132
140
 
133
- return zip(*sorted(volume_transfer_request._info.items()))
141
+ col_headers, col_data = zip(
142
+ *sorted(volume_transfer_request._info.items())
143
+ )
144
+ return col_headers, col_data
134
145
 
135
146
 
136
147
  class DeleteTransferRequest(command.Command):
137
148
  _description = _("Delete volume transfer request(s).")
138
149
 
139
- def get_parser(self, prog_name):
150
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
140
151
  parser = super().get_parser(prog_name)
141
152
  parser.add_argument(
142
153
  'transfer_request',
@@ -146,7 +157,7 @@ class DeleteTransferRequest(command.Command):
146
157
  )
147
158
  return parser
148
159
 
149
- def take_action(self, parsed_args):
160
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
150
161
  volume_client = self.app.client_manager.volume
151
162
  result = 0
152
163
 
@@ -179,7 +190,7 @@ class DeleteTransferRequest(command.Command):
179
190
  class ListTransferRequest(command.Lister):
180
191
  _description = _("Lists all volume transfer requests.")
181
192
 
182
- def get_parser(self, prog_name):
193
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
183
194
  parser = super().get_parser(prog_name)
184
195
  parser.add_argument(
185
196
  '--all-projects',
@@ -190,7 +201,9 @@ class ListTransferRequest(command.Lister):
190
201
  )
191
202
  return parser
192
203
 
193
- def take_action(self, parsed_args):
204
+ def take_action(
205
+ self, parsed_args: argparse.Namespace
206
+ ) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
194
207
  columns = ['ID', 'Name', 'Volume ID']
195
208
  column_headers = ['ID', 'Name', 'Volume']
196
209
 
@@ -213,7 +226,7 @@ class ListTransferRequest(command.Lister):
213
226
  class ShowTransferRequest(command.ShowOne):
214
227
  _description = _("Show volume transfer request details.")
215
228
 
216
- def get_parser(self, prog_name):
229
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
217
230
  parser = super().get_parser(prog_name)
218
231
  parser.add_argument(
219
232
  'transfer_request',
@@ -222,7 +235,9 @@ class ShowTransferRequest(command.ShowOne):
222
235
  )
223
236
  return parser
224
237
 
225
- def take_action(self, parsed_args):
238
+ def take_action(
239
+ self, parsed_args: argparse.Namespace
240
+ ) -> tuple[Sequence[str], Iterable[Any]]:
226
241
  volume_client = self.app.client_manager.volume
227
242
  volume_transfer_request = utils.find_resource(
228
243
  volume_client.transfers,
@@ -230,4 +245,7 @@ class ShowTransferRequest(command.ShowOne):
230
245
  )
231
246
  volume_transfer_request._info.pop("links", None)
232
247
 
233
- return zip(*sorted(volume_transfer_request._info.items()))
248
+ col_headers, col_data = zip(
249
+ *sorted(volume_transfer_request._info.items())
250
+ )
251
+ return col_headers, col_data
@@ -13,9 +13,11 @@
13
13
 
14
14
  """Volume v3 Type action implementations"""
15
15
 
16
+ import argparse
17
+ from collections.abc import Iterable, MutableMapping, Sequence
16
18
  import functools
17
19
  import logging
18
- import typing as ty
20
+ from typing import Any
19
21
 
20
22
  from cinderclient import api_versions
21
23
  from cliff import columns as cliff_columns
@@ -32,7 +34,7 @@ from openstackclient.identity import common as identity_common
32
34
  LOG = logging.getLogger(__name__)
33
35
 
34
36
 
35
- class EncryptionInfoColumn(cliff_columns.FormattableColumn[ty.Any]):
37
+ class EncryptionInfoColumn(cliff_columns.FormattableColumn[Any]):
36
38
  """Formattable column for encryption info column.
37
39
 
38
40
  Unlike the parent FormattableColumn class, the initializer of the
@@ -43,26 +45,30 @@ class EncryptionInfoColumn(cliff_columns.FormattableColumn[ty.Any]):
43
45
  ``functools.partial(EncryptionInfoColumn encryption_data)``.
44
46
  """
45
47
 
46
- def __init__(self, value, encryption_data=None):
48
+ def __init__(
49
+ self, value: Any, encryption_data: dict[str, Any] | None = None
50
+ ) -> None:
47
51
  super().__init__(value)
48
52
  self._encryption_data = encryption_data or {}
49
53
 
50
- def _get_encryption_info(self):
54
+ def _get_encryption_info(self) -> Any:
51
55
  type_id = self._value
52
56
  return self._encryption_data.get(type_id)
53
57
 
54
- def human_readable(self):
58
+ def human_readable(self) -> str:
55
59
  encryption_info = self._get_encryption_info()
56
60
  if encryption_info:
57
61
  return utils.format_dict(encryption_info)
58
62
  else:
59
63
  return '-'
60
64
 
61
- def machine_readable(self):
65
+ def machine_readable(self) -> Any:
62
66
  return self._get_encryption_info()
63
67
 
64
68
 
65
- def _create_encryption_type(volume_client, volume_type, parsed_args):
69
+ def _create_encryption_type(
70
+ volume_client: Any, volume_type: Any, parsed_args: argparse.Namespace
71
+ ) -> Any:
66
72
  if not parsed_args.encryption_provider:
67
73
  msg = _(
68
74
  "'--encryption-provider' should be specified while "
@@ -85,7 +91,9 @@ def _create_encryption_type(volume_client, volume_type, parsed_args):
85
91
  return encryption
86
92
 
87
93
 
88
- def _set_encryption_type(volume_client, volume_type, parsed_args):
94
+ def _set_encryption_type(
95
+ volume_client: Any, volume_type: Any, parsed_args: argparse.Namespace
96
+ ) -> None:
89
97
  # update the existing encryption type
90
98
  body = {}
91
99
  for attr in ['provider', 'cipher', 'key_size', 'control_location']:
@@ -109,7 +117,7 @@ def _set_encryption_type(volume_client, volume_type, parsed_args):
109
117
  class CreateVolumeType(command.ShowOne):
110
118
  _description = _("Create new volume type")
111
119
 
112
- def get_parser(self, prog_name):
120
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
113
121
  parser = super().get_parser(prog_name)
114
122
  parser.add_argument(
115
123
  "name",
@@ -243,7 +251,9 @@ class CreateVolumeType(command.ShowOne):
243
251
  )
244
252
  return parser
245
253
 
246
- def take_action(self, parsed_args):
254
+ def take_action(
255
+ self, parsed_args: argparse.Namespace
256
+ ) -> tuple[Sequence[str], Iterable[Any]]:
247
257
  identity_client = self.app.client_manager.identity
248
258
  volume_client = self.app.client_manager.volume
249
259
 
@@ -325,13 +335,14 @@ class CreateVolumeType(command.ShowOne):
325
335
 
326
336
  volume_type._info.pop("os-volume-type-access:is_public", None)
327
337
 
328
- return zip(*sorted(volume_type._info.items()))
338
+ col_headers, col_data = zip(*sorted(volume_type._info.items()))
339
+ return col_headers, col_data
329
340
 
330
341
 
331
342
  class DeleteVolumeType(command.Command):
332
343
  _description = _("Delete volume type(s)")
333
344
 
334
- def get_parser(self, prog_name):
345
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
335
346
  parser = super().get_parser(prog_name)
336
347
  parser.add_argument(
337
348
  "volume_types",
@@ -341,7 +352,7 @@ class DeleteVolumeType(command.Command):
341
352
  )
342
353
  return parser
343
354
 
344
- def take_action(self, parsed_args):
355
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
345
356
  volume_client = self.app.client_manager.volume
346
357
  result = 0
347
358
 
@@ -373,7 +384,7 @@ class DeleteVolumeType(command.Command):
373
384
  class ListVolumeType(command.Lister):
374
385
  _description = _("List volume types")
375
386
 
376
- def get_parser(self, prog_name):
387
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
377
388
  parser = super().get_parser(prog_name)
378
389
  parser.add_argument(
379
390
  '--long',
@@ -467,7 +478,9 @@ class ListVolumeType(command.Lister):
467
478
  )
468
479
  return parser
469
480
 
470
- def take_action(self, parsed_args):
481
+ def take_action(
482
+ self, parsed_args: argparse.Namespace
483
+ ) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
471
484
  volume_client = self.app.client_manager.volume
472
485
 
473
486
  if parsed_args.long:
@@ -522,7 +535,9 @@ class ListVolumeType(command.Lister):
522
535
  is_public=parsed_args.is_public,
523
536
  )
524
537
 
525
- formatters = {'Extra Specs': format_columns.DictColumn}
538
+ formatters: MutableMapping[str, Any] = {
539
+ 'Extra Specs': format_columns.DictColumn
540
+ }
526
541
 
527
542
  if parsed_args.encryption_type:
528
543
  encryption = {}
@@ -549,7 +564,7 @@ class ListVolumeType(command.Lister):
549
564
  _EncryptionInfoColumn = functools.partial(
550
565
  EncryptionInfoColumn, encryption_data=encryption
551
566
  )
552
- formatters['id'] = _EncryptionInfoColumn # type: ignore
567
+ formatters['id'] = _EncryptionInfoColumn
553
568
 
554
569
  return (
555
570
  column_headers,
@@ -567,7 +582,7 @@ class ListVolumeType(command.Lister):
567
582
  class SetVolumeType(command.Command):
568
583
  _description = _("Set volume type properties")
569
584
 
570
- def get_parser(self, prog_name):
585
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
571
586
  parser = super().get_parser(prog_name)
572
587
  parser.add_argument(
573
588
  'volume_type',
@@ -706,7 +721,7 @@ class SetVolumeType(command.Command):
706
721
  )
707
722
  return parser
708
723
 
709
- def take_action(self, parsed_args):
724
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
710
725
  volume_client = self.app.client_manager.volume
711
726
  identity_client = self.app.client_manager.identity
712
727
 
@@ -802,7 +817,7 @@ class SetVolumeType(command.Command):
802
817
  class ShowVolumeType(command.ShowOne):
803
818
  _description = _("Display volume type details")
804
819
 
805
- def get_parser(self, prog_name):
820
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
806
821
  parser = super().get_parser(prog_name)
807
822
  parser.add_argument(
808
823
  "volume_type",
@@ -819,7 +834,9 @@ class ShowVolumeType(command.ShowOne):
819
834
  )
820
835
  return parser
821
836
 
822
- def take_action(self, parsed_args):
837
+ def take_action(
838
+ self, parsed_args: argparse.Namespace
839
+ ) -> tuple[Sequence[str], Iterable[Any]]:
823
840
  volume_client = self.app.client_manager.volume
824
841
  volume_type = utils.find_resource(
825
842
  volume_client.volume_types, parsed_args.volume_type
@@ -867,13 +884,14 @@ class ShowVolumeType(command.ShowOne):
867
884
  e,
868
885
  )
869
886
  volume_type._info.pop("os-volume-type-access:is_public", None)
870
- return zip(*sorted(volume_type._info.items()))
887
+ col_headers, col_data = zip(*sorted(volume_type._info.items()))
888
+ return col_headers, col_data
871
889
 
872
890
 
873
891
  class UnsetVolumeType(command.Command):
874
892
  _description = _("Unset volume type properties")
875
893
 
876
- def get_parser(self, prog_name):
894
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
877
895
  parser = super().get_parser(prog_name)
878
896
  parser.add_argument(
879
897
  'volume_type',
@@ -908,7 +926,7 @@ class UnsetVolumeType(command.Command):
908
926
  )
909
927
  return parser
910
928
 
911
- def take_action(self, parsed_args):
929
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
912
930
  volume_client = self.app.client_manager.volume
913
931
  identity_client = self.app.client_manager.identity
914
932