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
openstackclient/shell.py CHANGED
@@ -16,7 +16,9 @@
16
16
 
17
17
  """Command-line interface to the OpenStack APIs"""
18
18
 
19
+ import argparse
19
20
  import sys
21
+ from typing import Any
20
22
  import warnings
21
23
 
22
24
  from osc_lib.api import auth
@@ -31,14 +33,16 @@ DEFAULT_DOMAIN = 'default'
31
33
  # core OSC
32
34
  IGNORED_MODULES = (
33
35
  'neutron_taas.taas_client.osc',
36
+ 'neutronclient.osc.v2.fwaas',
34
37
  'neutronclient.osc.v2.taas',
38
+ 'neutronclient.osc.v2.networking_bgpvpn',
35
39
  )
36
40
 
37
41
 
38
42
  class OpenStackShell(shell.OpenStackShell):
39
43
  client_manager: clientmanager.ClientManager
40
44
 
41
- def __init__(self):
45
+ def __init__(self) -> None:
42
46
  command_manager = commandmanager.CommandManager(
43
47
  'openstack.cli', ignored_modules=IGNORED_MODULES
44
48
  )
@@ -59,7 +63,12 @@ class OpenStackShell(shell.OpenStackShell):
59
63
  # about them
60
64
  warnings.filterwarnings('ignore', module='openstack')
61
65
 
62
- def build_option_parser(self, description, version, argparse_kwargs=None):
66
+ def build_option_parser(
67
+ self,
68
+ description: str | None,
69
+ version: str | None,
70
+ argparse_kwargs: dict[str, Any] | None = None,
71
+ ) -> argparse.ArgumentParser:
63
72
  parser = super().build_option_parser(
64
73
  description, version, argparse_kwargs
65
74
  )
@@ -67,7 +76,7 @@ class OpenStackShell(shell.OpenStackShell):
67
76
  parser = auth.build_auth_plugins_option_parser(parser)
68
77
  return parser
69
78
 
70
- def _final_defaults(self):
79
+ def _final_defaults(self) -> None:
71
80
  super()._final_defaults()
72
81
 
73
82
  # Set the default plugin to admin_token if endpoint and token are given
@@ -77,7 +86,7 @@ class OpenStackShell(shell.OpenStackShell):
77
86
  else:
78
87
  self._auth_type = 'password'
79
88
 
80
- def _load_plugins(self):
89
+ def _load_plugins(self) -> None:
81
90
  """Load plugins via stevedore."""
82
91
  # Loop through extensions to get API versions
83
92
  for mod in clientmanager.PLUGIN_MODULES:
@@ -128,16 +137,43 @@ class OpenStackShell(shell.OpenStackShell):
128
137
  },
129
138
  )
130
139
 
131
- # Command groups deal only with major versions
132
- version = '.v' + version_opt.replace('.', '_').split('_')[0]
133
- cmd_group = 'openstack.' + api.replace('-', '_') + version
140
+ # Build our command group which we expect to look like:
141
+ #
142
+ # openstack.<service>.vN
143
+ #
144
+ # Note that command groups deal only with major versions
145
+ cmd_group = '.'.join(
146
+ [
147
+ 'openstack',
148
+ api.replace('-', '_'),
149
+ 'v' + version_opt.replace('.', '_').split('_')[0],
150
+ ]
151
+ )
134
152
  self.command_manager.add_command_group(cmd_group)
135
153
  self.log.debug(
136
154
  '%(name)s API version %(version)s, cmd group %(group)s',
137
155
  {'name': api, 'version': version_opt, 'group': cmd_group},
138
156
  )
139
157
 
