python-openstackclient 6.6.1__py3-none-any.whl → 7.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 (336) hide show
  1. openstackclient/api/api.py +4 -4
  2. openstackclient/api/compute_v2.py +352 -638
  3. openstackclient/api/image_v1.py +1 -1
  4. openstackclient/api/object_store_v1.py +3 -4
  5. openstackclient/common/availability_zone.py +1 -1
  6. openstackclient/common/clientmanager.py +24 -20
  7. openstackclient/common/configuration.py +1 -1
  8. openstackclient/common/extension.py +1 -1
  9. openstackclient/common/limits.py +67 -34
  10. openstackclient/common/module.py +3 -3
  11. openstackclient/common/progressbar.py +2 -2
  12. openstackclient/common/project_cleanup.py +5 -2
  13. openstackclient/common/quota.py +299 -423
  14. openstackclient/common/versions.py +1 -1
  15. openstackclient/compute/client.py +7 -116
  16. openstackclient/compute/v2/agent.py +75 -49
  17. openstackclient/compute/v2/aggregate.py +38 -32
  18. openstackclient/compute/v2/console.py +2 -2
  19. openstackclient/compute/v2/flavor.py +6 -6
  20. openstackclient/compute/v2/host.py +38 -33
  21. openstackclient/compute/v2/hypervisor.py +9 -6
  22. openstackclient/compute/v2/keypair.py +7 -8
  23. openstackclient/compute/v2/server.py +479 -396
  24. openstackclient/compute/v2/server_backup.py +1 -1
  25. openstackclient/compute/v2/server_group.py +4 -4
  26. openstackclient/compute/v2/server_image.py +1 -1
  27. openstackclient/compute/v2/server_migration.py +3 -4
  28. openstackclient/compute/v2/service.py +4 -4
  29. openstackclient/compute/v2/usage.py +3 -3
  30. openstackclient/identity/common.py +34 -0
  31. openstackclient/identity/v2_0/catalog.py +2 -2
  32. openstackclient/identity/v2_0/ec2creds.py +4 -4
  33. openstackclient/identity/v2_0/endpoint.py +4 -4
  34. openstackclient/identity/v2_0/project.py +6 -6
  35. openstackclient/identity/v2_0/role.py +5 -5
  36. openstackclient/identity/v2_0/role_assignment.py +1 -1
  37. openstackclient/identity/v2_0/service.py +4 -4
  38. openstackclient/identity/v2_0/token.py +2 -2
  39. openstackclient/identity/v2_0/user.py +7 -7
  40. openstackclient/identity/v3/access_rule.py +3 -3
  41. openstackclient/identity/v3/application_credential.py +125 -43
  42. openstackclient/identity/v3/catalog.py +2 -2
  43. openstackclient/identity/v3/consumer.py +4 -4
  44. openstackclient/identity/v3/credential.py +5 -5
  45. openstackclient/identity/v3/domain.py +5 -5
  46. openstackclient/identity/v3/ec2creds.py +4 -4
  47. openstackclient/identity/v3/endpoint.py +7 -7
  48. openstackclient/identity/v3/endpoint_group.py +8 -10
  49. openstackclient/identity/v3/federation_protocol.py +5 -5
  50. openstackclient/identity/v3/group.py +8 -8
  51. openstackclient/identity/v3/identity_provider.py +5 -5
  52. openstackclient/identity/v3/implied_role.py +3 -3
  53. openstackclient/identity/v3/limit.py +5 -5
  54. openstackclient/identity/v3/mapping.py +5 -5
  55. openstackclient/identity/v3/policy.py +5 -5
  56. openstackclient/identity/v3/project.py +5 -5
  57. openstackclient/identity/v3/region.py +5 -5
  58. openstackclient/identity/v3/registered_limit.py +5 -5
  59. openstackclient/identity/v3/role.py +7 -7
  60. openstackclient/identity/v3/role_assignment.py +92 -140
  61. openstackclient/identity/v3/service.py +64 -34
  62. openstackclient/identity/v3/service_provider.py +4 -4
  63. openstackclient/identity/v3/tag.py +2 -2
  64. openstackclient/identity/v3/token.py +5 -5
  65. openstackclient/identity/v3/trust.py +3 -3
  66. openstackclient/identity/v3/user.py +144 -80
  67. openstackclient/image/client.py +4 -4
  68. openstackclient/image/v1/image.py +8 -9
  69. openstackclient/image/v2/cache.py +12 -10
  70. openstackclient/image/v2/metadef_objects.py +44 -0
  71. openstackclient/image/v2/metadef_resource_type_association.py +189 -0
  72. openstackclient/image/v2/task.py +1 -1
  73. openstackclient/network/common.py +6 -5
  74. openstackclient/network/utils.py +2 -2
  75. openstackclient/network/v2/address_group.py +6 -6
  76. openstackclient/network/v2/address_scope.py +5 -5
  77. openstackclient/network/v2/default_security_group_rule.py +1 -1
  78. openstackclient/network/v2/floating_ip.py +8 -10
  79. openstackclient/network/v2/floating_ip_pool.py +6 -15
  80. openstackclient/network/v2/floating_ip_port_forwarding.py +5 -13
  81. openstackclient/network/v2/ip_availability.py +2 -2
  82. openstackclient/network/v2/l3_conntrack_helper.py +5 -5
  83. openstackclient/network/v2/network.py +8 -8
  84. openstackclient/network/v2/network_agent.py +8 -8
  85. openstackclient/network/v2/network_auto_allocated_topology.py +2 -2
  86. openstackclient/network/v2/network_flavor.py +6 -8
  87. openstackclient/network/v2/network_flavor_profile.py +4 -4
  88. openstackclient/network/v2/network_meter.py +3 -3
  89. openstackclient/network/v2/network_meter_rule.py +3 -3
  90. openstackclient/network/v2/network_qos_policy.py +5 -5
  91. openstackclient/network/v2/network_qos_rule.py +9 -9
  92. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  93. openstackclient/network/v2/network_rbac.py +5 -5
  94. openstackclient/network/v2/network_segment.py +5 -5
  95. openstackclient/network/v2/network_segment_range.py +7 -7
  96. openstackclient/network/v2/network_trunk.py +7 -7
  97. openstackclient/network/v2/port.py +26 -12
  98. openstackclient/network/v2/router.py +403 -54
  99. openstackclient/network/v2/security_group.py +18 -14
  100. openstackclient/network/v2/security_group_rule.py +18 -15
  101. openstackclient/network/v2/subnet.py +15 -8
  102. openstackclient/network/v2/subnet_pool.py +6 -6
  103. openstackclient/object/v1/account.py +2 -2
  104. openstackclient/object/v1/container.py +7 -7
  105. openstackclient/object/v1/object.py +7 -7
  106. openstackclient/releasenotes/notes/volume-backup-created-at-list-b49ec893ae1f6b0d.yaml +4 -0
  107. openstackclient/shell.py +4 -6
  108. openstackclient/tests/functional/base.py +1 -1
  109. openstackclient/tests/functional/common/test_extension.py +1 -1
  110. openstackclient/tests/functional/common/test_help.py +2 -2
  111. openstackclient/tests/functional/common/test_module.py +1 -1
  112. openstackclient/tests/functional/common/test_quota.py +43 -61
  113. openstackclient/tests/functional/compute/v2/common.py +2 -2
  114. openstackclient/tests/functional/compute/v2/test_flavor.py +2 -2
  115. openstackclient/tests/functional/compute/v2/test_keypair.py +1 -1
  116. openstackclient/tests/functional/compute/v2/test_server.py +5 -5
  117. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  118. openstackclient/tests/functional/identity/v2/common.py +3 -3
  119. openstackclient/tests/functional/identity/v3/common.py +12 -4
  120. openstackclient/tests/functional/identity/v3/test_application_credential.py +6 -12
  121. openstackclient/tests/functional/identity/v3/test_domain.py +1 -3
  122. openstackclient/tests/functional/identity/v3/test_endpoint.py +1 -1
  123. openstackclient/tests/functional/identity/v3/test_idp.py +1 -1
  124. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  125. openstackclient/tests/functional/identity/v3/test_role.py +2 -2
  126. openstackclient/tests/functional/identity/v3/test_role_assignment.py +210 -0
  127. openstackclient/tests/functional/identity/v3/test_service.py +1 -3
  128. openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -3
  129. openstackclient/tests/functional/image/base.py +1 -1
  130. openstackclient/tests/functional/image/v2/test_image.py +1 -1
  131. openstackclient/tests/functional/image/v2/test_info.py +1 -1
  132. openstackclient/tests/functional/network/v2/common.py +4 -6
  133. openstackclient/tests/functional/network/v2/test_network.py +5 -3
  134. openstackclient/tests/functional/network/v2/test_network_agent.py +7 -5
  135. openstackclient/tests/functional/network/v2/test_network_qos_rule.py +4 -4
  136. openstackclient/tests/functional/network/v2/test_port.py +11 -7
  137. openstackclient/tests/functional/network/v2/test_router.py +2 -2
  138. openstackclient/tests/functional/object/v1/common.py +1 -1
  139. openstackclient/tests/functional/object/v1/test_container.py +3 -3
  140. openstackclient/tests/functional/object/v1/test_object.py +9 -13
  141. openstackclient/tests/functional/volume/base.py +1 -1
  142. openstackclient/tests/functional/volume/v1/test_service.py +1 -1
  143. openstackclient/tests/functional/volume/v1/test_snapshot.py +2 -2
  144. openstackclient/tests/functional/volume/v1/test_transfer_request.py +2 -2
  145. openstackclient/tests/functional/volume/v1/test_volume_type.py +1 -1
  146. openstackclient/tests/functional/volume/v2/test_service.py +2 -2
  147. openstackclient/tests/functional/volume/v2/test_volume_backup.py +2 -2
  148. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +2 -2
  149. openstackclient/tests/functional/volume/v2/test_volume_type.py +1 -1
  150. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +2 -2
  151. openstackclient/tests/functional/volume/v3/test_volume_type.py +1 -1
  152. openstackclient/tests/unit/api/fakes.py +1 -1
  153. openstackclient/tests/unit/api/test_api.py +2 -2
  154. openstackclient/tests/unit/api/test_compute_v2.py +522 -707
  155. openstackclient/tests/unit/api/test_image_v1.py +1 -1
  156. openstackclient/tests/unit/api/test_image_v2.py +1 -1
  157. openstackclient/tests/unit/api/test_object_store_v1.py +4 -4
  158. openstackclient/tests/unit/common/test_limits.py +73 -35
  159. openstackclient/tests/unit/common/test_logs.py +2 -2
  160. openstackclient/tests/unit/common/test_module.py +4 -2
  161. openstackclient/tests/unit/common/test_project_cleanup.py +31 -6
  162. openstackclient/tests/unit/common/test_quota.py +490 -630
  163. openstackclient/tests/unit/compute/v2/fakes.py +37 -286
  164. openstackclient/tests/unit/compute/v2/test_agent.py +189 -147
  165. openstackclient/tests/unit/compute/v2/test_aggregate.py +87 -57
  166. openstackclient/tests/unit/compute/v2/test_console.py +4 -5
  167. openstackclient/tests/unit/compute/v2/test_flavor.py +59 -68
  168. openstackclient/tests/unit/compute/v2/test_host.py +83 -54
  169. openstackclient/tests/unit/compute/v2/test_hypervisor.py +57 -34
  170. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  171. openstackclient/tests/unit/compute/v2/test_keypair.py +65 -50
  172. openstackclient/tests/unit/compute/v2/test_server.py +2850 -2453
  173. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  174. openstackclient/tests/unit/compute/v2/test_server_event.py +14 -39
  175. openstackclient/tests/unit/compute/v2/test_server_group.py +28 -29
  176. openstackclient/tests/unit/compute/v2/test_server_migration.py +43 -68
  177. openstackclient/tests/unit/compute/v2/test_server_volume.py +17 -34
  178. openstackclient/tests/unit/compute/v2/test_service.py +34 -52
  179. openstackclient/tests/unit/compute/v2/test_usage.py +4 -4
  180. openstackclient/tests/unit/fakes.py +12 -12
  181. openstackclient/tests/unit/identity/v2_0/fakes.py +27 -10
  182. openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -3
  183. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +7 -7
  184. openstackclient/tests/unit/identity/v2_0/test_project.py +8 -8
  185. openstackclient/tests/unit/identity/v2_0/test_role.py +10 -10
  186. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +4 -4
  187. openstackclient/tests/unit/identity/v2_0/test_service.py +6 -6
  188. openstackclient/tests/unit/identity/v2_0/test_token.py +4 -4
  189. openstackclient/tests/unit/identity/v2_0/test_user.py +8 -8
  190. openstackclient/tests/unit/identity/v3/fakes.py +59 -20
  191. openstackclient/tests/unit/identity/v3/test_access_rule.py +5 -5
  192. openstackclient/tests/unit/identity/v3/test_application_credential.py +207 -230
  193. openstackclient/tests/unit/identity/v3/test_catalog.py +3 -3
  194. openstackclient/tests/unit/identity/v3/test_consumer.py +7 -8
  195. openstackclient/tests/unit/identity/v3/test_credential.py +9 -9
  196. openstackclient/tests/unit/identity/v3/test_domain.py +8 -8
  197. openstackclient/tests/unit/identity/v3/test_endpoint.py +13 -13
  198. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +12 -14
  199. openstackclient/tests/unit/identity/v3/test_group.py +12 -12
  200. openstackclient/tests/unit/identity/v3/test_identity_provider.py +8 -8
  201. openstackclient/tests/unit/identity/v3/test_implied_role.py +5 -5
  202. openstackclient/tests/unit/identity/v3/test_limit.py +7 -7
  203. openstackclient/tests/unit/identity/v3/test_mappings.py +7 -7
  204. openstackclient/tests/unit/identity/v3/test_oauth.py +5 -5
  205. openstackclient/tests/unit/identity/v3/test_project.py +16 -16
  206. openstackclient/tests/unit/identity/v3/test_protocol.py +7 -7
  207. openstackclient/tests/unit/identity/v3/test_region.py +7 -7
  208. openstackclient/tests/unit/identity/v3/test_registered_limit.py +12 -13
  209. openstackclient/tests/unit/identity/v3/test_role.py +13 -13
  210. openstackclient/tests/unit/identity/v3/test_role_assignment.py +410 -331
  211. openstackclient/tests/unit/identity/v3/test_service.py +90 -94
  212. openstackclient/tests/unit/identity/v3/test_service_provider.py +7 -7
  213. openstackclient/tests/unit/identity/v3/test_token.py +4 -4
  214. openstackclient/tests/unit/identity/v3/test_trust.py +9 -9
  215. openstackclient/tests/unit/identity/v3/test_unscoped_saml.py +4 -4
  216. openstackclient/tests/unit/identity/v3/test_user.py +299 -327
  217. openstackclient/tests/unit/image/v1/test_image.py +6 -6
  218. openstackclient/tests/unit/image/v2/fakes.py +46 -9
  219. openstackclient/tests/unit/image/v2/test_cache.py +2 -2
  220. openstackclient/tests/unit/image/v2/test_image.py +3 -3
  221. openstackclient/tests/unit/image/v2/test_metadef_objects.py +62 -0
  222. openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +131 -0
  223. openstackclient/tests/unit/integ/base.py +1 -1
  224. openstackclient/tests/unit/integ/cli/test_project.py +4 -4
  225. openstackclient/tests/unit/integ/cli/test_shell.py +7 -7
  226. openstackclient/tests/unit/network/test_common.py +12 -21
  227. openstackclient/tests/unit/network/v2/fakes.py +64 -130
  228. openstackclient/tests/unit/network/v2/test_address_group.py +15 -15
  229. openstackclient/tests/unit/network/v2/test_address_scope.py +13 -13
  230. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +49 -27
  231. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +40 -38
  232. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +15 -15
  233. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +4 -7
  234. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +3 -5
  235. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +11 -11
  236. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -6
  237. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +11 -21
  238. openstackclient/tests/unit/network/v2/test_local_ip.py +7 -7
  239. openstackclient/tests/unit/network/v2/test_local_ip_association.py +3 -5
  240. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -13
  241. openstackclient/tests/unit/network/v2/test_network.py +23 -28
  242. openstackclient/tests/unit/network/v2/test_network_agent.py +17 -21
  243. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +8 -8
  244. openstackclient/tests/unit/network/v2/test_network_compute.py +66 -65
  245. openstackclient/tests/unit/network/v2/test_network_flavor.py +17 -19
  246. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +13 -13
  247. openstackclient/tests/unit/network/v2/test_network_meter.py +11 -11
  248. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +11 -11
  249. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +11 -21
  250. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +51 -77
  251. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +5 -9
  252. openstackclient/tests/unit/network/v2/test_network_rbac.py +12 -12
  253. openstackclient/tests/unit/network/v2/test_network_segment.py +11 -15
  254. openstackclient/tests/unit/network/v2/test_network_segment_range.py +11 -13
  255. openstackclient/tests/unit/network/v2/test_network_service_provider.py +3 -5
  256. openstackclient/tests/unit/network/v2/test_network_trunk.py +11 -11
  257. openstackclient/tests/unit/network/v2/test_port.py +22 -25
  258. openstackclient/tests/unit/network/v2/test_router.py +721 -51
  259. openstackclient/tests/unit/network/v2/test_security_group_compute.py +65 -49
  260. openstackclient/tests/unit/network/v2/test_security_group_network.py +15 -15
  261. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +57 -45
  262. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +11 -19
  263. openstackclient/tests/unit/network/v2/test_subnet.py +29 -25
  264. openstackclient/tests/unit/network/v2/test_subnet_pool.py +15 -15
  265. openstackclient/tests/unit/object/v1/fakes.py +1 -1
  266. openstackclient/tests/unit/object/v1/test_container.py +5 -5
  267. openstackclient/tests/unit/object/v1/test_container_all.py +6 -6
  268. openstackclient/tests/unit/object/v1/test_object.py +3 -3
  269. openstackclient/tests/unit/object/v1/test_object_all.py +5 -5
  270. openstackclient/tests/unit/test_shell.py +5 -5
  271. openstackclient/tests/unit/utils.py +4 -1
  272. openstackclient/tests/unit/volume/test_find_resource.py +2 -2
  273. openstackclient/tests/unit/volume/v1/fakes.py +5 -6
  274. openstackclient/tests/unit/volume/v1/test_volume.py +5 -4
  275. openstackclient/tests/unit/volume/v2/fakes.py +39 -259
  276. openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +5 -5
  277. openstackclient/tests/unit/volume/v2/test_qos_specs.py +9 -9
  278. openstackclient/tests/unit/volume/v2/test_volume.py +21 -87
  279. openstackclient/tests/unit/volume/v2/test_volume_backup.py +10 -368
  280. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +1 -1
  281. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +0 -44
  282. openstackclient/tests/unit/volume/v2/test_volume_type.py +6 -87
  283. openstackclient/tests/unit/volume/v3/fakes.py +505 -22
  284. openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +2 -3
  285. openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +10 -11
  286. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +10 -6
  287. openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +25 -17
  288. openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +6 -32
  289. openstackclient/tests/unit/volume/v3/test_service.py +271 -0
  290. openstackclient/tests/unit/volume/v3/test_volume.py +2177 -33
  291. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +48 -52
  292. openstackclient/tests/unit/volume/v3/test_volume_backup.py +892 -0
  293. openstackclient/tests/unit/volume/v3/test_volume_group.py +19 -20
  294. openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +14 -34
  295. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +13 -16
  296. openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -11
  297. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +161 -0
  298. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +425 -0
  299. openstackclient/tests/unit/volume/v3/test_volume_type.py +1109 -0
  300. openstackclient/volume/v1/qos_specs.py +7 -7
  301. openstackclient/volume/v1/service.py +2 -2
  302. openstackclient/volume/v1/volume.py +12 -12
  303. openstackclient/volume/v1/volume_backup.py +7 -7
  304. openstackclient/volume/v1/volume_snapshot.py +8 -8
  305. openstackclient/volume/v1/volume_transfer_request.py +5 -5
  306. openstackclient/volume/v1/volume_type.py +7 -7
  307. openstackclient/volume/v2/backup_record.py +2 -2
  308. openstackclient/volume/v2/consistency_group.py +7 -9
  309. openstackclient/volume/v2/consistency_group_snapshot.py +4 -12
  310. openstackclient/volume/v2/qos_specs.py +7 -7
  311. openstackclient/volume/v2/service.py +2 -2
  312. openstackclient/volume/v2/volume.py +80 -80
  313. openstackclient/volume/v2/volume_backend.py +2 -2
  314. openstackclient/volume/v2/volume_backup.py +9 -217
  315. openstackclient/volume/v2/volume_host.py +2 -2
  316. openstackclient/volume/v2/volume_snapshot.py +8 -8
  317. openstackclient/volume/v2/volume_transfer_request.py +5 -37
  318. openstackclient/volume/v2/volume_type.py +7 -89
  319. openstackclient/volume/v3/service.py +56 -0
  320. openstackclient/volume/v3/volume.py +971 -0
  321. openstackclient/volume/v3/volume_attachment.py +31 -29
  322. openstackclient/volume/v3/volume_backup.py +670 -0
  323. openstackclient/volume/v3/volume_message.py +1 -1
  324. openstackclient/volume/v3/volume_snapshot.py +97 -0
  325. openstackclient/volume/v3/volume_transfer_request.py +233 -0
  326. openstackclient/volume/v3/volume_type.py +967 -0
  327. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/AUTHORS +6 -0
  328. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/METADATA +4 -4
  329. python_openstackclient-7.1.0.dist-info/RECORD +503 -0
  330. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/entry_points.txt +33 -27
  331. python_openstackclient-7.1.0.dist-info/pbr.json +1 -0
  332. python_openstackclient-6.6.1.dist-info/RECORD +0 -489
  333. python_openstackclient-6.6.1.dist-info/pbr.json +0 -1
  334. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/LICENSE +0 -0
  335. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/WHEEL +0 -0
  336. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,425 @@
