python-openstackclient 9.0.0__py3-none-any.whl → 10.0.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 (284) 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 +58 -42
  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 +14 -6
  14. openstackclient/common/pagination.py +8 -2
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +13 -7
  17. openstackclient/common/quota.py +97 -99
  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 +39 -21
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +14 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +29 -14
  29. openstackclient/compute/v2/server.py +249 -169
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +21 -12
  32. openstackclient/compute/v2/server_group.py +21 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +24 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +10 -4
  37. openstackclient/compute/v2/service.py +14 -7
  38. openstackclient/compute/v2/usage.py +26 -21
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +78 -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 +26 -12
  51. openstackclient/identity/v3/application_credential.py +59 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +36 -16
  55. openstackclient/identity/v3/domain.py +37 -18
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +42 -20
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +38 -16
  60. openstackclient/identity/v3/group.py +55 -32
  61. openstackclient/identity/v3/identity_provider.py +92 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +38 -16
  64. openstackclient/identity/v3/mapping.py +26 -13
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +43 -23
  67. openstackclient/identity/v3/region.py +36 -16
  68. openstackclient/identity/v3/registered_limit.py +40 -16
  69. openstackclient/identity/v3/role.py +61 -31
  70. openstackclient/identity/v3/role_assignment.py +23 -6
  71. openstackclient/identity/v3/service.py +36 -16
  72. openstackclient/identity/v3/service_provider.py +37 -15
  73. openstackclient/identity/v3/tag.py +23 -6
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +32 -14
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +49 -26
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +14 -9
  81. openstackclient/image/v2/image.py +74 -48
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +109 -13
  84. openstackclient/image/v2/metadef_objects.py +28 -15
  85. openstackclient/image/v2/metadef_properties.py +24 -13
  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 +15 -6
  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 +36 -22
  93. openstackclient/network/v2/address_group.py +27 -16
  94. openstackclient/network/v2/address_scope.py +24 -13
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +214 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +490 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +288 -0
  100. openstackclient/network/v2/default_security_group_rule.py +19 -10
  101. openstackclient/network/v2/floating_ip.py +110 -159
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +466 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +574 -0
  107. openstackclient/network/v2/ip_availability.py +13 -5
  108. openstackclient/network/v2/l3_conntrack_helper.py +22 -13
  109. openstackclient/network/v2/local_ip.py +24 -13
  110. openstackclient/network/v2/local_ip_association.py +14 -7
  111. openstackclient/network/v2/ndp_proxy.py +20 -11
  112. openstackclient/network/v2/network.py +129 -196
  113. openstackclient/network/v2/network_agent.py +46 -25
  114. openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
  115. openstackclient/network/v2/network_flavor.py +27 -16
  116. openstackclient/network/v2/network_flavor_profile.py +23 -12
  117. openstackclient/network/v2/network_meter.py +21 -10
  118. openstackclient/network/v2/network_meter_rule.py +21 -11
  119. openstackclient/network/v2/network_qos_policy.py +25 -15
  120. openstackclient/network/v2/network_qos_rule.py +32 -17
  121. openstackclient/network/v2/network_qos_rule_type.py +13 -5
  122. openstackclient/network/v2/network_rbac.py +23 -12
  123. openstackclient/network/v2/network_segment.py +20 -11
  124. openstackclient/network/v2/network_segment_range.py +56 -29
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +38 -22
  127. openstackclient/network/v2/port.py +54 -29
  128. openstackclient/network/v2/router.py +75 -52
  129. openstackclient/network/v2/security_group.py +87 -157
  130. openstackclient/network/v2/security_group_rule.py +100 -280
  131. openstackclient/network/v2/subnet.py +49 -28
  132. openstackclient/network/v2/subnet_pool.py +30 -17
  133. openstackclient/network/v2/taas/tap_flow.py +22 -11
  134. openstackclient/network/v2/taas/tap_mirror.py +22 -11
  135. openstackclient/network/v2/taas/tap_service.py +23 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +25 -15
  139. openstackclient/object/v1/object.py +25 -15
  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 +25 -19
  151. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  152. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  153. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  154. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  155. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  156. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  157. openstackclient/tests/functional/image/base.py +1 -6
  158. openstackclient/tests/functional/network/v2/common.py +5 -2
  159. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  160. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  161. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  162. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  163. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  164. openstackclient/tests/functional/object/v1/common.py +4 -0
  165. openstackclient/tests/functional/volume/v2/common.py +4 -0
  166. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  167. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  168. openstackclient/tests/functional/volume/v3/common.py +4 -0
  169. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
  170. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  171. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  172. openstackclient/tests/unit/common/test_extension.py +2 -2
  173. openstackclient/tests/unit/common/test_module.py +12 -7
  174. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  175. openstackclient/tests/unit/common/test_quota.py +6 -26
  176. openstackclient/tests/unit/compute/v2/fakes.py +25 -0
  177. openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
  178. openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
  179. openstackclient/tests/unit/compute/v2/test_server.py +11 -96
  180. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  181. openstackclient/tests/unit/identity/v3/fakes.py +3 -0
  182. openstackclient/tests/unit/identity/v3/test_group.py +4 -14
  183. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  184. openstackclient/tests/unit/identity/v3/test_user.py +4 -4
  185. openstackclient/tests/unit/image/v2/test_image.py +11 -11
  186. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  187. openstackclient/tests/unit/network/test_common.py +0 -155
  188. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  189. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  190. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  191. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  192. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  193. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  194. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  195. openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
  196. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  197. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
  198. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  199. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  200. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  201. openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
  202. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
  203. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
  204. openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
  205. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  206. openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
  207. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
  208. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  209. openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
  210. openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
  211. openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
  212. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  213. openstackclient/tests/unit/network/v2/test_router.py +8 -9
  214. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
  215. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
  216. openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
  217. openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
  218. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  219. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  220. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  221. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  222. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  223. openstackclient/tests/unit/test_hacking.py +108 -0
  224. openstackclient/tests/unit/volume/v2/fakes.py +1 -0
  225. openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
  226. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
  227. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  228. openstackclient/tests/unit/volume/v3/fakes.py +1 -0
  229. openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
  230. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  231. openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
  232. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
  233. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  234. openstackclient/volume/client.py +7 -3
  235. openstackclient/volume/v2/backup_record.py +15 -6
  236. openstackclient/volume/v2/consistency_group.py +29 -17
  237. openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
  238. openstackclient/volume/v2/qos_specs.py +28 -17
  239. openstackclient/volume/v2/service.py +17 -6
  240. openstackclient/volume/v2/volume.py +57 -29
  241. openstackclient/volume/v2/volume_backend.py +19 -6
  242. openstackclient/volume/v2/volume_backup.py +46 -20
  243. openstackclient/volume/v2/volume_host.py +6 -4
  244. openstackclient/volume/v2/volume_snapshot.py +50 -24
  245. openstackclient/volume/v2/volume_transfer_request.py +31 -13
  246. openstackclient/volume/v2/volume_type.py +43 -24
  247. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  248. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  249. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  250. openstackclient/volume/v3/block_storage_manage.py +10 -4
  251. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  252. openstackclient/volume/v3/service.py +16 -6
  253. openstackclient/volume/v3/volume.py +89 -39
  254. openstackclient/volume/v3/volume_attachment.py +43 -21
  255. openstackclient/volume/v3/volume_backup.py +53 -24
  256. openstackclient/volume/v3/volume_group.py +23 -13
  257. openstackclient/volume/v3/volume_group_snapshot.py +32 -13
  258. openstackclient/volume/v3/volume_group_type.py +26 -13
  259. openstackclient/volume/v3/volume_message.py +15 -7
  260. openstackclient/volume/v3/volume_snapshot.py +69 -32
  261. openstackclient/volume/v3/volume_transfer_request.py +31 -13
  262. openstackclient/volume/v3/volume_type.py +42 -24
  263. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
  264. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +271 -260
  265. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
  266. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
  267. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +4 -0
  268. python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
  269. openstackclient/api/image_v1.py +0 -69
  270. openstackclient/api/image_v2.py +0 -79
  271. openstackclient/network/v2/floating_ip_pool.py +0 -38
  272. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  273. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  274. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  275. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  276. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  277. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  278. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  279. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  280. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  281. python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
  282. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  283. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
  284. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