140
- def _load_commands(self):
158
+ mod_extensions = getattr(mod, 'API_EXTENSIONS', None)
159
+ if not mod_extensions:
160
+ continue
161
+
162
+ for extension in mod_extensions:
163
+ extension_cmd_group = '.'.join([cmd_group, extension])
164
+ self.command_manager.add_command_group(extension_cmd_group)
165
+ self.log.debug(
166
+ '%(name)s API version %(version)s '
167
+ '(%(extension)s extension), cmd group %(group)s',
168
+ {
169
+ 'name': api,
170
+ 'version': version_opt,
171
+ 'extension': extension,
172
+ 'group': cmd_group,
173
+ },
174
+ )
175
+
176
+ def _load_commands(self) -> None:
141
177
  """Load commands via cliff/stevedore
142
178
 
143
179
  osc-lib has no opinion on what commands should be loaded
@@ -157,7 +193,7 @@ class OpenStackShell(shell.OpenStackShell):
157
193
  # }
158
194
  self.command_manager.add_command_group('openstack.extension')
159
195
 
160
- def initialize_app(self, argv):
196
+ def initialize_app(self, argv: list[str]) -> None:
161
197
  super().initialize_app(argv)
162
198
 
163
199
  # Re-create the client_manager with our subclass
@@ -168,7 +204,7 @@ class OpenStackShell(shell.OpenStackShell):
168
204
  )
169
205
 
170
206
 
171
- def main(argv=None):
207
+ def main(argv: list[str] | None = None) -> int:
172
208
  if argv is None:
173
209
  argv = sys.argv[1:]
174
210
 
@@ -10,11 +10,13 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
+ from collections.abc import Iterable, Mapping, Sequence
13
14
  import json
14
15
  import logging
15
16
  import os
16
17
  import shlex
17
18
  import subprocess
19
+ from typing import Any, Literal, cast, overload
18
20
 
19
21
  from tempest.lib.cli import output_parser
20
22
  from tempest.lib import exceptions
@@ -24,7 +26,7 @@ ADMIN_CLOUD = os.environ.get('OS_ADMIN_CLOUD', 'devstack-admin')
24
26
  LOG = logging.getLogger(__name__)
25
27
 
26
28
 
27
- def execute(cmd, *, fail_ok=False):
29
+ def execute(cmd: str, *, fail_ok: bool = False) -> str:
28
30
  """Executes specified command for the given action."""
29
31
  LOG.debug('Executing: %s', cmd)
30
32
  cmdlist = shlex.split(cmd)
@@ -53,15 +55,37 @@ def execute(cmd, *, fail_ok=False):
53
55
 
54
56
 
55
57
  class TestCase(testtools.TestCase):
58
+ @overload
56
59
  @classmethod
57
60
  def openstack(
58
61
  cls,
59
- cmd,
62
+ cmd: str,
60
63
  *,
61
- cloud=ADMIN_CLOUD,
62
- fail_ok=False,
63
- parse_output=False,
64
- ):
64
+ cloud: str | None = ADMIN_CLOUD,
65
+ fail_ok: bool = False,
66
+ parse_output: Literal[False] = False,
67
+ ) -> str: ...
68
+
69
+ @overload
70
+ @classmethod
71
+ def openstack(
72
+ cls,
73
+ cmd: str,
74
+ *,
75
+ cloud: str | None = ADMIN_CLOUD,
76
+ fail_ok: bool = False,
77
+ parse_output: Literal[True] = ...,
78
+ ) -> Any: ...
79
+
80
+ @classmethod
81
+ def openstack(
82
+ cls,
83
+ cmd: str,
84
+ *,
85
+ cloud: str | None = ADMIN_CLOUD,
86
+ fail_ok: bool = False,
87
+ parse_output: bool = False,
88
+ ) -> str | Any:
65
89
  """Executes openstackclient command for the given action
66
90
 
67
91
  :param cmd: A string representation of the command to execute.
@@ -92,7 +116,7 @@ class TestCase(testtools.TestCase):
92
116
  format_args.append('-f json')
93
117
 
94
118
  output = execute(
95
- ' '.join(['openstack'] + auth_args + [cmd] + format_args),
119
+ ' '.join(['openstack', *auth_args, cmd, *format_args]),
96
120
  fail_ok=fail_ok,
97
121
  )
98
122
 
@@ -106,7 +130,9 @@ class TestCase(testtools.TestCase):
106
130
  return output
107
131
 
108
132
  @classmethod
