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
@@ -0,0 +1,518 @@
1
+ # Copyright 2016-2017 FUJITSU LIMITED
2
+ # All Rights Reserved
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
5
+ # not use this file except in compliance with the License. You may obtain
6
+ # a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ import argparse
17
+ from collections.abc import Iterable, Sequence
18
+ import logging
19
+ from typing import Any, cast
20
+
21
+ from osc_lib.cli import identity as identity_utils
22
+ from osc_lib import exceptions
23
+ from osc_lib import utils
24
+ from osc_lib.utils import columns as column_util
25
+
26
+ from openstackclient import command
27
+ from openstackclient.i18n import _
28
+ from openstackclient.identity import common as identity_common
29
+
30
+
31
+ LOG = logging.getLogger(__name__)
32
+
33
+
34
+ _attr_map = (
35
+ ('id', 'ID', column_util.LIST_BOTH),
36
+ ('name', 'Name', column_util.LIST_BOTH),
37
+ ('firewall_rules', 'Firewall Rules', column_util.LIST_BOTH),
38
+ ('description', 'Description', column_util.LIST_LONG_ONLY),
39
+ ('audited', 'Audited', column_util.LIST_LONG_ONLY),
40
+ ('shared', 'Shared', column_util.LIST_LONG_ONLY),
41
+ ('project_id', 'Project', column_util.LIST_LONG_ONLY),
42
+ )
43
+
44
+ _attr_map_dict = {x[0]: x[1] for x in _attr_map}
45
+
46
+
47
+ def _get_common_attrs(
48
+ client_manager: Any,
49
+ parsed_args: argparse.Namespace,
50
+ is_create: bool = True,
51
+ ) -> dict[str, Any]:
52
+ attrs: dict[str, Any] = {}
53
+ client = client_manager.network
54
+
55
+ if parsed_args.firewall_rule and parsed_args.no_firewall_rule:
56
+ _firewall_rules = []
57
+ for f in parsed_args.firewall_rule:
58
+ _firewall_rules.append(
59
+ client.find_firewall_rule(f, ignore_missing=False).id
60
+ )
61
+ attrs['firewall_rules'] = _firewall_rules
62
+ elif parsed_args.firewall_rule:
63
+ rules = []
64
+ if not is_create:
65
+ fwp = client.find_firewall_policy(
66
+ parsed_args.firewall_policy, ignore_missing=False
67
+ )
68
+ rules += fwp.firewall_rules
69
+ for f in parsed_args.firewall_rule:
70
+ rules.append(client.find_firewall_rule(f, ignore_missing=False).id)
71
+ attrs['firewall_rules'] = rules
72
+ elif parsed_args.no_firewall_rule:
73
+ attrs['firewall_rules'] = []
74
+
75
+ if parsed_args.audited is not None:
76
+ attrs['audited'] = parsed_args.audited
77
+ if parsed_args.name:
78
+ attrs['name'] = parsed_args.name
79
+ if parsed_args.description:
80
+ attrs['description'] = parsed_args.description
81
+ if parsed_args.shared is not None:
82
+ attrs['shared'] = parsed_args.shared
83
+ return attrs
84
+
85
+
86
+ def _get_common_parser(
87
+ parser: argparse.ArgumentParser,
88
+ ) -> argparse.ArgumentParser:
89
+ parser.add_argument(
90
+ '--description', help=_('Description of the firewall policy')
91
+ )
92
+ audited_group = parser.add_mutually_exclusive_group()
93
+ audited_group.add_argument(
94
+ '--audited',
95
+ default=None,
96
+ action='store_true',
97
+ dest='audited',
98
+ help=_('Enable auditing for the policy'),
99
+ )
100
+ audited_group.add_argument(
101
+ '--no-audited',
102
+ action='store_false',
103
+ dest='audited',
104
+ help=_('Disable auditing for the policy'),
105
+ )
106
+ shared_group = parser.add_mutually_exclusive_group()
107
+ shared_group.add_argument(
108
+ '--share',
109
+ action='store_true',
110
+ default=None,
111
+ dest='shared',
112
+ help=_(
113
+ 'Share the firewall policy to be used in all projects '
114
+ '(by default, it is restricted to be used by the '
115
+ 'current project).'
116
+ ),
117
+ )
118
+ shared_group.add_argument(
119
+ '--no-share',
120
+ action='store_false',
121
+ dest='shared',
122
+ help=_('Restrict use of the firewall policy to the current project'),
123
+ )
124
+ return parser
125
+
126
+
127
+ class CreateFirewallPolicy(command.ShowOne):
128
+ _description = _("Create a new firewall policy")
129
+
130
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
131
+ parser = super().get_parser(prog_name)
132
+ _get_common_parser(parser)
133
+ identity_utils.add_project_owner_option_to_parser(parser)
134
+ parser.add_argument(
135
+ 'name', metavar='<name>', help=_('Name for the firewall policy')
136
+ )
137
+ fwr_group = parser.add_mutually_exclusive_group()
138
+ fwr_group.add_argument(
139
+ '--firewall-rule',
140
+ action='append',
141
+ metavar='<firewall-rule>',
142
+ help=_('Firewall rule(s) to apply (name or ID)'),
143
+ )
144
+ fwr_group.add_argument(
145
+ '--no-firewall-rule',
146
+ action='store_true',
147
+ help=_('Unset all firewall rules from firewall policy'),
148
+ )
149
+ return parser
150
+
151
+ def take_action(
152
+ self, parsed_args: argparse.Namespace
153
+ ) -> tuple[Sequence[str], Iterable[Any]]:
154
+ client = self.app.client_manager.network
155
+ attrs = _get_common_attrs(self.app.client_manager, parsed_args)
156
+ if 'project' in parsed_args and parsed_args.project is not None:
157
+ attrs['project_id'] = identity_common.find_project(
158
+ self.app.client_manager.identity,
159
+ parsed_args.project,
160
+ parsed_args.project_domain,
161
+ ).id
162
+ obj = client.create_firewall_policy(**attrs)
163
+ display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
164
+ obj, _attr_map_dict, ['location', 'tenant_id']
165
+ )
166
+ data = utils.get_dict_properties(obj, columns, formatters={})
167
+ return (display_columns, data)
168
+
169
+
170
+ class DeleteFirewallPolicy(command.Command):
171
+ _description = _("Delete firewall policy(s)")
172
+
173
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
174
+ parser = super().get_parser(prog_name)
175
+ parser.add_argument(
176
+ 'firewall_policy',
177
+ metavar='<firewall-policy>',
178
+ nargs='+',
179
+ help=_('Firewall policy(s) to delete (name or ID)'),
180
+ )
181
+ return parser
182
+
183
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
184
+ client = self.app.client_manager.network
185
+ result = 0
186
+ for fwp in parsed_args.firewall_policy:
187
+ try:
188
+ fwp_id = client.find_firewall_policy(
189
+ fwp, ignore_missing=False
190
+ ).id
191
+ client.delete_firewall_policy(fwp_id)
192
+ except Exception as e:
193
+ result += 1
194
+ LOG.error(
195
+ _(
196
+ "Failed to delete Firewall policy with "
197
+ "name or ID '%(firewall_policy)s': %(e)s"
198
+ ),
199
+ {'firewall_policy': fwp, 'e': e},
200
+ )
201
+
202
+ if result > 0:
203
+ total = len(parsed_args.firewall_policy)
204
+ msg = _(
205
+ "%(result)s of %(total)s firewall policy(s) failed to delete."
206
+ ) % {'result': result, 'total': total}
207
+ raise exceptions.CommandError(msg)
208
+
209
+
210
+ class FirewallPolicyInsertRule(command.Command):
211
+ _description = _("Insert a rule into a given firewall policy")
212
+
213
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
214
+ parser = super().get_parser(prog_name)
215
+ parser.add_argument(
216
+ 'firewall_policy',
217
+ metavar='<firewall-policy>',
218
+ help=_('Firewall policy to insert rule (name or ID)'),
219
+ )
220
+ parser.add_argument(
221
+ '--insert-before',
222
+ metavar='<firewall-rule>',
223
+ help=_(
224
+ 'Insert the new rule before this existing rule (name or ID)'
225
+ ),
226
+ )
227
+ parser.add_argument(
228
+ '--insert-after',
229
+ metavar='<firewall-rule>',
230
+ help=_(
231
+ 'Insert the new rule after this existing rule (name or ID)'
232
+ ),
233
+ )
234
+ parser.add_argument(
235
+ 'firewall_rule',
236
+ metavar='<firewall-rule>',
237
+ help=_('Firewall rule to be inserted (name or ID)'),
238
+ )
239
+ return parser
240
+
241
+ def args2body(self, parsed_args: argparse.Namespace) -> dict[str, str]:
242
+ client = self.app.client_manager.network
243
+ _rule_id = _get_required_firewall_rule(client, parsed_args)
244
+ _insert_before = ''
245
+ if 'insert_before' in parsed_args:
246
+ if parsed_args.insert_before:
247
+ _insert_before = client.find_firewall_rule(
248
+ parsed_args.insert_before, ignore_missing=False
249
+ ).id
250
+ _insert_after = ''
251
+ if 'insert_after' in parsed_args:
252
+ if parsed_args.insert_after:
253
+ _insert_after = client.find_firewall_rule(
254
+ parsed_args.insert_after, ignore_missing=False
255
+ ).id
256
+ return {
257
+ 'firewall_rule_id': _rule_id,
258
+ 'insert_before': _insert_before,
259
+ 'insert_after': _insert_after,
260
+ }
261
+
262
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
263
+ client = self.app.client_manager.network
264
+ policy_id = client.find_firewall_policy(
265
+ parsed_args.firewall_policy, ignore_missing=False
266
+ ).id
267
+ body = self.args2body(parsed_args)
268
+ client.insert_rule_into_policy(policy_id, **body)
269
+ rule_id = body['firewall_rule_id']
270
+ policy = parsed_args.firewall_policy
271
+ print(
272
+ (
273
+ _(
274
+ 'Inserted firewall rule %(rule)s in firewall policy '
275
+ '%(policy)s'
276
+ )
277
+ % {'rule': rule_id, 'policy': policy}
278
+ ),
279
+ file=self.app.stdout,
280
+ )
281
+
282
+
283
+ class FirewallPolicyRemoveRule(command.Command):
284
+ _description = _("Remove a rule from a given firewall policy")
285
+
286
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
287
+ parser = super().get_parser(prog_name)
288
+ parser.add_argument(
289
+ 'firewall_policy',
290
+ metavar='<firewall-policy>',
291
+ help=_('Firewall policy to remove rule (name or ID)'),
292
+ )
293
+ parser.add_argument(
294
+ 'firewall_rule',
295
+ metavar='<firewall-rule>',
296
+ help=_('Firewall rule to remove from policy (name or ID)'),
297
+ )
298
+ return parser
299
+
300
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
301
+ client = self.app.client_manager.network
302
+ policy_id = client.find_firewall_policy(
303
+ parsed_args.firewall_policy, ignore_missing=False
304
+ ).id
305
+ fwr_id = _get_required_firewall_rule(client, parsed_args)
306
+ body = {'firewall_rule_id': fwr_id}
307
+ client.remove_rule_from_policy(policy_id, **body)
308
+ rule_id = body['firewall_rule_id']
309
+ policy = parsed_args.firewall_policy
310
+ print(
311
+ (
312
+ _(
313
+ 'Removed firewall rule %(rule)s from firewall policy '
314
+ '%(policy)s'
315
+ )
316
+ % {'rule': rule_id, 'policy': policy}
317
+ ),
318
+ file=self.app.stdout,
319
+ )
320
+
321
+
322
+ class ListFirewallPolicy(command.Lister):
323
+ _description = _("List firewall policies")
324
+
325
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
326
+ parser = super().get_parser(prog_name)
327
+ parser.add_argument(
328
+ '--long',
329
+ action='store_true',
330
+ default=False,
331
+ help=_("List additional fields in output"),
332
+ )
333
+ return parser
334
+
335
+ def take_action(
336
+ self, parsed_args: argparse.Namespace
337
+ ) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
338
+ client = self.app.client_manager.network
339
+ obj = client.firewall_policies()
340
+ headers, columns = column_util.get_column_definitions(
341
+ list(_attr_map), long_listing=parsed_args.long
342
+ )
343
+ return (
344
+ headers,
345
+ (
346
+ utils.get_dict_properties(s, columns, formatters={})
347
+ for s in obj
348
+ ),
349
+ )
350
+
351
+
352
+ class SetFirewallPolicy(command.Command):
353
+ _description = _("Set firewall policy properties")
354
+
355
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
356
+ parser = super().get_parser(prog_name)
357
+ _get_common_parser(parser)
358
+ parser.add_argument(
359
+ 'firewall_policy',
360
+ metavar='<firewall-policy>',
361
+ help=_('Firewall policy to update (name or ID)'),
362
+ )
363
+ parser.add_argument(
364
+ '--name', metavar='<name>', help=_('Name for the firewall policy')
365
+ )
366
+ parser.add_argument(
367
+ '--firewall-rule',
368
+ action='append',
369
+ metavar='<firewall-rule>',
370
+ help=_('Firewall rule(s) to apply (name or ID)'),
371
+ )
372
+ parser.add_argument(
373
+ '--no-firewall-rule',
374
+ action='store_true',
375
+ help=_('Remove all firewall rules from firewall policy'),
376
+ )
377
+ return parser
378
+
379
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
380
+ client = self.app.client_manager.network
381
+ fwp_id = client.find_firewall_policy(
382
+ parsed_args.firewall_policy, ignore_missing=False
383
+ ).id
384
+ attrs = _get_common_attrs(
385
+ self.app.client_manager, parsed_args, is_create=False
386
+ )
387
+ try:
388
+ client.update_firewall_policy(fwp_id, **attrs)
389
+ except Exception as e:
390
+ msg = _("Failed to set firewall policy '%(policy)s': %(e)s") % {
391
+ 'policy': parsed_args.firewall_policy,
392
+ 'e': e,
393
+ }
394
+ raise exceptions.CommandError(msg)
395
+
396
+
397
+ class ShowFirewallPolicy(command.ShowOne):
398
+ _description = _("Display firewall policy details")
399
+
400
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
401
+ parser = super().get_parser(prog_name)
402
+ parser.add_argument(
403
+ 'firewall_policy',
404
+ metavar='<firewall-policy>',
405
+ help=_('Firewall policy to show (name or ID)'),
406
+ )
407
+ return parser
408
+
409
+ def take_action(
410
+ self, parsed_args: argparse.Namespace
411
+ ) -> tuple[Sequence[str], Iterable[Any]]:
412
+ client = self.app.client_manager.network
413
+ fwp_id = client.find_firewall_policy(
414
+ parsed_args.firewall_policy, ignore_missing=False
415
+ ).id
416
+ obj = client.get_firewall_policy(fwp_id)
417
+ display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
418
+ obj, _attr_map_dict, ['location', 'tenant_id']
419
+ )
420
+ data = utils.get_dict_properties(obj, columns, formatters={})
421
+ return (display_columns, data)
422
+
423
+
424
+ def _get_required_firewall_rule(
425
+ client: Any, parsed_args: argparse.Namespace
426
+ ) -> str:
427
+ if not parsed_args.firewall_rule:
428
+ msg = _("Firewall rule (name or ID) is required.")
429
+ raise exceptions.CommandError(msg)
430
+ return cast(
431
+ str,
432
+ client.find_firewall_rule(
433
+ parsed_args.firewall_rule, ignore_missing=False
434
+ ).id,
435
+ )
436
+
437
+
438
+ class UnsetFirewallPolicy(command.Command):
439
+ _description = _("Unset firewall policy properties")
440
+
441
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
442
+ parser = super().get_parser(prog_name)
443
+ parser.add_argument(
444
+ 'firewall_policy',
445
+ metavar='<firewall-policy>',
446
+ help=_('Firewall policy to unset (name or ID)'),
447
+ )
448
+ firewall_rule_group = parser.add_mutually_exclusive_group()
449
+ firewall_rule_group.add_argument(
450
+ '--firewall-rule',
451
+ action='append',
452
+ metavar='<firewall-rule>',
453
+ help=_(
454
+ 'Remove firewall rule(s) from the firewall policy (name or ID)'
455
+ ),
456
+ )
457
+ firewall_rule_group.add_argument(
458
+ '--all-firewall-rule',
459
+ action='store_true',
460
+ help=_('Remove all firewall rules from the firewall policy'),
461
+ )
462
+ parser.add_argument(
463
+ '--audited',
464
+ action='store_true',
465
+ help=_('Disable auditing for the policy'),
466
+ )
467
+ parser.add_argument(
468
+ '--share',
469
+ action='store_true',
470
+ help=_(
471
+ '(Deprecated) Use "firewall policy set --no-share" instead. '
472
+ 'Restrict use of the firewall policy to the current project'
473
+ ),
474
+ )
475
+ return parser
476
+
477
+ def _get_attrs(
478
+ self, client_manager: Any, parsed_args: argparse.Namespace
479
+ ) -> dict[str, Any]:
480
+ attrs: dict[str, Any] = {}
481
+ client = client_manager.network
482
+
483
+ if parsed_args.firewall_rule:
484
+ current = client.find_firewall_policy(
485
+ parsed_args.firewall_policy, ignore_missing=False
486
+ ).firewall_rules
487
+ removed = []
488
+ for f in set(parsed_args.firewall_rule):
489
+ removed.append(
490
+ client.find_firewall_rule(f, ignore_missing=False).id
491
+ )
492
+ attrs['firewall_rules'] = [r for r in current if r not in removed]
493
+ if parsed_args.all_firewall_rule:
494
+ attrs['firewall_rules'] = []
495
+ if parsed_args.audited:
496
+ attrs['audited'] = False
497
+ if parsed_args.share:
498
+ LOG.warning(
499
+ 'The --share option is deprecated, please use '
500
+ '"firewall policy set --no-share" instead.'
501
+ )
502
+ attrs['shared'] = False
503
+ return attrs
504
+
505
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
506
+ client = self.app.client_manager.network
507
+ fwp_id = client.find_firewall_policy(
508
+ parsed_args.firewall_policy, ignore_missing=False
509
+ ).id
510
+ attrs = self._get_attrs(self.app.client_manager, parsed_args)
511
+ try:
512
+ client.update_firewall_policy(fwp_id, **attrs)
513
+ except Exception as e:
514
+ msg = _("Failed to unset firewall policy '%(policy)s': %(e)s") % {
515
+ 'policy': parsed_args.firewall_policy,
516
+ 'e': e,
517
+ }
518
+ raise exceptions.CommandError(msg)