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,13 +14,15 @@
14
14
  """Router action implementations"""
15
15
 
16
16
  import argparse
17
+ from collections.abc import Iterable, Sequence
17
18
  import collections
18
19
  import copy
19
20
  import json
20
21
  import logging
21
- import typing as ty
22
+ from typing import Any
22
23
 
23
24
  from cliff import columns as cliff_columns
25
+ from openstack.network.v2 import router as _router
24
26
  from osc_lib.cli import format_columns
25
27
  from osc_lib.cli import parseractions
26
28
  from osc_lib import exceptions
@@ -28,6 +30,7 @@ from osc_lib import utils
28
30
  from osc_lib.utils import tags as _tag
29
31
 
30
32
  from openstackclient import command
33
+ from openstackclient.common import pagination
31
34
  from openstackclient.i18n import _
32
35
  from openstackclient.identity import common as identity_common
33
36
  from openstackclient.network import common
@@ -36,25 +39,25 @@ LOG = logging.getLogger(__name__)
36
39
 
37
40
 
38
41
  class AdminStateColumn(cliff_columns.FormattableColumn[bool]):
39
- def human_readable(self):
42
+ def human_readable(self) -> str:
40
43
  return 'UP' if self._value else 'DOWN'
41
44
 
42
45
 
43
- class RouterInfoColumn(cliff_columns.FormattableColumn[ty.Any]):
44
- def human_readable(self):
46
+ class RouterInfoColumn(cliff_columns.FormattableColumn[Any]):
47
+ def human_readable(self) -> str:
45
48
  try:
46
49
  return json.dumps(self._value)
47
50
  except (TypeError, KeyError):
48
51
  return ''
49
52
 
50
53
 
51
- class RoutesColumn(cliff_columns.FormattableColumn[ty.Any]):
52
- def human_readable(self):
54
+ class RoutesColumn(cliff_columns.FormattableColumn[Any]):
55
+ def human_readable(self) -> str:
53
56
  # Map the route keys to match --route option.
54
57
  for route in self._value or []:
55
58
  if 'nexthop' in route:
56
59
  route['gateway'] = route.pop('nexthop')
57
- return utils.format_list_of_dicts(self._value)
60
+ return utils.format_list_of_dicts(self._value) or ""
58
61
 
59
62
 