109
- def is_service_enabled(cls, service, version=None):
133
+ def is_service_enabled(
134
+ cls, service: str, version: str | None = None
135
+ ) -> bool:
110
136
  """Ask client cloud if service is available
111
137
 
112
138
  :param service: The service name or type. This should be either an
@@ -126,7 +152,9 @@ class TestCase(testtools.TestCase):
126
152
  return bool(ret)
127
153
 
128
154
  @classmethod
129
- def is_extension_enabled(cls, alias, *, service='network'):
155
+ def is_extension_enabled(
156
+ cls, alias: str, *, service: str = 'network'
157
+ ) -> bool:
130
158
  """Ask client cloud if extension is enabled"""
131
159
  extensions = cls.openstack(
132
160
  f'extension list --{service}',
@@ -135,38 +163,44 @@ class TestCase(testtools.TestCase):
135
163
  return alias in [x['Alias'] for x in extensions]
136
164
 
137
165
  @classmethod
138
- def get_openstack_configuration_value(cls, configuration):
166
+ def get_openstack_configuration_value(cls, configuration: str) -> str:
139
167
  opts = cls.get_opts([configuration])
140
168
  return cls.openstack('configuration show ' + opts)
141
169
 
142
170
  @classmethod
143
- def get_opts(cls, fields, output_format='value'):
171
+ def get_opts(cls, fields: list[str], output_format: str = 'value') -> str:
144
172
  return ' -f {} {}'.format(
145
173
  output_format, ' '.join(['-c ' + it for it in fields])
146
174
  )
147
175
 
148
176
  @classmethod
149
- def assertOutput(cls, expected, actual):
177
+ def assertOutput(cls, expected: str, actual: str) -> None:
150
178
  if expected != actual:
151
179
  raise Exception(expected + ' != ' + actual)
152
180
 
153
181
  @classmethod
154
- def assertInOutput(cls, expected, actual):
182
+ def assertInOutput(cls, expected: str, actual: str) -> None:
155
183
  if expected not in actual:
156
184
  raise Exception(expected + ' not in ' + actual)
157
185
 
158
186
  @classmethod
159
- def assertsOutputNotNone(cls, observed):
187
+ def assertsOutputNotNone(cls, observed: Any) -> None:
160
188
  if observed is None:
161
189
  raise Exception('No output observed')
162
190
 
163
- def assert_table_structure(self, items, field_names):
191
+ def assert_table_structure(
192
+ self, items: Iterable[Mapping[str, Any]], field_names: Sequence[str]
193
+ ) -> None:
164
194
  """Verify that all items have keys listed in field_names."""
165
195
  for item in items:
166
196
  for field in field_names:
167
197
  self.assertIn(field, item)
168
198
 
169
- def assert_show_fields(self, show_output, field_names):
199
+ def assert_show_fields(
200
+ self,
201
+ show_output: Iterable[Mapping[str, Any]],
202
+ field_names: Sequence[str],
203
+ ) -> None:
170
204
  """Verify that all items have keys listed in field_names."""
171
205
 
172
206
  # field_names = ['name', 'description']
@@ -186,17 +220,18 @@ class TestCase(testtools.TestCase):
186
220
  o.update(item)
187
221
  return o
188
222
 
189
- def parse_show(self, raw_output):
223
+ def parse_show(self, raw_output: str) -> list[dict[str, Any]]:
190
224
  """Return list of dicts with item values parsed from cli output."""
191
225
 
192
226
  items = []
193
227
  table_ = output_parser.table(raw_output)
194
228
  for row in table_['values']:
195
229
  item = {}
196
- item[row[0]] = row[1]
230
+ item[str(row[0])] = row[1]
197
231
  items.append(item)
198
232
  return items
199
233
 
200
- def parse_listing(self, raw_output):
234
+ def parse_listing(self, raw_output: str) -> list[dict[str, Any]]:
201
235
  """Return list of dicts with basic item parsed from cli output."""
202
- return output_parser.listing(raw_output)
236
+ # need to add hints to tempest
237
+ return cast(list[dict[str, Any]], output_parser.listing(raw_output))
@@ -13,6 +13,8 @@
13
13
  # License for the specific language governing permissions and limitations
14
14
  # under the License.
15
15
 
16
+ from typing import ClassVar
17
+
16
18
  from tempest.lib import exceptions as tempest_exc
17
19
 
18
20
  from openstackclient.tests.functional import base
@@ -21,6 +23,8 @@ from openstackclient.tests.functional import base
21
23
  class ExtensionTests(base.TestCase):
22
24
  """Functional tests for extension"""
23
25
 
26
+ haz_network: ClassVar[bool]
27
+
24
28
  @classmethod
25
29
  def setUpClass(cls):
26
30
  super().setUpClass()
@@ -10,6 +10,7 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
+ from typing import ClassVar
13
14
  import uuid
14
15
 
15
16
  from tempest.lib.common.utils import data_utils
@@ -25,7 +26,8 @@ class QuotaTests(base.TestCase):
25
26
  test runs as these may run in parallel and otherwise step on each other.
26
27
  """