@@ -341,61 +341,7 @@ class TestServerAddFixedIP(TestServer):
341
341
  )
342
342
 
343
343
 
344
- class TestServerAddFloatingIPCompute(compute_fakes.TestComputev2):
345
- def setUp(self):
346
- super().setUp()
347
-
348
- self.app.client_manager.network_endpoint_enabled = False
349
- self.server = compute_fakes.create_one_server()
350
- self.compute_client.find_server.return_value = self.server
351
-
352
- self.cmd = server.AddFloatingIP(self.app, None)
353
-
354
- def test_server_add_floating_ip_default(self):
355
- arglist = [
356
- self.server.name,
357
- '1.2.3.4',
358
- ]
359
- verifylist = [
360
- ('server', self.server.name),
361
- ('ip_address', '1.2.3.4'),
362
- ]
363
-
364
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
365
- self.cmd.take_action(parsed_args)
366
-
367
- self.compute_client.find_server.assert_called_once_with(
368
- self.server.name, ignore_missing=False
369
- )
370
- self.compute_client.add_floating_ip_to_server.assert_called_once_with(
371
- self.server, '1.2.3.4', fixed_address=None
372
- )
373
-
374
- def test_server_add_floating_ip_fixed(self):
375
- arglist = [
376
- '--fixed-ip-address',
377
- '5.6.7.8',
378
- self.server.name,
379
- '1.2.3.4',
380
- ]
381
- verifylist = [
382
- ('fixed_ip_address', '5.6.7.8'),
383
- ('server', self.server.name),
384
- ('ip_address', '1.2.3.4'),
385
- ]
386
-
387
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
388
- self.cmd.take_action(parsed_args)
389
-
390
- self.compute_client.find_server.assert_called_once_with(
391
- self.server.name, ignore_missing=False
392
- )
393
- self.compute_client.add_floating_ip_to_server.assert_called_once_with(
394
- self.server, '1.2.3.4', fixed_address='5.6.7.8'
395
- )
396
-
397
-
398
- class TestServerAddFloatingIPNetwork(
344
+ class TestServerAddFloatingIP(
399
345
  TestServer,
400
346
  network_fakes.TestNetworkV2,
401
347
  ):
@@ -1608,8 +1554,8 @@ class TestServerCreate(TestServer):
1608
1554
  port_port2.id: port_port2,
1609
1555
  }[name_or_id]
