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,12 +14,14 @@
14
14
  """Port action implementations"""
15
15
 
16
16
  import argparse
17
+ from collections.abc import Iterable, Sequence
17
18
  import copy
18
19
  import json
19
20
  import logging
20
- import typing as ty
21
+ from typing import Any
21
22
 
22
23
  from cliff import columns as cliff_columns
24
+ from openstack.network.v2 import port as _port
23
25
  from osc_lib.cli import format_columns
24
26
  from osc_lib.cli import parseractions
25
27
  from osc_lib import exceptions
@@ -27,6 +29,7 @@ from osc_lib import utils
27
29
  from osc_lib.utils import tags as _tag
28
30
 
29
31
  from openstackclient import command
32
+ from openstackclient.common import pagination
30
33
  from openstackclient.i18n import _
31
34
  from openstackclient.identity import common as identity_common
32
35
  from openstackclient.network import common
@@ -35,22 +38,22 @@ LOG = logging.getLogger(__name__)
35
38
 
36
39
 
37
40
  class AdminStateColumn(cliff_columns.FormattableColumn[bool]):
38
- def human_readable(self):
41
+ def human_readable(self) -> str:
39
42
  return 'UP' if self._value else 'DOWN'
40
43
 
41
44
 
42
45
  class SubPortColumn(format_columns.ListDictColumn):
43
- _value: ty.Any
46
+ _value: Any
44
47
 
45
- def _retrieve_subports(self):
48
+ def _retrieve_subports(self) -> None:
46
49
  if isinstance(self._value, dict):
47
50
  self._value = self._value['sub_ports']
48
51
 
49
- def human_readable(self):
52
+ def human_readable(self) -> str:
50
53
  self._retrieve_subports()
51
54
  return super().human_readable()
52
55
 
53
- def machine_readable(self):
56
+ def machine_readable(self) -> Any:
54
57
  self._retrieve_subports()
55
58
  return super().machine_readable()
56
59
 
@@ -73,7 +76,9 @@ _list_formatters = copy.deepcopy(_formatters)
73
76
  _list_formatters.update({'trunk_details': SubPortColumn})
74
77
 
75
78
 