27
28
 
28
- PROJECT_NAME: str
29
+ haz_network: ClassVar[bool]
30
+ PROJECT_NAME: ClassVar[str]
29
31
 
30
32
  @classmethod
31
33
  def setUpClass(cls):
@@ -12,6 +12,7 @@
12
12
  #
13
13
 
14
14
  import time
15
+ from typing import cast
15
16
  import uuid
16
17
 
17
18
  from tempest.lib import exceptions
@@ -35,18 +36,18 @@ class ComputeTestCase(base.TestCase):
35
36
 
36
37
  @classmethod
37
38
  def get_flavor(cls) -> str:
39
+ valid_flavors = ['m1.tiny', 'cirros256']
38
40
  # NOTE(rtheis): Get cirros256 or m1.tiny flavors since functional
39
41
  # tests may create other flavors.
40
42
  flavors = cls.openstack("flavor list", parse_output=True)
41
- server_flavor = None
42
43
  for flavor in flavors:
43
44
  if flavor['Name'] in ['m1.tiny', 'cirros256']:
44
- server_flavor = flavor['Name']
45
- break
46
-
47
- assert server_flavor is not None
45
+ return cast(str, flavor['Name'])
48
46
 
49
- return server_flavor
47
+ raise Exception(
48
+ f'Failed to find a suitable flavor. Required one of: '
49
+ f'{", ".join(valid_flavors)}'
50
+ )
50
51
 
51
52
  @classmethod
52
53
  def get_image(cls) -> str:
@@ -54,18 +55,17 @@ class ComputeTestCase(base.TestCase):
54
55
  # create other images. Image may be named '-uec' or
55
56
  # '-disk'.
56
57
  images = cls.openstack("image list", parse_output=True)
57
- server_image = None
58
58
  for image in images:
59
59
  if image['Name'].startswith('cirros-') and (
60
60
  image['Name'].endswith('-uec')
61
61
  or image['Name'].endswith('-disk')
62
62
  ):
63
- server_image = image['Name']
64
- break
63
+ return cast(str, image['Name'])
65
64
 
66
- assert server_image is not None
67
-
68
- return server_image
65
+ raise Exception(
66
+ 'Failed to find a suitable image. Required one matching one of '
67
+ 'the following patterns: cirros-*-uec, cirros-*-disk'
68
+ )
69
69
 
70
70
  @classmethod
71
71
  def get_network(cls) -> str:
@@ -78,7 +78,8 @@ class ComputeTestCase(base.TestCase):
78
78
  )
79
79
  except exceptions.CommandFailed:
80
80
  return ''
81
- return '--nic net-id=' + cmd_output['id']
81
+
82
+ return '='.join(('--nic net-id', cmd_output['id']))
82
83
 
83
84
  def server_create(self, name=None, cleanup=True):
84
85
  """Create server, with cleanup"""
@@ -10,6 +10,7 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
+ from typing import ClassVar
13
14
  import uuid
14
15
 
15
16
  from openstackclient.tests.functional import base
@@ -19,6 +20,7 @@ class FlavorTests(base.TestCase):
19
20
  """Functional tests for flavor."""
20
21
 
21
22
  PROJECT_NAME = uuid.uuid4().hex
23
+ PROJECT_ID: ClassVar[str]
22
24
 
23
25
  @classmethod
24
26
  def setUpClass(cls):
@@ -28,7 +30,7 @@ class FlavorTests(base.TestCase):
28
30
  "project create --enable " + cls.PROJECT_NAME,
29
31
  parse_output=True,
30
32
  )
31
- cls.project_id = cmd_output["id"]
33
+ cls.PROJECT_ID = cmd_output["id"]
32
34
 
33
35
  @classmethod
34
36
  def tearDownClass(cls):
@@ -13,6 +13,7 @@
13
13
  import itertools