1610
1556
 
1611
- self.app.client_manager.network.find_network.side_effect = find_network
1612
- self.app.client_manager.network.find_port.side_effect = find_port
1557
+ self.network_client.find_network.side_effect = find_network
1558
+ self.network_client.find_port.side_effect = find_port
1613
1559
 
1614
1560
  arglist = [
1615
1561
  '--image',
@@ -1728,7 +1674,7 @@ class TestServerCreate(TestServer):
1728
1674
  self.set_compute_api_version('2.43')
1729
1675
 
1730
1676
  network = network_fakes.create_one_network()
1731
- self.app.client_manager.network.find_network.return_value = network
1677
+ self.network_client.find_network.return_value = network
1732
1678
 
1733
1679
  arglist = [
1734
1680
  '--image',
@@ -4865,7 +4811,7 @@ class TestServerList(_TestServerList):
4865
4811
  ]
4866
4812
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4867
4813
 
4868
- columns, data = self.cmd.take_action(parsed_args)
4814
+ columns, _data = self.cmd.take_action(parsed_args)
4869
4815
 
4870
4816
  self.compute_client.servers.assert_called_with(**self.kwargs)
4871
4817
  self.assertIn('Project ID', columns)
@@ -5329,7 +5275,7 @@ class TestServerList(_TestServerList):
5329
5275
  ]
5330
5276
 
5331
5277
  # Add the expected host_status column and data.