1
+ #
2
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
3
+ # not use this file except in compliance with the License. You may obtain
4
+ # a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
10
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
11
+ # License for the specific language governing permissions and limitations
12
+ # under the License.
13
+ #
14
+
15
+ from unittest import mock
16
+ from unittest.mock import call
17
+
18
+ from osc_lib import exceptions
19
+ from osc_lib import utils
20
+
21
+ from openstackclient.tests.unit import utils as test_utils
22
+ from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
23
+ from openstackclient.volume.v3 import volume_transfer_request
24
+
25
+
26
+ class TestTransfer(volume_fakes.TestVolume):
27
+ def setUp(self):
28
+ super().setUp()
29
+
30
+ # Get a shortcut to the TransferManager Mock
31
+ self.transfer_mock = self.volume_client.transfers
32
+ self.transfer_mock.reset_mock()
33
+
34
+ # Get a shortcut to the VolumeManager Mock
35
+ self.volumes_mock = self.volume_client.volumes
36
+ self.volumes_mock.reset_mock()
37
+
38
+
39
+ class TestTransferAccept(TestTransfer):
40
+ columns = (
41
+ 'id',
42
+ 'name',
43
+ 'volume_id',
44
+ )
45
+
46
+ def setUp(self):
47
+ super().setUp()
48
+
49
+ self.volume_transfer = volume_fakes.create_one_transfer()
50
+ self.data = (
51
+ self.volume_transfer.id,
52
+ self.volume_transfer.name,
53
+ self.volume_transfer.volume_id,
54
+ )
55
+
56
+ self.transfer_mock.get.return_value = self.volume_transfer
57
+ self.transfer_mock.accept.return_value = self.volume_transfer
58
+
59
+ # Get the command object to test
60
+ self.cmd = volume_transfer_request.AcceptTransferRequest(
61
+ self.app, None
62
+ )
63
+
64
+ def test_transfer_accept(self):
65
+ arglist = [
66
+ '--auth-key',
67
+ 'key_value',
68
+ self.volume_transfer.id,
69
+ ]
70
+ verifylist = [
71
+ ('transfer_request', self.volume_transfer.id),
72
+ ('auth_key', 'key_value'),
73
+ ]
74
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
75
+
76
+ columns, data = self.cmd.take_action(parsed_args)
77
+
78
+ self.transfer_mock.get.assert_called_once_with(
79
+ self.volume_transfer.id,
80
+ )
81
+ self.transfer_mock.accept.assert_called_once_with(
82
+ self.volume_transfer.id,
83
+ 'key_value',
84
+ )
85
+ self.assertEqual(self.columns, columns)
86
+ self.assertEqual(self.data, data)
87
+
88
+ def test_transfer_accept_no_option(self):
89
+ arglist = [
90
+ self.volume_transfer.id,
91
+ ]
92
+ verifylist = [
93
+ ('transfer_request', self.volume_transfer.id),
94
+ ]
95
+
96
+ self.assertRaises(
97
+ test_utils.ParserException,
98
+ self.check_parser,
99
+ self.cmd,
100
+ arglist,
101
+ verifylist,
102
+ )
103
+
104
+
105
+ class TestTransferCreate(TestTransfer):
106
+ volume = volume_fakes.create_one_volume()
107
+
108
+ columns = (
109
+ 'auth_key',
110
+ 'created_at',
111
+ 'id',
112
+ 'name',
113
+ 'volume_id',
114
+ )
115
+
116
+ def setUp(self):
117
+ super().setUp()
118
+
119
+ self.volume_transfer = volume_fakes.create_one_transfer(
120
+ attrs={
121
+ 'volume_id': self.volume.id,
122
+ 'auth_key': 'key',
123
+ 'created_at': 'time',
124
+ },
125
+ )
126
+ self.data = (
127
+ self.volume_transfer.auth_key,
128
+ self.volume_transfer.created_at,
129
+ self.volume_transfer.id,
130
+ self.volume_transfer.name,
131
+ self.volume_transfer.volume_id,
132
+ )
133
+
134
+ self.transfer_mock.create.return_value = self.volume_transfer
135
+ self.volumes_mock.get.return_value = self.volume
136
+
137
+ # Get the command object to test
138
+ self.cmd = volume_transfer_request.CreateTransferRequest(
139
+ self.app, None
140
+ )
141
+
142
+ def test_transfer_create_without_name(self):
143
+ arglist = [
144
+ self.volume.id,
145
+ ]
146
+ verifylist = [
147
+ ('volume', self.volume.id),
148
+ ]
149
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
150
+
151
+ columns, data = self.cmd.take_action(parsed_args)
152
+
153
+ self.transfer_mock.create.assert_called_once_with(self.volume.id, None)
154
+ self.assertEqual(self.columns, columns)
155
+ self.assertEqual(self.data, data)
156
+
157
+ def test_transfer_create_with_name(self):
158
+ arglist = [
159
+ '--name',
160
+ self.volume_transfer.name,
161
+ self.volume.id,
162
+ ]
163
+ verifylist = [
164
+ ('name', self.volume_transfer.name),
165
+ ('volume', self.volume.id),
166
+ ]
167
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
168
+
169
+ columns, data = self.cmd.take_action(parsed_args)
170
+
171
+ self.transfer_mock.create.assert_called_once_with(
172
+ self.volume.id,
173
+ self.volume_transfer.name,
174
+ )
175
+ self.assertEqual(self.columns, columns)
176
+ self.assertEqual(self.data, data)
177
+
178
+ def test_transfer_create_with_no_snapshots(self):
179
+ self.set_volume_api_version('3.55')
180
+
181
+ arglist = [
182
+ '--no-snapshots',
183
+ self.volume.id,
184
+ ]
185
+ verifylist = [
186
+ ('name', None),
187
+ ('snapshots', False),
188
+ ('volume', self.volume.id),
189
+ ]
190
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
191
+
192
+ columns, data = self.cmd.take_action(parsed_args)
193
+
194
+ self.transfer_mock.create.assert_called_once_with(
195
+ self.volume.id, None, no_snapshots=True
196
+ )
197
+ self.assertEqual(self.columns, columns)
198
+ self.assertEqual(self.data, data)
199
+
200
+ def test_transfer_create_pre_v355(self):
201
+ self.set_volume_api_version('3.54')
202
+
203
+ arglist = [
204
+ '--no-snapshots',
205
+ self.volume.id,
206
+ ]
207
+ verifylist = [
208
+ ('name', None),
209
+ ('snapshots', False),
210
+ ('volume', self.volume.id),
211
+ ]
212
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
213
+
214
+ exc = self.assertRaises(
215
+ exceptions.CommandError, self.cmd.take_action, parsed_args
216
+ )
217
+ self.assertIn(
218
+ '--os-volume-api-version 3.55 or greater is required', str(exc)
219
+ )
220
+
221
+
222
+ class TestTransferDelete(TestTransfer):
223
+ volume_transfers = volume_fakes.create_transfers(count=2)
224
+
225
+ def setUp(self):
226
+ super().setUp()
227
+
228
+ self.transfer_mock.get = volume_fakes.get_transfers(
229
+ self.volume_transfers,
230
+ )
231
+ self.transfer_mock.delete.return_value = None
232
+
233
+ # Get the command object to mock
234
+ self.cmd = volume_transfer_request.DeleteTransferRequest(
235
+ self.app, None
236
+ )
237
+
238
+ def test_transfer_delete(self):
239
+ arglist = [self.volume_transfers[0].id]
240
+ verifylist = [("transfer_request", [self.volume_transfers[0].id])]
241
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
242
+
243
+ result = self.cmd.take_action(parsed_args)
244
+
245
+ self.transfer_mock.delete.assert_called_with(
246
+ self.volume_transfers[0].id
247
+ )
248
+ self.assertIsNone(result)
249
+
250
+ def test_delete_multiple_transfers(self):
251
+ arglist = []
252
+ for v in self.volume_transfers:
253
+ arglist.append(v.id)
254
+ verifylist = [
255
+ ('transfer_request', arglist),
256
+ ]
257
+
258
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
259
+ result = self.cmd.take_action(parsed_args)
260
+
261
+ calls = []
262
+ for v in self.volume_transfers:
263
+ calls.append(call(v.id))
264
+ self.transfer_mock.delete.assert_has_calls(calls)
265
+ self.assertIsNone(result)
266
+
267
+ def test_delete_multiple_transfers_with_exception(self):
268
+ arglist = [
269
+ self.volume_transfers[0].id,
270
+ 'unexist_transfer',
271
+ ]
272
+ verifylist = [
273
+ ('transfer_request', arglist),
274
+ ]
275
+
276
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
277
+
278
+ find_mock_result = [self.volume_transfers[0], exceptions.CommandError]
279
+ with mock.patch.object(
280
+ utils, 'find_resource', side_effect=find_mock_result
281
+ ) as find_mock:
282
+ try:
283
+ self.cmd.take_action(parsed_args)
284
+ self.fail('CommandError should be raised.')
285
+ except exceptions.CommandError as e:
286
+ self.assertEqual(
287
+ '1 of 2 volume transfer requests failed ' 'to delete',
288
+ str(e),
289
+ )
290
+
291
+ find_mock.assert_any_call(
292
+ self.transfer_mock, self.volume_transfers[0].id
293
+ )
294
+ find_mock.assert_any_call(self.transfer_mock, 'unexist_transfer')
295
+
296
+ self.assertEqual(2, find_mock.call_count)
297
+ self.transfer_mock.delete.assert_called_once_with(
298
+ self.volume_transfers[0].id,
299
+ )
300
+
301
+
302
+ class TestTransferList(TestTransfer):
303
+ # The Transfers to be listed
304
+ volume_transfers = volume_fakes.create_one_transfer()
305
+
306
+ def setUp(self):
307
+ super().setUp()
308
+
309
+ self.transfer_mock.list.return_value = [self.volume_transfers]
310
+
311
+ # Get the command object to test
312
+ self.cmd = volume_transfer_request.ListTransferRequest(self.app, None)
313
+
314
+ def test_transfer_list_without_argument(self):
315
+ arglist = []
316
+ verifylist = []
317
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
318
+
319
+ # In base command class Lister in cliff, abstract method take_action()
320
+ # returns a tuple containing the column names and an iterable
321
+ # containing the data to be listed.
322
+ columns, data = self.cmd.take_action(parsed_args)
323
+
324
+ expected_columns = [
325
+ 'ID',
326
+ 'Name',
327
+ 'Volume',
328
+ ]
329
+
330
+ # confirming if all expected columns are present in the result.
331
+ self.assertEqual(expected_columns, columns)
332
+
333
+ datalist = (
334
+ (
335
+ self.volume_transfers.id,
336
+ self.volume_transfers.name,
337
+ self.volume_transfers.volume_id,
338
+ ),
339
+ )
340
+
341
+ # confirming if all expected values are present in the result.
342
+ self.assertEqual(datalist, tuple(data))
343
+
344
+ # checking if proper call was made to list volume_transfers
345
+ self.transfer_mock.list.assert_called_with(
346
+ detailed=True, search_opts={'all_tenants': 0}
347
+ )
348
+
349
+ def test_transfer_list_with_argument(self):
350
+ arglist = ["--all-projects"]
351
+ verifylist = [("all_projects", True)]
352
+
353
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
354
+
355
+ # In base command class Lister in cliff, abstract method take_action()
356
+ # returns a tuple containing the column names and an iterable
357
+ # containing the data to be listed.
358
+ columns, data = self.cmd.take_action(parsed_args)
359
+
360
+ expected_columns = [
361
+ 'ID',
362
+ 'Name',
363
+ 'Volume',
364
+ ]
365
+
366
+ # confirming if all expected columns are present in the result.
367
+ self.assertEqual(expected_columns, columns)
368
+
369
+ datalist = (
370
+ (
371
+ self.volume_transfers.id,
372
+ self.volume_transfers.name,
373
+ self.volume_transfers.volume_id,
374
+ ),
375
+ )
376
+
377
+ # confirming if all expected values are present in the result.
378
+ self.assertEqual(datalist, tuple(data))
379
+
380
+ # checking if proper call was made to list volume_transfers
381
+ self.transfer_mock.list.assert_called_with(
382
+ detailed=True, search_opts={'all_tenants': 1}
383
+ )
384
+
385
+
386
+ class TestTransferShow(TestTransfer):
387
+ columns = (
388
+ 'created_at',
389
+ 'id',
390
+ 'name',
391
+ 'volume_id',
392
+ )
393
+
394
+ def setUp(self):
395
+ super().setUp()
396
+
397
+ self.volume_transfer = volume_fakes.create_one_transfer(
398
+ attrs={'created_at': 'time'},
399
+ )
400
+ self.data = (
401
+ self.volume_transfer.created_at,
402
+ self.volume_transfer.id,
403
+ self.volume_transfer.name,
404
+ self.volume_transfer.volume_id,
405
+ )
406
+
407
+ self.transfer_mock.get.return_value = self.volume_transfer
408
+
409
+ # Get the command object to test
410
+ self.cmd = volume_transfer_request.ShowTransferRequest(self.app, None)
411
+
412
+ def test_transfer_show(self):
413
+ arglist = [
414
+ self.volume_transfer.id,
415
+ ]
416
+ verifylist = [
417
+ ('transfer_request', self.volume_transfer.id),
418
+ ]
419
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
420
+
421
+ columns, data = self.cmd.take_action(parsed_args)
422
+
423
+ self.transfer_mock.get.assert_called_once_with(self.volume_transfer.id)
424
+ self.assertEqual(self.columns, columns)
425
+ self.assertEqual(self.data, data)