60
63
  _formatters = {
@@ -68,7 +71,9 @@ _formatters = {
68
71
  }
69
72
 
70
73
 
71
- def _get_columns(item):
74
+ def _get_columns(
75
+ item: _router.Router,
76
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
72
77
  column_map = {
73
78
  'is_ha': 'ha',
74
79
  'is_distributed': 'distributed',
@@ -76,19 +81,21 @@ def _get_columns(item):
76
81
  }
77
82
  if hasattr(item, 'interfaces_info'):
78
83
  column_map['interfaces_info'] = 'interfaces_info'
79
- invisible_columns = ['location', 'tenant_id']
84
+ hidden_columns = ['location', 'tenant_id']
80
85
  if item.is_ha is None:
81
- invisible_columns.append('is_ha')
86
+ hidden_columns.append('is_ha')
82
87
  column_map.pop('is_ha')
83
88
  if item.is_distributed is None:
84
- invisible_columns.append('is_distributed')
89
+ hidden_columns.append('is_distributed')
85
90
  column_map.pop('is_distributed')
91
+ if not hasattr(item, 'evpn_vni'):
92
+ hidden_columns.append('evpn_vni')
86
93
  return utils.get_osc_show_columns_for_sdk_resource(
87
- item, column_map, invisible_columns
94
+ item, column_map, hidden_columns
88
95
  )
89
96
 
90
97
 
91
- def is_multiple_gateways_supported(n_client):
98
+ def is_multiple_gateways_supported(n_client: Any) -> bool:
92
99
  return (
93
100
  n_client.find_extension(
94
101
  "external-gateway-multihoming", ignore_missing=True
@@ -97,7 +104,9 @@ def is_multiple_gateways_supported(n_client):
97
104
  )
98
105
 
99
106
 
100
- def _passed_multiple_gateways(extension_supported, external_gateways):
107
+ def _passed_multiple_gateways(
108
+ extension_supported: bool, external_gateways: list[Any]
109
+ ) -> bool:
101
110
  passed_multiple_gws = len(external_gateways) > 1
102
111
  if passed_multiple_gws and not extension_supported:
103
112
  msg = _(
@@ -109,13 +118,15 @@ def _passed_multiple_gateways(extension_supported, external_gateways):
109
118
  return passed_multiple_gws
110
119
 
111
120
 
112
- def _get_external_gateway_attrs(client_manager, parsed_args):
113
- attrs: dict[str, ty.Any] = {}
121
+ def _get_external_gateway_attrs(
122
+ client_manager: Any, parsed_args: argparse.Namespace
123
+ ) -> dict[str, Any]:
124
+ attrs: dict[str, Any] = {}
114
125
 
115
126
  if parsed_args.external_gateways:
116
- external_gateways: collections.defaultdict[str, list[dict]] = (
117
- collections.defaultdict(list)
118
- )
127
+ external_gateways: collections.defaultdict[
128
+ str, list[dict[str, Any]]
129
+ ] = collections.defaultdict(list)
119
130
  n_client = client_manager.network
120
131
  first_network_id = ''
121
132
 
@@ -206,8 +217,10 @@ def _get_external_gateway_attrs(client_manager, parsed_args):
206
217
  return attrs
207
218
 
208
219
 
209
- def _get_attrs(client_manager, parsed_args):
210
- attrs = {}
220
+ def _get_attrs(
221
+ client_manager: Any, parsed_args: argparse.Namespace
222
+ ) -> dict[str, Any]:
223
+ attrs: dict[str, Any] = {}
211
224
  n_client = client_manager.network
212
225
 
213
226
  if parsed_args.name is not None:
@@ -257,7 +270,7 @@ def _get_attrs(client_manager, parsed_args):
257
270
  return attrs
258
271
 
259
272
 
260
- def _parser_add_bfd_ecmp_arguments(parser):
273
+ def _parser_add_bfd_ecmp_arguments(parser: argparse.ArgumentParser) -> None:
261
274
  """Helper to add BFD and ECMP args for CreateRouter and SetRouter."""
262
275
  parser.add_argument(
263
276
  '--enable-default-route-bfd',
@@ -298,7 +311,9 @@ def _parser_add_bfd_ecmp_arguments(parser):
298
311
  )
299
312
 
300
313
 
301
- def _command_check_bfd_ecmp_supported(attrs, client):
314
+ def _command_check_bfd_ecmp_supported(
315
+ attrs: dict[str, Any], client: Any
316
+ ) -> None:
302
317
  """Helper to check for server side support when bfd/ecmp attrs provided.
303
318
 
304
319
  :raises: exceptions.CommandError
@@ -318,7 +333,7 @@ def _command_check_bfd_ecmp_supported(attrs, client):
318
333
  class AddPortToRouter(command.Command):
319
334
  _description = _("Add a port to a router")
320
335
 
321
- def get_parser(self, prog_name):
336
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
322
337
  parser = super().get_parser(prog_name)
323
338
  parser.add_argument(
324
339
  'router',
@@ -330,19 +345,19 @@ class AddPortToRouter(command.Command):
330
345
  )
331
346
  return parser
332
347
 
333
- def take_action(self, parsed_args):
348
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
334
349
  client = self.app.client_manager.network
335
350
  port = client.find_port(parsed_args.port, ignore_missing=False)
336
351
  client.add_interface_to_router(
337
352
  client.find_router(parsed_args.router, ignore_missing=False),
338
- port_id=port.id,
353
+ port=port.id,
339
354
  )
340
355
 
341
356
 
342
357
  class AddSubnetToRouter(command.Command):
343
358
  _description = _("Add a subnet to a router")
344
359
 
345
- def get_parser(self, prog_name):
360
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
346
361
  parser = super().get_parser(prog_name)
347
362
  parser.add_argument(
348
363
  'router',
@@ -356,19 +371,19 @@ class AddSubnetToRouter(command.Command):
356
371
  )
357
372
  return parser
358
373
 
359
- def take_action(self, parsed_args):
374
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
360
375
  client = self.app.client_manager.network
361
376
  subnet = client.find_subnet(parsed_args.subnet, ignore_missing=False)
362
377
  client.add_interface_to_router(
363
378
  client.find_router(parsed_args.router, ignore_missing=False),
364
- subnet_id=subnet.id,
379
+ subnet=subnet.id,
365
380
  )
366
381
 
367
382
 
368
383
  class AddExtraRoutesToRouter(command.ShowOne):
369
384
  _description = _("Add extra static routes to a router's routing table.")
370
385
 
371
- def get_parser(self, prog_name):
386
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
372
387
  parser = super().get_parser(prog_name)
373
388
  parser.add_argument(
374
389
  'router',
@@ -398,7 +413,9 @@ class AddExtraRoutesToRouter(command.ShowOne):
398
413
  )
399
414
  return parser
400
415
 
401
- def take_action(self, parsed_args):
416
+ def take_action(
417
+ self, parsed_args: argparse.Namespace
418
+ ) -> tuple[Sequence[str], Iterable[Any]]:
402
419
  if parsed_args.routes is not None:
403
420
  for route in parsed_args.routes:
404
421
  route['nexthop'] = route.pop('gateway')
@@ -419,7 +436,7 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
419
436
  "Remove extra static routes from a router's routing table."
420
437
  )
421
438
 
422
- def get_parser(self, prog_name):
439
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
423
440
  parser = super().get_parser(prog_name)
424
441
  parser.add_argument(
425
442
  'router',
@@ -449,7 +466,9 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
449
466
  )
450
467
  return parser
451
468
 
452
- def take_action(self, parsed_args):
469
+ def take_action(
470
+ self, parsed_args: argparse.Namespace
471
+ ) -> tuple[Sequence[str], Iterable[Any]]:
453
472
  if parsed_args.routes is not None:
454
473
  for route in parsed_args.routes:
455
474
  route['nexthop'] = route.pop('gateway')
@@ -465,12 +484,10 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
465
484
  return (display_columns, data)
466
485
 
467
486
 
468
- # TODO(yanxing'an): Use the SDK resource mapped attribute names once the
469
- # OSC minimum requirements include SDK 1.0.
470
487
  class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
471
488
  _description = _("Create a new router")
472
489
 
473
- def get_parser(self, prog_name):
490
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
474
491
  parser = super().get_parser(prog_name)
475
492
  parser.add_argument(
476
493
  'name', metavar='<name>', help=_("New router name")
@@ -597,7 +614,9 @@ class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
597
614
 
598
615
  return parser
599
616
 
600
- def take_action(self, parsed_args):
617
+ def take_action(
618
+ self, parsed_args: argparse.Namespace
619
+ ) -> tuple[Sequence[str], Iterable[Any]]:
601
620
  client = self.app.client_manager.network
602
621
 
603
622
  attrs = _get_attrs(self.app.client_manager, parsed_args)
@@ -661,7 +680,7 @@ class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
661
680
  class DeleteRouter(command.Command):
662
681
  _description = _("Delete router(s)")
663
682
 
664
- def get_parser(self, prog_name):
683
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
665
684
  parser = super().get_parser(prog_name)
666
685
  parser.add_argument(
667
686
  'router',
@@ -671,7 +690,7 @@ class DeleteRouter(command.Command):
671
690
  )
672
691
  return parser
673
692
 
674
- def take_action(self, parsed_args):
693
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
675
694
  client = self.app.client_manager.network
676
695
  result = 0
677
696
 
@@ -698,12 +717,10 @@ class DeleteRouter(command.Command):
698
717
  raise exceptions.CommandError(msg)
699
718
 
700
719
 
701
- # TODO(yanxing'an): Use the SDK resource mapped attribute names once the
702
- # OSC minimum requirements include SDK 1.0.
703
720
  class ListRouter(command.Lister):
704
721
  _description = _("List routers")
705
722
 
706
- def get_parser(self, prog_name):
723
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
707
724
  parser = super().get_parser(prog_name)
708
725
  parser.add_argument(
709
726
  '--name',
@@ -739,10 +756,13 @@ class ListRouter(command.Lister):
739
756
  ),
740
757
  )
741
758
  _tag.add_tag_filtering_option_to_parser(parser, _('routers'))
759
+ pagination.add_marker_pagination_option_to_parser(parser)
742
760
 
743
761
  return parser
744
762
 
745
- def take_action(self, parsed_args):
763
+ def take_action(
764
+ self, parsed_args: argparse.Namespace
765
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
746
766
  identity_client = self.app.client_manager.identity
747
767
  client = self.app.client_manager.network
748
768
 
@@ -781,16 +801,26 @@ class ListRouter(command.Lister):
781
801
  ).id
782
802
  args['project_id'] = project_id
783
803
 
804
+ if parsed_args.marker is not None:
805
+ args['marker'] = parsed_args.marker
806
+ if parsed_args.limit is not None:
807
+ args['limit'] = parsed_args.limit
808
+ if parsed_args.max_items is not None:
809
+ args['max_items'] = parsed_args.max_items
810
+
784
811
  _tag.get_tag_filtering_args(parsed_args, args)
785
812
 
786
- if parsed_args.agent is not None:
813
+ if parsed_args.agent is None:
814
+ data = list(client.routers(**args))
815
+ else:
787
816
  agent = client.get_agent(parsed_args.agent)
788
- data = client.agent_hosted_routers(agent)
789
817
  # NOTE: Networking API does not support filtering by parameters,
790
818
  # so we need filtering in the client side.
791
- data = [d for d in data if self._filter_match(d, args)]
792
- else:
793
- data = client.routers(**args)
819
+ data = [
820
+ d
821
+ for d in client.agent_hosted_routers(agent)
822
+ if self._filter_match(d, args)
823
+ ]
794
824
 
795
825
  # check if "HA" and "Distributed" columns should be displayed also
796
826
  data = list(data)
@@ -834,7 +864,7 @@ class ListRouter(command.Lister):
834
864
  )
835
865
 
836
866
  @staticmethod
837
- def _filter_match(data, conditions):
867
+ def _filter_match(data: Any, conditions: dict[str, Any]) -> bool:
838
868
  for key, value in conditions.items():
839
869
  try:
840
870
  if getattr(data, key) != value:
@@ -851,7 +881,7 @@ class ListRouter(command.Lister):
851
881
  class RemovePortFromRouter(command.Command):
852
882
  _description = _("Remove a port from a router")
853
883
 
854
- def get_parser(self, prog_name):
884
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
855
885
  parser = super().get_parser(prog_name)
856
886
  parser.add_argument(
857
887
  'router',
@@ -865,19 +895,19 @@ class RemovePortFromRouter(command.Command):
865
895
  )
866
896
  return parser
867
897
 
868
- def take_action(self, parsed_args):
898
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
869
899
  client = self.app.client_manager.network
870
900
  port = client.find_port(parsed_args.port, ignore_missing=False)
871
901
  client.remove_interface_from_router(
872
902
  client.find_router(parsed_args.router, ignore_missing=False),
873
- port_id=port.id,
903
+ port=port.id,
874
904
  )
875
905
 
876
906
 
877
907
  class RemoveSubnetFromRouter(command.Command):
878
908
  _description = _("Remove a subnet from a router")
879
909
 
880
- def get_parser(self, prog_name):
910
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
881
911
  parser = super().get_parser(prog_name)
882
912
  parser.add_argument(
883
913
  'router',
@@ -893,21 +923,19 @@ class RemoveSubnetFromRouter(command.Command):
893
923
  )
894
924
  return parser
895
925
 
896
- def take_action(self, parsed_args):
926
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
897
927
  client = self.app.client_manager.network
898
928
  subnet = client.find_subnet(parsed_args.subnet, ignore_missing=False)
899
929
  client.remove_interface_from_router(
900
930
  client.find_router(parsed_args.router, ignore_missing=False),
901
- subnet_id=subnet.id,
931
+ subnet=subnet.id,
902
932
  )
903
933
 
904
934
 
905
- # TODO(yanxing'an): Use the SDK resource mapped attribute names once the
906
- # OSC minimum requirements include SDK 1.0.
907
935
  class SetRouter(common.NeutronCommandWithExtraArgs):
908
936
  _description = _("Set router properties")
909
937
 
910
- def get_parser(self, prog_name):
938
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
911
939
  parser = super().get_parser(prog_name)
912
940
  parser.add_argument(
913
941
  'router',
@@ -1051,7 +1079,7 @@ class SetRouter(common.NeutronCommandWithExtraArgs):
1051
1079
  _parser_add_bfd_ecmp_arguments(parser)
1052
1080
  return parser
1053
1081
 
1054
- def take_action(self, parsed_args):
1082
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
1055
1083
  client = self.app.client_manager.network
1056
1084
  obj = client.find_router(parsed_args.router, ignore_missing=False)
1057
1085
 
@@ -1141,7 +1169,7 @@ class SetRouter(common.NeutronCommandWithExtraArgs):
1141
1169
  class ShowRouter(command.ShowOne):
1142
1170
  _description = _("Display router details")
1143
1171
 
1144
- def get_parser(self, prog_name):
1172
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1145
1173
  parser = super().get_parser(prog_name)
1146
1174
  parser.add_argument(
1147
1175
  'router',
@@ -1150,7 +1178,9 @@ class ShowRouter(command.ShowOne):
1150
1178
  )
1151
1179
  return parser
1152
1180
 
1153
- def take_action(self, parsed_args):
1181
+ def take_action(
1182
+ self, parsed_args: argparse.Namespace
1183
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1154
1184
  client = self.app.client_manager.network
1155
1185
  obj = client.find_router(parsed_args.router, ignore_missing=False)
1156
1186
  interfaces_info = []
@@ -1177,7 +1207,7 @@ class ShowRouter(command.ShowOne):
1177
1207
  class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
1178
1208
  _description = _("Unset router properties")
1179
1209
 
1180
- def get_parser(self, prog_name):
1210
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1181
1211
  parser = super().get_parser(prog_name)
1182
1212
  parser.add_argument(
1183
1213
  '--route',
@@ -1217,7 +1247,7 @@ class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
1217
1247
  _tag.add_tag_option_to_parser_for_unset(parser, _('router'))
1218
1248
  return parser
1219
1249
 
1220
- def take_action(self, parsed_args):
1250
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
1221
1251
  client = self.app.client_manager.network
1222
1252
  obj = client.find_router(parsed_args.router, ignore_missing=False)
1223
1253
  tmp_routes = copy.deepcopy(obj.routes)
@@ -1272,7 +1302,7 @@ class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
1272
1302
  class AddGatewayToRouter(command.ShowOne):
1273
1303
  _description = _("Add router gateway")
1274
1304
 
1275
- def get_parser(self, prog_name):
1305
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1276
1306
  parser = super().get_parser(prog_name)
1277
1307
  parser.add_argument(
1278
1308
  'router',
@@ -1304,7 +1334,9 @@ class AddGatewayToRouter(command.ShowOne):
1304
1334
  )
1305
1335
  return parser
1306
1336
 
1307
- def take_action(self, parsed_args):
1337
+ def take_action(
1338
+ self, parsed_args: argparse.Namespace
1339
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1308
1340
  client = self.app.client_manager.network
1309
1341
  if not is_multiple_gateways_supported(client):
1310
1342
  msg = _(
@@ -1339,7 +1371,7 @@ class AddGatewayToRouter(command.ShowOne):
1339
1371
  class RemoveGatewayFromRouter(command.ShowOne):
1340
1372
  _description = _("Remove router gateway")
1341
1373
 
1342
- def get_parser(self, prog_name):
1374
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1343
1375
  parser = super().get_parser(prog_name)
1344
1376
  parser.add_argument(
1345
1377
  'router',
@@ -1371,7 +1403,9 @@ class RemoveGatewayFromRouter(command.ShowOne):
1371
1403
  )
1372
1404
  return parser
1373
1405
 
1374
- def take_action(self, parsed_args):
1406
+ def take_action(
1407
+ self, parsed_args: argparse.Namespace
1408
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1375
1409
  client = self.app.client_manager.network
1376
1410
  if not is_multiple_gateways_supported(client):
1377
1411
  msg = _(