5332
- columns_long = self.columns_long + ('Host Status',)
5278
+ columns_long = (*self.columns_long, 'Host Status')
5333
5279
  self.data2 = tuple(
5334
5280
  (
5335
5281
  s.id,
@@ -5560,7 +5506,7 @@ class TestServerListV273(_TestServerList):
5560
5506
  }
5561
5507
  fake_server = _server.Server(**server_dict)
5562
5508
  self.servers.append(fake_server)
5563
- columns, data = self.cmd.take_action(parsed_args)
5509
+ _columns, data = self.cmd.take_action(parsed_args)
5564
5510
  # get the first three servers out since our interest is in the partial
5565
5511
  # server.
5566
5512
  next(data)
@@ -5708,7 +5654,7 @@ class TestServerListV296(_TestServerList):
5708
5654
  ]
5709
5655
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5710
5656
 
5711
- columns, data = self.cmd.take_action(parsed_args)
5657
+ columns, _data = self.cmd.take_action(parsed_args)
5712
5658
 
5713
5659
  self.compute_client.servers.assert_called_with(**self.kwargs)
5714
5660
  self.assertIn('Project ID', columns)
@@ -5860,7 +5806,7 @@ class TestServerListV2100(_TestServerList):
5860
5806
  ]
5861
5807
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5862
5808
 
5863
- columns, data = self.cmd.take_action(parsed_args)
5809
+ columns, _data = self.cmd.take_action(parsed_args)
5864
5810
 
5865
5811
  self.compute_client.servers.assert_called_with(**self.kwargs)
5866
5812
  self.assertIn('Project ID', columns)
@@ -7648,38 +7594,7 @@ class TestServerRescue(compute_fakes.TestComputev2):
7648
7594
  self.assertIsNone(result)
7649
7595
 
7650
7596
 
7651
- class TestServerRemoveFloatingIPCompute(compute_fakes.TestComputev2):
7652
- def setUp(self):
7653
- super().setUp()
7654
-
7655
- self.app.client_manager.network_endpoint_enabled = False
7656
- self.server = compute_fakes.create_one_server()
7657
- self.compute_client.find_server.return_value = self.server
7658
-
7659
- self.cmd = server.RemoveFloatingIP(self.app, None)
7660
-
7661
- def test_server_remove_floating_ip(self):
7662
- arglist = [
7663
- self.server.name,
7664
- '1.2.3.4',
7665
- ]
7666
- verifylist = [
7667
- ('server', self.server.name),
7668
- ('ip_address', '1.2.3.4'),
7669
- ]
7670
-
7671
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
7672
- self.cmd.take_action(parsed_args)
7673
-
7674
- self.compute_client.find_server.assert_called_once_with(
7675
- self.server.name, ignore_missing=False
7676
- )
7677
- self.compute_client.remove_floating_ip_from_server.assert_called_once_with(
7678
- self.server, '1.2.3.4'
7679
- )
7680
-
7681
-
7682
- class TestServerRemoveFloatingIPNetwork(network_fakes.TestNetworkV2):
7597
+ class TestServerRemoveFloatingIP(network_fakes.TestNetworkV2):
7683
7598
  def setUp(self):
7684
7599
  super().setUp()
7685
7600
 
@@ -8896,7 +8811,7 @@ class TestServerShow(TestServer):
8896
8811
  None, # OS-EXT-SRV-ATTR:user_data
8897
8812
  server.PowerStateColumn(
8898
8813
  self.server.power_state
8899
- ), # OS-EXT-STS:power_state # noqa: E501
8814
+ ), # OS-EXT-STS:power_state
8900
8815
  None, # OS-EXT-STS:task_state
8901
8816
  None, # OS-EXT-STS:vm_state
8902
8817
  None, # OS-SRV-USG:launched_at