14
14
  import json
15
15
  import time
16
+ from typing import ClassVar
16
17
  import uuid
17
18
 
18
19
  from tempest.lib import exceptions
@@ -25,6 +26,8 @@ from openstackclient.tests.functional.volume.v2 import common as volume_common
25
26
  class ServerTests(common.ComputeTestCase):
26
27
  """Functional tests for openstack server commands"""
27
28
 
29
+ haz_network: ClassVar[bool]
30
+
28
31
  @classmethod
29
32
  def setUpClass(cls):
30
33
  super().setUpClass()
@@ -11,6 +11,7 @@
11
11
  # under the License.
12
12
 
13
13
  import os
14
+ from typing import ClassVar
14
15
  import unittest
15
16
 
16
17
  import fixtures
@@ -57,19 +58,22 @@ class IdentityTests(base.TestCase):
57
58
  CATALOG_LIST_HEADERS = ['Name', 'Type', 'Endpoints']
58
59
  ENDPOINT_LIST_HEADERS = ['ID', 'Region', 'Service Name', 'Service Type']
59
60
 
61
+ PROJECT_NAME: ClassVar[str]
62
+ PROJECT_DESCRIPTION: ClassVar[str]
63
+
60
64
  @classmethod
61
65
  def setUpClass(cls):
62
66
  super().setUpClass()
63
67
  # create dummy project
64
- cls.project_name = data_utils.rand_name('TestProject')
65
- cls.project_description = data_utils.rand_name('description')
68
+ cls.PROJECT_NAME = data_utils.rand_name('TestProject')
69
+ cls.PROJECT_DESCRIPTION = data_utils.rand_name('description')
66
70
  try:
67
71
  cls.openstack(
68
72
  '--os-identity-api-version 2 '
69
73
  'project create '
70
- f'--description {cls.project_description} '
74
+ f'--description {cls.PROJECT_DESCRIPTION} '
71
75
  '--enable '
72
- f'{cls.project_name}'
76
+ f'{cls.PROJECT_NAME}'
73
77
  )
74
78
  except tempest_exceptions.CommandFailed:
75
79
  # Good chance this is due to Identity v2 admin not being enabled
@@ -83,7 +87,7 @@ class IdentityTests(base.TestCase):
83
87
  try:
84
88
  cls.openstack(
85
89
  '--os-identity-api-version 2 '
86
- f'project delete {cls.project_name}'
90
+ f'project delete {cls.PROJECT_NAME}'
87
91
  )
88
92
  finally:
89
93
  super().tearDownClass()
@@ -125,7 +129,7 @@ class IdentityTests(base.TestCase):
125
129
  email = data_utils.rand_name() + '@example.com'
126
130
  raw_output = self.openstack(
127
131
  'user create '
128
- f'--project {self.project_name} '
132
+ f'--project {self.PROJECT_NAME} '
129
133
  f'--password {password} '
130
134
  f'--email {email} '
131
135
  '--enable '
@@ -39,14 +39,14 @@ class RoleTests(common.IdentityTests):
39
39
  username = self._create_dummy_user()
40
40
  raw_output = self.openstack(
41
41
  'role add '
42
- f'--project {self.project_name} '
42
+ f'--project {self.PROJECT_NAME} '
43
43
  f'--user {username} '
44
44
  f'{role_name}'
45
45
  )
46
46
  self.addCleanup(
47
47
  self.openstack,
48
48
  'role remove '
49
- f'--project {self.project_name} '
49
+ f'--project {self.PROJECT_NAME} '
50
50
  f'--user {username} '
51
51
  f'{role_name}',
52
52
  )
@@ -58,13 +58,13 @@ class RoleTests(common.IdentityTests):
58
58
  username = self._create_dummy_user()
59
59
  add_raw_output = self.openstack(
60
60
  'role add '
61
- f'--project {self.project_name} '
61
+ f'--project {self.PROJECT_NAME} '
62
62
  f'--user {username} '
63
63
  f'{role_name}'
64
64
  )
65
65
  del_raw_output = self.openstack(
66
66
  'role remove '
67
- f'--project {self.project_name} '
67
+ f'--project {self.PROJECT_NAME} '
68
68
  f'--user {username} '
69
69
  f'{role_name}'
70
70
  )