76
- def _get_columns(item):
79
+ def _get_columns(
80
+ item: _port.Port,
81
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
77
82
  column_data_mapping = {
78
83
  'admin_state_up': 'is_admin_state_up',
79
84
  'allowed_address_pairs': 'allowed_address_pairs',
@@ -104,6 +109,8 @@ def _get_columns(item):
104
109
  'port_security_enabled': 'is_port_security_enabled',
105
110
  'project_id': 'project_id',
106
111
  'propagate_uplink_status': 'propagate_uplink_status',
112
+ 'pvlan_type': 'pvlan_type',
113
+ 'pvlan_community': 'pvlan_community',
107
114
  'resource_request': 'resource_request',
108
115
  'revision_number': 'revision_number',
109
116
  'qos_network_policy_id': 'qos_network_policy_id',
@@ -127,7 +134,13 @@ class JSONKeyValueAction(argparse.Action):
127
134
  Ensures that ``dest`` is a dict
128
135
  """
129
136
 
130
- def __call__(self, parser, namespace, values, option_string=None):
137
+ def __call__(
138
+ self,
139
+ parser: argparse.ArgumentParser,
140
+ namespace: argparse.Namespace,
141
+ values: Any,
142
+ option_string: str | None = None,
143
+ ) -> None:
131
144
  # Make sure we have an empty dict rather than None
132
145
  if getattr(namespace, self.dest, None) is None:
133
146
  setattr(namespace, self.dest, {})
@@ -148,8 +161,10 @@ class JSONKeyValueAction(argparse.Action):
148
161
  raise argparse.ArgumentError(self, msg)
149
162
 
150
163
 
151
- def _get_attrs(client_manager, parsed_args):
152
- attrs = {}
164
+ def _get_attrs(
165
+ client_manager: Any, parsed_args: argparse.Namespace
166
+ ) -> dict[str, Any]:
167
+ attrs: dict[str, Any] = {}
153
168
 
154
169
  if parsed_args.description is not None:
155
170
  attrs['description'] = parsed_args.description
@@ -180,8 +195,6 @@ def _get_attrs(client_manager, parsed_args):
180
195
  if 'network' in parsed_args and parsed_args.network is not None:
181
196
  attrs['network_id'] = parsed_args.network
182
197
  if 'project' in parsed_args and parsed_args.project is not None:
183
- # TODO(singhj): since 'project' logic is common among
184
- # router, network, port etc., maybe move it to a common file.
185
198
  identity_client = client_manager.identity
186
199
  project_id = identity_common.find_project(
187
200
  identity_client,
@@ -247,10 +260,51 @@ def _get_attrs(client_manager, parsed_args):
247
260
  if parsed_args.trusted:
248
261
  attrs['trusted'] = True
249
262
 
263
+ if 'pvlan_type' in parsed_args and parsed_args.pvlan_type is not None:
264
+ attrs['pvlan_type'] = parsed_args.pvlan_type
265
+ if (
266
+ 'pvlan_community' in parsed_args
267
+ and parsed_args.pvlan_community is not None
268
+ ):
269
+ attrs['pvlan_community'] = parsed_args.pvlan_community
270
+
271
+ _validate_pvlan_port(attrs)
272
+
250
273
  return attrs
251
274
 
252
275
 
253
- def _prepare_fixed_ips(client_manager, parsed_args):
276
+ def _validate_pvlan_port(attrs: dict[str, Any]) -> None:
277
+ if (attrs.get('pvlan_type') or attrs.get('pvlan_community')) and attrs.get(
278
+ 'port_security_enabled'
279
+ ) is False:
280
+ msg = _(
281
+ "PVLAN attributes cannot be set when port security is disabled."
282
+ )
283
+ raise exceptions.CommandError(msg)
284
+
285
+ if attrs.get('pvlan_type') == 'community' and not attrs.get(
286
+ 'pvlan_community'
287
+ ):
288
+ msg = _(
289
+ "--pvlan-community is required when --pvlan-type is 'community'."
290
+ )
291
+ raise exceptions.CommandError(msg)
292
+
293
+
294
+ def _validate_pvlan_network_port(attrs: dict[str, Any], network: Any) -> None:
295
+ if not (attrs.get('pvlan_type') or attrs.get('pvlan_community')):
296
+ return
297
+ if not network.pvlan:
298
+ msg = _(
299
+ "PVLAN attributes cannot be set on a port whose "
300
+ "network does not have PVLAN enabled."
301
+ )
302
+ raise exceptions.CommandError(msg)
303
+
304
+
305
+ def _prepare_fixed_ips(
306
+ client_manager: Any, parsed_args: argparse.Namespace
307
+ ) -> None:
254
308
  """Fix and properly format fixed_ip option.
255
309
 
256
310
  Appropriately convert any subnet names to their respective ids.
@@ -281,7 +335,9 @@ def _prepare_fixed_ips(client_manager, parsed_args):
281
335
  parsed_args.fixed_ip = ips
282
336
 
283
337
 
284
- def _prepare_filter_fixed_ips(client_manager, parsed_args):
338
+ def _prepare_filter_fixed_ips(
339
+ client_manager: Any, parsed_args: argparse.Namespace
340
+ ) -> list[str]:
285
341
  """Fix and properly format fixed_ip option for filtering.
286
342
 
287
343
  Appropriately convert any subnet names to their respective ids.
@@ -308,7 +364,9 @@ def _prepare_filter_fixed_ips(client_manager, parsed_args):
308
364
  return ips
309
365
 
310
366
 
311
- def _add_updatable_args(parser, create=False):
367
+ def _add_updatable_args(
368
+ parser: argparse.ArgumentParser, create: bool = False
369
+ ) -> None:
312
370
  parser.add_argument(
313
371
  '--description',
314
372
  metavar='<description>',
@@ -430,11 +488,31 @@ def _add_updatable_args(parser, create=False):
430
488
  "which expect it in this dictionary (for example, Nova)."
431
489
  ),
432
490
  )
491
+ parser.add_argument(
492
+ '--pvlan-type',
493
+ metavar='<type>',
494
+ choices=['promiscuous', 'isolated', 'community'],
495
+ dest='pvlan_type',
496
+ help=_(
497
+ "Set Private VLAN type for this port. Requires PVLAN service "
498
+ "plugin. Default: promiscuous."
499
+ ),
500
+ )
501
+ parser.add_argument(
502
+ '--pvlan-community',
503
+ metavar='<community>',
504
+ dest='pvlan_community',
505
+ help=_(
506
+ "Set PVLAN community name for this port. "
507
+ "Only applies when pvlan-type is 'community'. "
508
+ "Requires PVLAN service plugin. Default: None."
509
+ ),
510
+ )
433
511
 
434
512
 
435
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
436
- # OSC minimum requirements include SDK 1.0.
437
- def _convert_address_pairs(parsed_args):
513
+ def _convert_address_pairs(
514
+ parsed_args: argparse.Namespace,
515
+ ) -> list[dict[str, Any]]:
438
516
  ops = []
439
517
  for opt in parsed_args.allowed_address_pairs:
440
518
  addr = {}
@@ -445,7 +523,9 @@ def _convert_address_pairs(parsed_args):
445
523
  return ops
446
524
 
447
525
 
448
- def _convert_extra_dhcp_options(parsed_args):
526
+ def _convert_extra_dhcp_options(
527
+ parsed_args: argparse.Namespace,
528
+ ) -> list[dict[str, Any]]:
449
529
  dhcp_options = []
450
530
  for opt in parsed_args.extra_dhcp_options:
451
531
  option = {}
@@ -460,7 +540,7 @@ def _convert_extra_dhcp_options(parsed_args):
460
540
 
461
541
  # When we have multiple hints, we'll need to refactor this to allow
462
542
  # arbitrary combinations. But until then let's have it as simple as possible.
463
- def _validate_port_hints(hints):
543
+ def _validate_port_hints(hints: dict[str, Any]) -> None:
464
544
  if hints not in (
465
545
  {},
466
546
  # by hint alias
@@ -477,7 +557,7 @@ def _validate_port_hints(hints):
477
557
  # When we have multiple hints, we'll need to refactor this to expand aliases
478
558
  # without losing other hints. But until then let's have it as simple as
479
559
  # possible.
480
- def _expand_port_hint_aliases(hints):
560
+ def _expand_port_hint_aliases(hints: dict[str, Any]) -> dict[str, Any]:
481
561
  if hints == {'ovs-tx-steering': 'thread'}:
482
562
  return {'openvswitch': {'other_config': {'tx-steering': 'thread'}}}
483
563
  elif hints == {'ovs-tx-steering': 'hash'}:
@@ -489,7 +569,7 @@ def _expand_port_hint_aliases(hints):
489
569
  class CreatePort(command.ShowOne, common.NeutronCommandWithExtraArgs):
490
570
  _description = _("Create a new port")
491
571
 
492
- def get_parser(self, prog_name):
572
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
493
573
  parser = super().get_parser(prog_name)
494
574
 
495
575
  parser.add_argument(
@@ -635,7 +715,9 @@ class CreatePort(command.ShowOne, common.NeutronCommandWithExtraArgs):
635
715
  _tag.add_tag_option_to_parser_for_create(parser, _('port'))
636
716
  return parser
637
717
 
638
- def take_action(self, parsed_args):
718
+ def take_action(
719
+ self, parsed_args: argparse.Namespace
720
+ ) -> tuple[Sequence[str], Iterable[Any]]:
639
721
  network_client = self.app.client_manager.network
640
722
  network = network_client.find_network(
641
723
  parsed_args.network, ignore_missing=False
@@ -711,6 +793,8 @@ class CreatePort(command.ShowOne, common.NeutronCommandWithExtraArgs):
711
793
  self._parse_extra_properties(parsed_args.extra_properties)
712
794
  )
713
795
 
796
+ _validate_pvlan_network_port(attrs, network)
797
+
714
798
  with common.check_missing_extension_if_error(network_client, attrs):
715
799
  obj = network_client.create_port(**attrs)
716
800
 
@@ -727,7 +811,7 @@ class CreatePort(command.ShowOne, common.NeutronCommandWithExtraArgs):
727
811
  class DeletePort(command.Command):
728
812
  _description = _("Delete port(s)")
729
813
 
730
- def get_parser(self, prog_name):
814
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
731
815
  parser = super().get_parser(prog_name)
732
816
  parser.add_argument(
733
817
  'port',
@@ -737,7 +821,7 @@ class DeletePort(command.Command):
737
821
  )
738
822
  return parser
739
823
 
740
- def take_action(self, parsed_args):
824
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
741
825
  client = self.app.client_manager.network
742
826
  result = 0
743
827
 
@@ -764,12 +848,10 @@ class DeletePort(command.Command):
764
848
  raise exceptions.CommandError(msg)
765
849
 
766
850
 
767
- # TODO(abhiraut): Use only the SDK resource mapped attribute names once the
768
- # OSC minimum requirements include SDK 1.0.
769
851
  class ListPort(command.Lister):
770
852
  _description = _("List ports")
771
853
 
772
- def get_parser(self, prog_name):
854
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
773
855
  parser = super().get_parser(prog_name)
774
856
  parser.add_argument(
775
857
  '--device-owner',
@@ -865,9 +947,12 @@ class ListPort(command.Lister):
865
947
  ),
866
948
  )
867
949
  _tag.add_tag_filtering_option_to_parser(parser, _('ports'))
950
+ pagination.add_marker_pagination_option_to_parser(parser)
868
951
  return parser
869
952
 
870
- def take_action(self, parsed_args):
953
+ def take_action(
954
+ self, parsed_args: argparse.Namespace
955
+ ) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
871
956
  network_client = self.app.client_manager.network
872
957
  identity_client = self.app.client_manager.identity
873
958
 
@@ -894,7 +979,6 @@ class ListPort(command.Lister):
894
979
  column_headers.extend(
895
980
  ['Security Groups', 'Device Owner', 'Tags', 'Trunk subports']
896
981
  )
897
-
898
982
  if parsed_args.device_owner is not None:
899
983
  filters['device_owner'] = parsed_args.device_owner
900
984
  if parsed_args.device_id is not None:
@@ -937,6 +1021,12 @@ class ListPort(command.Lister):
937
1021
  )
938
1022
  if parsed_args.security_groups:
939
1023
  filters['security_group_ids'] = parsed_args.security_groups
1024
+ if parsed_args.marker is not None:
1025
+ filters['marker'] = parsed_args.marker
1026
+ if parsed_args.limit is not None:
1027
+ filters['limit'] = parsed_args.limit
1028
+ if parsed_args.max_items is not None:
1029
+ filters['max_items'] = parsed_args.max_items
940
1030
 
941
1031
  _tag.get_tag_filtering_args(parsed_args, filters)
942
1032
 
@@ -961,12 +1051,10 @@ class ListPort(command.Lister):
961
1051
  )
962
1052
 
963
1053
 
964
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
965
- # OSC minimum requirements include SDK 1.0.
966
1054
  class SetPort(common.NeutronCommandWithExtraArgs):
967
1055
  _description = _("Set port properties")
968
1056
 
969
- def get_parser(self, prog_name):
1057
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
970
1058
  parser = super().get_parser(prog_name)
971
1059
  _add_updatable_args(parser)
972
1060
  admin_group = parser.add_mutually_exclusive_group()
@@ -1120,7 +1208,7 @@ class SetPort(common.NeutronCommandWithExtraArgs):
1120
1208
 
1121
1209
  return parser
1122
1210
 
1123
- def take_action(self, parsed_args):
1211
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
1124
1212
  client = self.app.client_manager.network
1125
1213
 
1126
1214
  _prepare_fixed_ips(self.app.client_manager, parsed_args)
@@ -1209,6 +1297,10 @@ class SetPort(common.NeutronCommandWithExtraArgs):
1209
1297
  self._parse_extra_properties(parsed_args.extra_properties)
1210
1298
  )
1211
1299
 
1300
+ if attrs.get('pvlan_type') or attrs.get('pvlan_community'):
1301
+ network = client.find_network(obj.network_id, ignore_missing=False)
1302
+ _validate_pvlan_network_port(attrs, network)
1303
+
1212
1304
  if attrs:
1213
1305
  with common.check_missing_extension_if_error(
1214
1306
  self.app.client_manager.network, attrs
@@ -1222,14 +1314,16 @@ class SetPort(common.NeutronCommandWithExtraArgs):
1222
1314
  class ShowPort(command.ShowOne):
1223
1315
  _description = _("Display port details")
1224
1316
 
1225
- def get_parser(self, prog_name):
1317
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1226
1318
  parser = super().get_parser(prog_name)
1227
1319
  parser.add_argument(
1228
1320
  'port', metavar="<port>", help=_("Port to display (name or ID)")
1229
1321
  )
1230
1322
  return parser
1231
1323
 
1232
- def take_action(self, parsed_args):
1324
+ def take_action(
1325
+ self, parsed_args: argparse.Namespace
1326
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1233
1327
  client = self.app.client_manager.network
1234
1328
  obj = client.find_port(parsed_args.port, ignore_missing=False)
1235
1329
  display_columns, columns = _get_columns(obj)
@@ -1237,12 +1331,10 @@ class ShowPort(command.ShowOne):
1237
1331
  return (display_columns, data)
1238
1332
 
1239
1333
 
1240
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
1241
- # OSC minimum requirements include SDK 1.0.
1242
1334
  class UnsetPort(common.NeutronUnsetCommandWithExtraArgs):
1243
1335
  _description = _("Unset port properties")
1244
1336
 
1245
- def get_parser(self, prog_name):
1337
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1246
1338
  parser = super().get_parser(prog_name)
1247
1339
  parser.add_argument(
1248
1340
  '--fixed-ip',
@@ -1330,6 +1422,13 @@ class UnsetPort(common.NeutronUnsetCommandWithExtraArgs):
1330
1422
  default=False,
1331
1423
  help=_("Clear device owner for the port."),
1332
1424
  )
1425
+ parser.add_argument(
1426
+ '--pvlan-community',
1427
+ action='store_true',
1428
+ default=False,
1429
+ dest='pvlan_community',
1430
+ help=_("Clear PVLAN community name for the port."),
1431
+ )
1333
1432
  _tag.add_tag_option_to_parser_for_unset(parser, _('port'))
1334
1433
  parser.add_argument(
1335
1434
  'port',
@@ -1339,7 +1438,7 @@ class UnsetPort(common.NeutronUnsetCommandWithExtraArgs):
1339
1438
 
1340
1439
  return parser
1341
1440
 
1342
- def take_action(self, parsed_args):
1441
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
1343
1442
  client = self.app.client_manager.network
1344
1443
  obj = client.find_port(parsed_args.port, ignore_missing=False)
1345
1444
  # SDK ignores update() if it receives a modified obj and attrs
@@ -1400,6 +1499,8 @@ class UnsetPort(common.NeutronUnsetCommandWithExtraArgs):
1400
1499
  attrs['device_id'] = ''
1401
1500
  if parsed_args.device_owner:
1402
1501
  attrs['device_owner'] = ''
1502
+ if parsed_args.pvlan_community:
1503
+ attrs['pvlan_community'] = None
1403
1504
 
1404
1505
  attrs.update(
1405
1506
  self._parse_extra_properties(parsed_args.extra_properties)