@@ -0,0 +1,287 @@
1
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
2
+ # not use this file except in compliance with the License. You may obtain
3
+ # a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10
+ # License for the specific language governing permissions and limitations
11
+ # under the License.
12
+ #
13
+
14
+ import uuid
15
+
16
+ from osc_lib import exceptions
17
+
18
+ from openstackclient.compute.v2 import server_share
19
+ from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
20
+
21
+
22
+ class TestServerShareList(compute_fakes.TestComputev2):
23
+ def setUp(self):
24
+ super().setUp()
25
+
26
+ self.set_compute_api_version('2.97')
27
+
28
+ self.server = compute_fakes.create_one_server()
29
+ self.shares = compute_fakes.create_shares()
30
+
31
+ self.compute_client.find_server.return_value = self.server
32
+ self.compute_client.share_attachments.return_value = self.shares
33
+
34
+ self.cmd = server_share.ListServerShare(self.app, None)
35
+
36
+ def test_server_share_list(self):
37
+ arglist = [
38
+ self.server.id,
39
+ ]
40
+ verifylist = [
41
+ ('server', self.server.id),
42
+ ]
43
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
44
+ columns, data = self.cmd.take_action(parsed_args)
45
+
46
+ self.assertEqual(("Share ID", "Status", "Tag"), columns)
47
+ self.assertEqual(
48
+ (
49
+ (
50
+ self.shares[0].share_id,
51
+ self.shares[0].status,
52
+ self.shares[0].tag,
53
+ ),
54
+ (
55
+ self.shares[1].share_id,
56
+ self.shares[1].status,
57
+ self.shares[1].tag,
58
+ ),
59
+ ),
60
+ tuple(data),
61
+ )
62
+ self.compute_client.share_attachments.assert_called_once_with(
63
+ self.server,
64
+ )
65
+
66
+ def test_server_share_list_pre_v297(self):
67
+ self.set_compute_api_version('2.96')
68
+ arglist = [self.server.id]
69
+ verifylist = [('server', self.server.id)]
70
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
71
+ self.assertRaises(
72
+ exceptions.CommandError,
73
+ self.cmd.take_action,
74
+ parsed_args,
75
+ )
76
+
77
+
78
+ class TestServerShareShow(compute_fakes.TestComputev2):
79
+ def setUp(self):
80
+ super().setUp()
81
+
82
+ self.set_compute_api_version('2.97')
83
+
84
+ self.server = compute_fakes.create_one_server()
85
+ self.share = compute_fakes.create_one_share()
86
+
87
+ self.compute_client.find_server.return_value = self.server
88
+ self.compute_client.get_share_attachment.return_value = self.share
89
+
90
+ self.shared_file_system_client = (
91
+ self.app.client_manager.sdk_connection.shared_file_system
92
+ )
93
+ self._manila_share_id = uuid.uuid4().hex
94
+ self.shared_file_system_client.find_share.return_value = type(
95
+ 'FakeShare', (), {'id': self._manila_share_id}
96
+ )()
97
+
98
+ self.cmd = server_share.ShowServerShare(self.app, None)
99
+
100
+ def test_server_share_show(self):
101
+ arglist = [
102
+ self.server.id,
103
+ self._manila_share_id,
104
+ ]
105
+ verifylist = [
106
+ ('server', self.server.id),
107
+ ('share', self._manila_share_id),
108
+ ]
109
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
110
+ columns, data = self.cmd.take_action(parsed_args)
111
+
112
+ self.assertEqual(
113
+ ('Export Location', 'Share ID', 'Status', 'Tag', 'UUID'), columns
114
+ )
115
+ self.assertEqual(
116
+ (
117
+ self.share.export_location,
118
+ self.share.share_id,
119
+ self.share.status,
120
+ self.share.tag,
121
+ self.share.uuid,
122
+ ),
123
+ tuple(data),
124
+ )
125
+ self.shared_file_system_client.find_share.assert_called_once_with(
126
+ self._manila_share_id, ignore_missing=False
127
+ )
128
+ self.compute_client.get_share_attachment.assert_called_once_with(
129
+ self.server, self._manila_share_id
130
+ )
131
+
132
+ def test_server_share_show_pre_v297(self):
133
+ self.set_compute_api_version('2.96')
134
+ arglist = [self.server.id, self._manila_share_id]
135
+ verifylist = [
136
+ ('server', self.server.id),
137
+ ('share', self._manila_share_id),
138
+ ]
139
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
140
+ self.assertRaises(
141
+ exceptions.CommandError,
142
+ self.cmd.take_action,
143
+ parsed_args,
144
+ )
145
+
146
+
147
+ class TestServerShareCreate(compute_fakes.TestComputev2):
148
+ def setUp(self):
149
+ super().setUp()
150
+
151
+ self.set_compute_api_version('2.97')
152
+
153
+ self.server = compute_fakes.create_one_server()
154
+ self.share = compute_fakes.create_one_share()
155
+
156
+ self.compute_client.find_server.return_value = self.server
157
+ self.compute_client.create_share_attachment.return_value = self.share
158
+
159
+ self.shared_file_system_client = (
160
+ self.app.client_manager.sdk_connection.shared_file_system
161
+ )
162
+ self._manila_share_id = uuid.uuid4().hex
163
+ self.shared_file_system_client.find_share.return_value = type(
164
+ 'FakeShare', (), {'id': self._manila_share_id}
165
+ )()
166
+
167
+ self.cmd = server_share.AddServerShare(self.app, None)
168
+
169
+ def test_server_share_create(self):
170
+ arglist = [
171
+ self.server.id,
172
+ self._manila_share_id,
173
+ "--tag",
174
+ "my-tag",
175
+ ]
176
+ verifylist = [
177
+ ('server', self.server.id),
178
+ ('share', self._manila_share_id),
179
+ ('tag', 'my-tag'),
180
+ ]
181
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
182
+ columns, data = self.cmd.take_action(parsed_args)
183
+
184
+ self.assertEqual(
185
+ ("Export Location", "Share ID", "Status", "Tag", "UUID"), columns
186
+ )
187
+ self.assertEqual(
188
+ (
189
+ self.share.export_location,
190
+ self.share.share_id,
191
+ self.share.status,
192
+ self.share.tag,
193
+ self.share.uuid,
194
+ ),
195
+ tuple(data),
196
+ )
197
+ self.shared_file_system_client.find_share.assert_called_once_with(
198
+ self._manila_share_id, ignore_missing=False
199
+ )
200
+ self.compute_client.create_share_attachment.assert_called_once_with(
201
+ self.server, self._manila_share_id, tag='my-tag'
202
+ )
203
+
204
+ def test_server_share_create_no_tag(self):
205
+ arglist = [
206
+ self.server.id,
207
+ self._manila_share_id,
208
+ ]
209
+ verifylist = [
210
+ ('server', self.server.id),
211
+ ('share', self._manila_share_id),
212
+ ]
213
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
214
+ self.cmd.take_action(parsed_args)
215
+
216
+ self.compute_client.create_share_attachment.assert_called_once_with(
217
+ self.server, self._manila_share_id
218
+ )
219
+
220
+ def test_server_share_create_pre_v297(self):
221
+ self.set_compute_api_version('2.96')
222
+ arglist = [self.server.id, self._manila_share_id]
223
+ verifylist = [
224
+ ('server', self.server.id),
225
+ ('share', self._manila_share_id),
226
+ ]
227
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
228
+ self.assertRaises(
229
+ exceptions.CommandError,
230
+ self.cmd.take_action,
231
+ parsed_args,
232
+ )
233
+
234
+
235
+ class TestServerShareDelete(compute_fakes.TestComputev2):
236
+ def setUp(self):
237
+ super().setUp()
238
+
239
+ self.set_compute_api_version('2.97')
240
+
241
+ self.server = compute_fakes.create_one_server()
242
+
243
+ self.compute_client.find_server.return_value = self.server
244
+
245
+ self.shared_file_system_client = (
246
+ self.app.client_manager.sdk_connection.shared_file_system
247
+ )
248
+ self._manila_share_id = uuid.uuid4().hex
249
+ self.shared_file_system_client.find_share.return_value = type(
250
+ 'FakeShare', (), {'id': self._manila_share_id}
251
+ )()
252
+
253
+ self.cmd = server_share.RemoveServerShare(self.app, None)
254
+
255
+ def test_server_share_delete(self):
256
+ arglist = [
257
+ self.server.id,
258
+ self._manila_share_id,
259
+ ]
260
+ verifylist = [
261
+ ('server', self.server.id),
262
+ ('share', self._manila_share_id),
263
+ ]
264
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
265
+ self.cmd.take_action(parsed_args)
266
+
267
+ self.shared_file_system_client.find_share.assert_called_once_with(
268
+ self._manila_share_id, ignore_missing=False
269
+ )
270
+ self.compute_client.delete_share_attachment.assert_called_once_with(
271
+ self.server,
272
+ self._manila_share_id,
273
+ )
274
+
275
+ def test_server_share_delete_pre_v297(self):
276
+ self.set_compute_api_version('2.96')
277
+ arglist = [self.server.id, self._manila_share_id]
278
+ verifylist = [
279
+ ('server', self.server.id),
280
+ ('share', self._manila_share_id),
281
+ ]
282
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
283
+ self.assertRaises(
284
+ exceptions.CommandError,
285
+ self.cmd.take_action,
286
+ parsed_args,
287
+ )
@@ -682,6 +682,7 @@ class FakeClientMixin:
682
682
  self.app.client_manager.sdk_connection.identity = mock.Mock(
683
683
  _proxy.Proxy
684
684
  )
