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
@@ -16,8 +16,10 @@
16
16
 
17
17
  """Compute v2 Aggregate action implementations"""
18
18
 
19
+ import argparse
20
+ from collections.abc import Iterable, Sequence
19
21
  import logging
20
- import typing as ty
22
+ from typing import Any
21
23
 
22
24
  from cliff import columns
23
25
  from openstack import utils as sdk_utils
@@ -33,7 +35,7 @@ from openstackclient.i18n import _
33
35
  LOG = logging.getLogger(__name__)
34
36
 
35
37
 
36
- _aggregate_formatters: dict[str, type[columns.FormattableColumn[ty.Any]]] = {
38
+ _aggregate_formatters: dict[str, type[columns.FormattableColumn[Any]]] = {
37
39
  'Hosts': format_columns.ListColumn,
38
40
  'Metadata': format_columns.DictColumn,
39
41
  'hosts': format_columns.ListColumn,
@@ -41,7 +43,9 @@ _aggregate_formatters: dict[str, type[columns.FormattableColumn[ty.Any]]] = {
41
43
  }
42
44
 
43
45
 
44
- def _get_aggregate_columns(item):
46
+ def _get_aggregate_columns(
47
+ item: Any,
48
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
45
49
  # To maintain backwards compatibility we need to rename sdk props to
46
50
  # whatever OSC was using before
47
51
  column_map = {
@@ -56,7 +60,7 @@ def _get_aggregate_columns(item):
56
60
  class AddAggregateHost(command.ShowOne):
57
61
  _description = _("Add host to aggregate")
58
62
 
59
- def get_parser(self, prog_name):
63
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
60
64
  parser = super().get_parser(prog_name)
61
65
  parser.add_argument(
62
66
  'aggregate',
@@ -68,7 +72,9 @@ class AddAggregateHost(command.ShowOne):
68
72
  )
69
73
  return parser
70
74
 
71
- def take_action(self, parsed_args):
75
+ def take_action(
76
+ self, parsed_args: argparse.Namespace
77
+ ) -> tuple[Sequence[str], Iterable[Any]]:
72
78
  compute_client = self.app.client_manager.compute
73
79
 
74
80
  aggregate = compute_client.find_aggregate(
@@ -89,7 +95,7 @@ class AddAggregateHost(command.ShowOne):
89
95
  class CreateAggregate(command.ShowOne):
90
96
  _description = _("Create a new aggregate")
91
97
 
92
- def get_parser(self, prog_name):
98
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
93
99
  parser = super().get_parser(prog_name)
94
100
  parser.add_argument(
95
101
  "name", metavar="<name>", help=_("New aggregate name")
@@ -111,7 +117,9 @@ class CreateAggregate(command.ShowOne):
111
117
  )
112
118
  return parser
113
119
 
114
- def take_action(self, parsed_args):
120
+ def take_action(
121
+ self, parsed_args: argparse.Namespace
122
+ ) -> tuple[Sequence[str], Iterable[Any]]:
115
123
  compute_client = self.app.client_manager.compute
116
124
 
117
125
  attrs = {'name': parsed_args.name}
@@ -137,7 +145,7 @@ class CreateAggregate(command.ShowOne):
137
145
  class DeleteAggregate(command.Command):
138
146
  _description = _("Delete existing aggregate(s)")
139
147
 
140
- def get_parser(self, prog_name):
148
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
141
149
  parser = super().get_parser(prog_name)
142
150
  parser.add_argument(
143
151
  'aggregate',
@@ -147,7 +155,7 @@ class DeleteAggregate(command.Command):
147
155
  )
148
156
  return parser
149
157
 
150
- def take_action(self, parsed_args):
158
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
151
159
  compute_client = self.app.client_manager.compute
152
160
  result = 0
153
161
  for a in parsed_args.aggregate:
@@ -180,7 +188,7 @@ class DeleteAggregate(command.Command):
180
188
  class ListAggregate(command.Lister):
181
189
  _description = _("List all aggregates")
182
190
 
183
- def get_parser(self, prog_name):
191
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
184
192
  parser = super().get_parser(prog_name)
185
193
  parser.add_argument(
186
194
  '--long',
@@ -190,7 +198,9 @@ class ListAggregate(command.Lister):
190
198
  )
191
199
  return parser
192
200
 
193
- def take_action(self, parsed_args):
201
+ def take_action(
202
+ self, parsed_args: argparse.Namespace
203
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
194
204
  compute_client = self.app.client_manager.compute
195
205
 
196
206
  aggregates = list(compute_client.aggregates())
@@ -240,7 +250,7 @@ class ListAggregate(command.Lister):
240
250
  class RemoveAggregateHost(command.ShowOne):
241
251
  _description = _("Remove host from aggregate")
242
252
 
243
- def get_parser(self, prog_name):
253
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
244
254
  parser = super().get_parser(prog_name)
245
255
  parser.add_argument(
246
256
  'aggregate',
@@ -252,7 +262,9 @@ class RemoveAggregateHost(command.ShowOne):
252
262
  )
253
263
  return parser
254
264
 
255
- def take_action(self, parsed_args):
265
+ def take_action(
266
+ self, parsed_args: argparse.Namespace
267
+ ) -> tuple[Sequence[str], Iterable[Any]]:
256
268
  compute_client = self.app.client_manager.compute
257
269
 
258
270
  aggregate = compute_client.find_aggregate(
@@ -273,7 +285,7 @@ class RemoveAggregateHost(command.ShowOne):
273
285
  class SetAggregate(command.Command):
274
286
  _description = _("Set aggregate properties")
275
287
 
276
- def get_parser(self, prog_name):
288
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
277
289
  parser = super().get_parser(prog_name)
278
290
  parser.add_argument(
279
291
  'aggregate',
@@ -309,7 +321,7 @@ class SetAggregate(command.Command):
309
321
  )
310
322
  return parser
311
323
 
312
- def take_action(self, parsed_args):
324
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
313
325
  compute_client = self.app.client_manager.compute
314
326
  aggregate = compute_client.find_aggregate(
315
327
  parsed_args.aggregate, ignore_missing=False
@@ -323,7 +335,7 @@ class SetAggregate(command.Command):
323
335
  if kwargs:
324
336
  compute_client.update_aggregate(aggregate.id, **kwargs)
325
337
 
326
- properties: dict[str, ty.Any] = {}
338
+ properties: dict[str, Any] = {}
327
339
  if parsed_args.no_property:
328
340
  # NOTE(RuiChen): "availability_zone" can not be unset from
329
341
  # properties. It is already excluded from show and create output.
@@ -345,7 +357,7 @@ class SetAggregate(command.Command):
345
357
  class ShowAggregate(command.ShowOne):
346
358
  _description = _("Display aggregate details")
347
359
 
348
- def get_parser(self, prog_name):
360
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
349
361
  parser = super().get_parser(prog_name)
350
362
  parser.add_argument(
351
363
  'aggregate',
@@ -354,7 +366,9 @@ class ShowAggregate(command.ShowOne):
354
366
  )
355
367
  return parser
356
368
 
357
- def take_action(self, parsed_args):
369
+ def take_action(
370
+ self, parsed_args: argparse.Namespace
371
+ ) -> tuple[Sequence[str], Iterable[Any]]:
358
372
  compute_client = self.app.client_manager.compute
359
373
  aggregate = compute_client.find_aggregate(
360
374
  parsed_args.aggregate, ignore_missing=False
@@ -374,7 +388,7 @@ class ShowAggregate(command.ShowOne):
374
388
  class UnsetAggregate(command.Command):
375
389
  _description = _("Unset aggregate properties")
376
390
 
377
- def get_parser(self, prog_name):
391
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
378
392
  parser = super().get_parser(prog_name)
379
393
  parser.add_argument(
380
394
  "aggregate",
@@ -394,7 +408,7 @@ class UnsetAggregate(command.Command):
394
408
  )
395
409
  return parser
396
410
 
397
- def take_action(self, parsed_args):
411
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
398
412
  compute_client = self.app.client_manager.compute
399
413
  aggregate = compute_client.find_aggregate(
400
414
  parsed_args.aggregate, ignore_missing=False
@@ -411,7 +425,7 @@ class CacheImageForAggregate(command.Command):
411
425
  # NOTE(gtema): According to stephenfin and dansmith there is no and will
412
426
  # not be anything to return.
413
427
 
414
- def get_parser(self, prog_name):
428
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
415
429
  parser = super().get_parser(prog_name)
416
430
  parser.add_argument(
417
431
  'aggregate',
@@ -429,7 +443,7 @@ class CacheImageForAggregate(command.Command):
429
443
  )
430
444
  return parser
431
445
 
432
- def take_action(self, parsed_args):
446
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
433
447
  compute_client = self.app.client_manager.compute
434
448
 
435
449
  if not sdk_utils.supports_microversion(compute_client, '2.81'):
@@ -15,6 +15,10 @@
15
15
 
16
16
  """Compute v2 Console action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
20
+ from typing import Any
21
+
18
22
  from osc_lib.cli import parseractions
19
23
  from osc_lib import utils
20
24
 
@@ -22,7 +26,7 @@ from openstackclient import command
22
26
  from openstackclient.i18n import _
23
27
 
24
28
 
25
- def _get_console_columns(item):
29
+ def _get_console_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
26
30
  # To maintain backwards compatibility we need to rename sdk props to
27
31
  # whatever OSC was using before
28
32
  hidden_columns = ['id', 'links', 'location', 'name']
@@ -34,7 +38,7 @@ def _get_console_columns(item):
34
38
  class ShowConsoleLog(command.Command):
35
39
  _description = _("Show server's console output")
36
40
 
37
- def get_parser(self, prog_name):
41
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
38
42
  parser = super().get_parser(prog_name)
39
43
  parser.add_argument(
40
44
  'server',
@@ -54,7 +58,7 @@ class ShowConsoleLog(command.Command):
54
58
  )
55
59
  return parser
56
60
 
57
- def take_action(self, parsed_args):
61
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
58
62
  compute_client = self.app.client_manager.compute
59
63
 
60
64
  server = compute_client.find_server(
@@ -78,7 +82,7 @@ class ShowConsoleLog(command.Command):
78
82
  class ShowConsoleURL(command.ShowOne):
79
83
  _description = _("Show server's remote console URL")
80
84
 
81
- def get_parser(self, prog_name):
85
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
82
86
  parser = super().get_parser(prog_name)
83
87
  parser.add_argument(
84
88
  'server',
@@ -138,17 +142,19 @@ class ShowConsoleURL(command.ShowOne):
138
142
  )
139
143
  return parser
140
144
 
141
- def take_action(self, parsed_args):
145
+ def take_action(
146
+ self, parsed_args: argparse.Namespace
147
+ ) -> tuple[Sequence[str], Iterable[Any]]:
142
148
  compute_client = self.app.client_manager.compute
143
149
  server = compute_client.find_server(
144
150
  parsed_args.server, ignore_missing=False
145
151
  )
146
152
 
147
- data = compute_client.create_console(
153
+ console = compute_client.create_console(
148
154
  server.id, console_type=parsed_args.url_type
149
155
  )
150
156
 
151
- display_columns, columns = _get_console_columns(data)
152
- data = utils.get_dict_properties(data, columns)
157
+ display_columns, columns = _get_console_columns(console)
158
+ data = utils.get_dict_properties(console, columns)
153
159
 
154
160
  return (display_columns, data)
@@ -13,13 +13,19 @@
13
13
 
14
14
  """Compute v2 Console auth token implementations."""
15
15
 
16
+ import argparse
17
+ from collections.abc import Iterable, Sequence
18
+ from typing import Any
19
+
16
20
  from osc_lib import utils
17
21
 
18
22
  from openstackclient import command
19
23
  from openstackclient.i18n import _
20
24
 
21
25
 
22
- def _get_console_connection_columns(item):
26
+ def _get_console_connection_columns(
27
+ item: Any,
28
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
23
29
  column_map: dict[str, str] = {}
24
30
  hidden_columns = ['id', 'location', 'name']
25
31
  return utils.get_osc_show_columns_for_sdk_resource(
@@ -30,7 +36,7 @@ def _get_console_connection_columns(item):
30
36
  class ShowConsoleConnectionInformation(command.ShowOne):
31
37
  _description = _("Show server's remote console connection information")
32
38
 
33
- def get_parser(self, prog_name):
39
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
34
40
  parser = super().get_parser(prog_name)
35
41
  parser.add_argument(
36
42
  'token',
@@ -39,7 +45,9 @@ class ShowConsoleConnectionInformation(command.ShowOne):
39
45
  )
40
46
  return parser
41
47
 
42
- def take_action(self, parsed_args):
48
+ def take_action(
49
+ self, parsed_args: argparse.Namespace
50
+ ) -> tuple[Sequence[str], Iterable[Any]]:
43
51
  compute_client = self.app.client_manager.compute
44
52
  data = compute_client.validate_console_auth_token(parsed_args.token)
45
53
  display_columns, columns = _get_console_connection_columns(data)
@@ -15,7 +15,10 @@
15
15
 
16
16
  """Flavor action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
18
20
  import logging
21
+ from typing import Any
19
22
 
20
23
  from openstack import exceptions as sdk_exceptions
21
24
  from openstack import utils as sdk_utils
@@ -39,7 +42,7 @@ _formatters = {
39
42
  }
40
43
 
41
44
 
42
- def _get_flavor_columns(item):
45
+ def _get_flavor_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
43
46
  # To maintain backwards compatibility we need to rename sdk props to
44
47
  # whatever OSC was using before
45
48
  column_map = {
@@ -57,7 +60,7 @@ def _get_flavor_columns(item):
57
60
  class CreateFlavor(command.ShowOne):
58
61
  _description = _("Create new flavor")
59
62
 
60
- def get_parser(self, prog_name):
63
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
61
64
  parser = super().get_parser(prog_name)
62
65
  parser.add_argument(
63
66
  "name", metavar="<flavor-name>", help=_("New flavor name")
@@ -102,8 +105,7 @@ class CreateFlavor(command.ShowOne):
102
105
  "--rxtx-factor",
103
106
  type=float,
104
107
  metavar="<factor>",
105
- default=1.0,
106
- help=_("RX/TX factor (default 1.0)"),
108
+ help=_("RX/TX factor"),
107
109
  )
108
110
  public_group = parser.add_mutually_exclusive_group()
109
111
  public_group.add_argument(
@@ -148,7 +150,9 @@ class CreateFlavor(command.ShowOne):
148
150
  identity_common.add_project_domain_option_to_parser(parser)
149
151
  return parser
150
152
 
151
- def take_action(self, parsed_args):
153
+ def take_action(
154
+ self, parsed_args: argparse.Namespace
155
+ ) -> tuple[Sequence[str], Iterable[Any]]:
152
156
  compute_client = self.app.client_manager.compute
153
157
  identity_client = self.app.client_manager.identity
154
158
 
@@ -177,10 +181,19 @@ class CreateFlavor(command.ShowOne):
177
181
  'id': flavor_id,
178
182
  'ephemeral': parsed_args.ephemeral,
179
183
  'swap': parsed_args.swap,
180
- 'rxtx_factor': parsed_args.rxtx_factor,
181
184
  'is_public': parsed_args.public,
182
185
  }
183
186
 
187
+ if parsed_args.rxtx_factor:
188
+ if sdk_utils.supports_microversion(compute_client, '2.102'):
189
+ msg = _(
190
+ 'The --rxtx-factor parameter is only supported until '
191
+ 'API microversion 2.101'
192
+ )
193
+ raise exceptions.CommandError(msg)
194
+
195
+ args['rxtx_factor'] = parsed_args.rxtx_factor
196
+
184
197
  if parsed_args.description:
185
198
  if not sdk_utils.supports_microversion(compute_client, '2.55'):
186
199
  msg = _(
@@ -206,6 +219,7 @@ class CreateFlavor(command.ShowOne):
206
219
  "Failed to add project %(project)s access to flavor: %(e)s"
207
220
  )
208
221
  LOG.error(msg, {'project': parsed_args.project, 'e': e})
222
+
209
223
  if parsed_args.properties:
210
224
  try:
211
225
  flavor = compute_client.create_flavor_extra_specs(
@@ -225,7 +239,7 @@ class CreateFlavor(command.ShowOne):
225
239
  class DeleteFlavor(command.Command):
226
240
  _description = _("Delete flavor(s)")
227
241
 
228
- def get_parser(self, prog_name):
242
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
229
243
  parser = super().get_parser(prog_name)
230
244
  parser.add_argument(
231
245
  "flavor",
@@ -235,7 +249,7 @@ class DeleteFlavor(command.Command):
235
249
  )
236
250
  return parser
237
251
 
238
- def take_action(self, parsed_args):
252
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
239
253
  compute_client = self.app.client_manager.compute
240
254
  result = 0
241
255
  for f in parsed_args.flavor:
@@ -264,7 +278,7 @@ class DeleteFlavor(command.Command):
264
278
  class ListFlavor(command.Lister):
265
279
  _description = _("List flavors")
266
280
 
267
- def get_parser(self, prog_name):
281
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
268
282
  parser = super().get_parser(prog_name)
269
283
  public_group = parser.add_mutually_exclusive_group()
270
284
  public_group.add_argument(
@@ -308,7 +322,9 @@ class ListFlavor(command.Lister):
308
322
  pagination.add_marker_pagination_option_to_parser(parser)
309
323
  return parser
310
324
 
311
- def take_action(self, parsed_args):
325
+ def take_action(
326
+ self, parsed_args: argparse.Namespace
327
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
312
328
  compute_client = self.app.client_manager.compute
313
329
  # is_public is ternary - None means give all flavors,
314
330
  # True is public only and False is private only
@@ -323,6 +339,8 @@ class ListFlavor(command.Lister):
323
339
 
324
340
  if parsed_args.limit:
325
341
  query_attrs['limit'] = parsed_args.limit
342
+ if parsed_args.max_items is not None:
343
+ query_attrs['max_items'] = parsed_args.max_items
326
344
 
327
345
  if parsed_args.limit or parsed_args.marker:
328
346
  # User passed explicit pagination request, switch off SDK
@@ -335,7 +353,7 @@ class ListFlavor(command.Lister):
335
353
  if parsed_args.min_ram:
336
354
  query_attrs['min_ram'] = parsed_args.min_ram
337
355
 
338
- data = list(compute_client.flavors(**query_attrs))
356
+ data = list(compute_client.flavors(**query_attrs)) # type: ignore[arg-type]
339
357
  # Even if server supports 2.61 some policy might stop it sending us
340
358
  # extra_specs. So try to fetch them if they are absent
341
359
  for f in data:
@@ -386,7 +404,7 @@ class ListFlavor(command.Lister):
386
404
  class SetFlavor(command.Command):
387
405
  _description = _("Set flavor properties")
388
406
 
389
- def get_parser(self, prog_name):
407
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
390
408
  parser = super().get_parser(prog_name)
391
409
  parser.add_argument(
392
410
  "flavor",
@@ -430,7 +448,7 @@ class SetFlavor(command.Command):
430
448
 
431
449
  return parser
432
450
 
433
- def take_action(self, parsed_args):
451
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
434
452
  compute_client = self.app.client_manager.compute
435
453
  identity_client = self.app.client_manager.identity
436
454
 
@@ -500,7 +518,7 @@ class SetFlavor(command.Command):
500
518
  class ShowFlavor(command.ShowOne):
501
519
  _description = _("Display flavor details")
502
520
 
503
- def get_parser(self, prog_name):
521
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
504
522
  parser = super().get_parser(prog_name)
505
523
  parser.add_argument(
506
524
  "flavor",
@@ -509,7 +527,9 @@ class ShowFlavor(command.ShowOne):
509
527
  )
510
528
  return parser
511
529
 
512
- def take_action(self, parsed_args):
530
+ def take_action(
531
+ self, parsed_args: argparse.Namespace
532
+ ) -> tuple[Sequence[str], Iterable[Any]]:
513
533
  compute_client = self.app.client_manager.compute
514
534
  flavor = compute_client.find_flavor(
515
535
  parsed_args.flavor, get_extra_specs=True, ignore_missing=False
@@ -535,21 +555,21 @@ class ShowFlavor(command.ShowOne):
535
555
 
536
556
  # Since we need to inject "access_project_id" into resource - convert
537
557
  # it to dict and treat it respectively
538
- flavor = flavor.to_dict()
539
- flavor['access_project_ids'] = access_projects
558
+ flavor_dict = flavor.to_dict()
559
+ flavor_dict['access_project_ids'] = access_projects
540
560
 
541
- display_columns, columns = _get_flavor_columns(flavor)
561
+ display_columns, columns = _get_flavor_columns(flavor_dict)
542
562
  data = utils.get_dict_properties(
543
- flavor, columns, formatters=_formatters
563
+ flavor_dict, columns, formatters=_formatters
544
564
  )
545
565
 
546
- return (display_columns, data)
566
+ return display_columns, data
547
567
 
548
568
 
549
569
  class UnsetFlavor(command.Command):
550
570
  _description = _("Unset flavor properties")
551
571
 
552
- def get_parser(self, prog_name):
572
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
553
573
  parser = super().get_parser(prog_name)
554
574
  parser.add_argument(
555
575
  "flavor",
@@ -577,7 +597,7 @@ class UnsetFlavor(command.Command):
577
597
 
578
598
  return parser
579
599
 
580
- def take_action(self, parsed_args):
600
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
581
601
  compute_client = self.app.client_manager.compute
582
602
  identity_client = self.app.client_manager.identity
583
603
 
@@ -15,6 +15,10 @@
15
15
 
16
16
  """Host action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable
20
+ from typing import Any
21
+
18
22
  from openstack import exceptions as sdk_exceptions
19
23
  from osc_lib import utils
20
24
 
@@ -25,7 +29,7 @@ from openstackclient.i18n import _
25
29
  class ListHost(command.Lister):
26
30
  _description = _("DEPRECATED: List hosts")
27
31
 
28
- def get_parser(self, prog_name):
32
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
29
33
  parser = super().get_parser(prog_name)
30
34
  parser.add_argument(
31
35
  "--zone",
@@ -34,7 +38,9 @@ class ListHost(command.Lister):
34
38
  )
35
39
  return parser
36
40
 
37
- def take_action(self, parsed_args):
41
+ def take_action(
42
+ self, parsed_args: argparse.Namespace
43
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
38
44
  compute_client = self.app.client_manager.compute
39
45
 
40
46
  self.log.warning(
@@ -57,7 +63,7 @@ class ListHost(command.Lister):
57
63
  class SetHost(command.Command):
58
64
  _description = _("DEPRECATED: Set host properties")
59
65
 
60
- def get_parser(self, prog_name):
66
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
61
67
  parser = super().get_parser(prog_name)
62
68
  parser.add_argument(
63
69
  "host", metavar="<host>", help=_("Host to modify (name only)")
@@ -82,7 +88,7 @@ class SetHost(command.Command):
82
88
  )
83
89
  return parser
84
90
 
85
- def take_action(self, parsed_args):
91
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
86
92
  compute_client = self.app.client_manager.compute
87
93
 
88
94
  self.log.warning(
@@ -115,12 +121,14 @@ class SetHost(command.Command):
115
121
  class ShowHost(command.Lister):
116
122
  _description = _("DEPRECATED: Display host details")
117
123
 
118
- def get_parser(self, prog_name):
124
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
119
125
  parser = super().get_parser(prog_name)
120
126
  parser.add_argument("host", metavar="<host>", help=_("Name of host"))
121
127
  return parser
122
128
 
123
- def take_action(self, parsed_args):
129
+ def take_action(
130
+ self, parsed_args: argparse.Namespace
131
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
124
132
  compute_client = self.app.client_manager.compute
125
133
 
126
134
  self.log.warning(
@@ -15,8 +15,11 @@
15
15
 
16
16
  """Hypervisor action implementations"""
17
17
 
18
+ import argparse
19
+ from collections.abc import Iterable, Sequence
18
20
  import json
19
21
  import re
22
+ from typing import Any
20
23
 
21
24
  from openstack import exceptions as sdk_exceptions
22
25
  from openstack import utils as sdk_utils
@@ -29,7 +32,9 @@ from openstackclient.common import pagination
29
32
  from openstackclient.i18n import _
30
33
 
31
34
 
32
- def _get_hypervisor_columns(item, client):
35
+ def _get_hypervisor_columns(
36
+ item: Any, client: Any
37
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
33
38
  column_map = {'name': 'hypervisor_hostname'}
34
39
  hidden_columns = ['location', 'servers']
35
40
 
@@ -70,7 +75,7 @@ def _get_hypervisor_columns(item, client):
70
75
  class ListHypervisor(command.Lister):
71
76
  _description = _("List hypervisors")
72
77
 
73
- def get_parser(self, prog_name):
78
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
74
79
  parser = super().get_parser(prog_name)
75
80
  parser.add_argument(
76
81
  '--matching',
@@ -89,7 +94,9 @@ class ListHypervisor(command.Lister):
89
94
  )
90
95
  return parser
91
96
 
92
- def take_action(self, parsed_args):
97
+ def take_action(
98
+ self, parsed_args: argparse.Namespace
99
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
93
100
  compute_client = self.app.client_manager.compute
94
101
 
95
102
  list_opts = {}
@@ -115,6 +122,8 @@ class ListHypervisor(command.Lister):
115
122
  )
116
123
  raise exceptions.CommandError(msg)
117
124
  list_opts['limit'] = parsed_args.limit
125
+ if parsed_args.max_items is not None:
126
+ list_opts['max_items'] = parsed_args.max_items
118
127
 
119
128
  if parsed_args.matching:
120
129
  list_opts['hypervisor_hostname_pattern'] = parsed_args.matching
@@ -160,7 +169,7 @@ class ListHypervisor(command.Lister):
160
169
  class ShowHypervisor(command.ShowOne):
161
170
  _description = _("Display hypervisor details")
162
171
 
163
- def get_parser(self, prog_name):
172
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
164
173
  parser = super().get_parser(prog_name)
165
174
  parser.add_argument(
166
175
  "hypervisor",
@@ -169,7 +178,9 @@ class ShowHypervisor(command.ShowOne):
169
178
  )
170
179
  return parser
171
180
 
172
- def take_action(self, parsed_args):
181
+ def take_action(
182
+ self, parsed_args: argparse.Namespace
183
+ ) -> tuple[Sequence[str], Iterable[Any]]:
173
184
  compute_client = self.app.client_manager.compute
174
185
 
175
186
  hypervisor_id = compute_client.find_hypervisor(
@@ -13,13 +13,19 @@
13
13
 
14
14
  """Hypervisor Stats action implementations"""
15
15
 
16
+ import argparse
17
+ from collections.abc import Iterable, Sequence
18
+ from typing import Any
19
+
16
20
  from osc_lib import utils
17
21
 
18
22
  from openstackclient import command
19
23
  from openstackclient.i18n import _
20
24
 
21
25
 
22
- def _get_hypervisor_stat_columns(item):
26
+ def _get_hypervisor_stat_columns(
27
+ item: Any,
28
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
23
29
  column_map = {
24
30
  # NOTE(gtema): If we decide to use SDK names - empty this
25
31
  'disk_available': 'disk_available_least',
@@ -39,7 +45,9 @@ def _get_hypervisor_stat_columns(item):
39
45
  class ShowHypervisorStats(command.ShowOne):
40
46
  _description = _("Display hypervisor stats details")
41
47
 
42
- def take_action(self, parsed_args):
48
+ def take_action(
49
+ self, parsed_args: argparse.Namespace
50
+ ) -> tuple[Sequence[str], Iterable[Any]]:
43
51
  # The command is deprecated since it is being dropped in Nova.
44
52
  self.log.warning(_("This command is deprecated."))
45
53
  compute_client = self.app.client_manager.compute