685
+ self.app.client_manager.sdk_connection.identity.api_version = '3'
685
686
  self.identity_sdk_client = (
686
687
  self.app.client_manager.sdk_connection.identity
687
688
  )
@@ -716,6 +717,7 @@ class TestFederatedIdentity(utils.TestCommand):
716
717
  self.app.client_manager.sdk_connection.identity = mock.Mock(
717
718
  _proxy.Proxy
718
719
  )
720
+ self.app.client_manager.sdk_connection.identity.api_version = '3'
719
721
  self.identity_sdk_client = (
720
722
  self.app.client_manager.sdk_connection.identity
721
723
  )
@@ -736,6 +738,7 @@ class TestOAuth1(utils.TestCommand):
736
738
  self.app.client_manager.sdk_connection.identity = mock.Mock(
737
739
  _proxy.Proxy
738
740
  )
741
+ self.app.client_manager.sdk_connection.identity.api_version = '3'
739
742
  self.identity_sdk_client = (
740
743
  self.app.client_manager.sdk_connection.identity
741
744
  )
@@ -103,7 +103,7 @@ class TestGroupAddUser(identity_fakes.TestIdentityv3):
103
103
  except exceptions.CommandError as e:
104
104
  msg = f"1 of 2 users not added to group {self._group.name}."
105
105
  self.assertEqual(msg, str(e))
106
- msg = f"{self.users[0].name} not added to group {self._group.name}: {str(sdk_exc.ResourceNotFound())}"
106
+ msg = f"{self.users[0].name} not added to group {self._group.name}: {sdk_exc.ResourceNotFound()!s}"
107
107
  mock_error.assert_called_once_with(msg)
108
108
 
109
109
 
@@ -553,14 +553,7 @@ class TestGroupList(identity_fakes.TestIdentityv3):
553
553
  # containing the data to be listed.
554
554
  columns, data = self.cmd.take_action(parsed_args)
555
555
 
556
- # Set expected values
557
- kwargs = {
558
- 'domain_id': self.domain.id,
559
- }
560
-
561
- self.identity_sdk_client.user_groups.assert_called_with(
562
- self.user.id, **kwargs
563
- )
556
+ self.identity_sdk_client.user_groups.assert_called_with(self.user.id)
564
557
 
565
558
  self.assertEqual(self.columns, columns)
566
559
 
@@ -587,10 +580,7 @@ class TestGroupList(identity_fakes.TestIdentityv3):
587
580
 
588
581
  self.identity_sdk_client.groups.assert_called_with()
589
582
 
590
- long_columns = self.columns + (
591
- 'Domain ID',
592
- 'Description',
593
- )
583
+ long_columns = (*self.columns, 'Domain ID', 'Description')
594
584
  datalist = (
595
585
  (
596
586
  self.group.id,
@@ -687,7 +677,7 @@ class TestGroupRemoveUser(identity_fakes.TestIdentityv3):
687
677
  except exceptions.CommandError as e:
688
678
  msg = f"1 of 2 users not removed from group {self._group.id}."
689
679
  self.assertEqual(msg, str(e))
690
- msg = f"{self.users[0].id} not removed from group {self._group.id}: {str(sdk_exc.ResourceNotFound())}"
680
+ msg = f"{self.users[0].id} not removed from group {self._group.id}: {sdk_exc.ResourceNotFound()!s}"
691
681
  mock_error.assert_called_once_with(msg)
692
682
 
693
683