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
@@ -10,16 +10,23 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
+ import copy
13
14
  import random
15
+ import re
14
16
  from unittest import mock
15
17
  import uuid
16
18
 
17
19
  from cinderclient import api_versions
20
+ from keystoneauth1 import discover
18
21
  from openstack.block_storage.v3 import _proxy
19
22
  from openstack.block_storage.v3 import availability_zone as _availability_zone
23
+ from openstack.block_storage.v3 import backup as _backup
20
24
  from openstack.block_storage.v3 import extension as _extension
25
+ from openstack.block_storage.v3 import limits as _limits
21
26
  from openstack.block_storage.v3 import resource_filter as _filters
22
27
  from openstack.block_storage.v3 import volume as _volume
28
+ from openstack.compute.v2 import _proxy as _compute_proxy
29
+ from openstack.image.v2 import _proxy as _image_proxy
23
30
 
24
31
  from openstackclient.tests.unit import fakes
25
32
  from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
@@ -33,10 +40,14 @@ class FakeVolumeClient:
33
40
  self.management_url = kwargs['endpoint']
34
41
  self.api_version = api_versions.APIVersion('3.0')
35
42
 
36
- self.availability_zones = mock.Mock()
37
- self.availability_zones.resource_class = fakes.FakeResource(None, {})
38
43
  self.attachments = mock.Mock()
39
44
  self.attachments.resource_class = fakes.FakeResource(None, {})
45
+ self.availability_zones = mock.Mock()
46
+ self.availability_zones.resource_class = fakes.FakeResource(None, {})
47
+ self.backups = mock.Mock()
48
+ self.backups.resource_class = fakes.FakeResource(None, {})
49
+ self.consistencygroups = mock.Mock()
50
+ self.consistencygroups.resource_class = fakes.FakeResource(None, {})
40
51
  self.clusters = mock.Mock()
41
52
  self.clusters.resource_class = fakes.FakeResource(None, {})
42
53
  self.groups = mock.Mock()
@@ -47,18 +58,24 @@ class FakeVolumeClient:
47
58
  self.group_types.resource_class = fakes.FakeResource(None, {})
48
59
  self.messages = mock.Mock()
49
60
  self.messages.resource_class = fakes.FakeResource(None, {})
50
- self.quota_classes = mock.Mock()
51
- self.quota_classes.resource_class = fakes.FakeResource(None, {})
52
- self.quotas = mock.Mock()
53
- self.quotas.resource_class = fakes.FakeResource(None, {})
54
61
  self.resource_filters = mock.Mock()
55
62
  self.resource_filters.resource_class = fakes.FakeResource(None, {})
56
- self.volumes = mock.Mock()
57
- self.volumes.resource_class = fakes.FakeResource(None, {})
63
+ self.restores = mock.Mock()
64
+ self.restores.resource_class = fakes.FakeResource(None, {})
65
+ self.transfers = mock.Mock()
66
+ self.transfers.resource_class = fakes.FakeResource(None, {})
67
+ self.volume_encryption_types = mock.Mock()
68
+ self.volume_encryption_types.resource_class = fakes.FakeResource(
69
+ None, {}
70
+ )
58
71
  self.volume_snapshots = mock.Mock()
59
72
  self.volume_snapshots.resource_class = fakes.FakeResource(None, {})
73
+ self.volume_type_access = mock.Mock()
74
+ self.volume_type_access.resource_class = fakes.FakeResource(None, {})
60
75
  self.volume_types = mock.Mock()
61
76
  self.volume_types.resource_class = fakes.FakeResource(None, {})
77
+ self.volumes = mock.Mock()
78
+ self.volumes.resource_class = fakes.FakeResource(None, {})
62
79
  self.services = mock.Mock()
63
80
  self.services.resource_class = fakes.FakeResource(None, {})
64
81
  self.workers = mock.Mock()
@@ -80,32 +97,56 @@ class FakeClientMixin:
80
97
  spec=_proxy.Proxy,
81
98
  )
82
99
  self.volume_sdk_client = self.app.client_manager.sdk_connection.volume
100
+ self.set_volume_api_version() # default to the lowest
101
+
102
+ def set_volume_api_version(self, version: str = '3.0'):
103
+ """Set a fake block storage API version.
83
104
 
105
+ :param version: The fake microversion to "support". This should be a
106
+ string of format '3.xx'.
107
+ :returns: None
108
+ """
109
+ assert re.match(r'3.\d+', version)
84
110
 
85
- class TestVolume(FakeClientMixin, utils.TestCommand):
111
+ self.volume_client.api_version = api_versions.APIVersion(version)
112
+
113
+ self.volume_sdk_client.default_microversion = version
114
+ self.volume_sdk_client.get_endpoint_data.return_value = (
115
+ discover.EndpointData(
116
+ min_microversion='3.0', # cinder has not bumped this yet
117
+ max_microversion=version,
118
+ )
119
+ )
120
+
121
+
122
+ class TestVolume(
123
+ identity_fakes.FakeClientMixin,
124
+ FakeClientMixin,
125
+ utils.TestCommand,
126
+ ):
86
127
  def setUp(self):
87
128
  super().setUp()
88
129
 
89
- self.app.client_manager.identity = identity_fakes.FakeIdentityv3Client(
90
- endpoint=fakes.AUTH_URL, token=fakes.AUTH_TOKEN
130
+ # avoid circular imports by defining this manually rather than using
131
+ # openstackclient.tests.unit.compute.v2.fakes.FakeClientMixin
132
+ # TODO(stephenfin): Rename to 'compute_client' once all commands are
133
+ # migrated to SDK
134
+ self.app.client_manager.sdk_connection.compute = mock.Mock(
135
+ _compute_proxy.Proxy
91
136
  )
92
-
93
- # avoid circular imports
94
- from openstackclient.tests.unit.compute.v2 import (
95
- fakes as compute_fakes,
137
+ self.compute_sdk_client = (
138
+ self.app.client_manager.sdk_connection.compute
96
139
  )
97
140
 
98
- self.app.client_manager.compute = compute_fakes.FakeComputev2Client(
99
- endpoint=fakes.AUTH_URL,
100
- token=fakes.AUTH_TOKEN,
101
- )
102
- self.compute_client = self.app.client_manager.compute
141
+ # avoid circular imports by defining this manually rather than using
142
+ # openstackclient.tests.unit.image.v2.fakes.FakeClientMixin
143
+ self.app.client_manager.image = mock.Mock(spec=_image_proxy.Proxy)
144
+ self.image_client = self.app.client_manager.image
103
145
 
104
146
 
105
147
  # TODO(stephenfin): Check if the responses are actually the same
106
148
  create_one_snapshot = volume_v2_fakes.create_one_snapshot
107
- create_one_volume = volume_v2_fakes.create_one_volume
108
- create_one_volume_type = volume_v2_fakes.create_one_volume_type
149
+ create_one_service = volume_v2_fakes.create_one_service
109
150
 
110
151
 
111
152
  def create_one_availability_zone(attrs=None):
@@ -148,6 +189,54 @@ def create_availability_zones(attrs=None, count=2):
148
189
  return availability_zones
149
190
 
150
191
 
192
+ def create_one_consistency_group(attrs=None):
193
+ """Create a fake consistency group.
194
+
195
+ :param dict attrs:
196
+ A dictionary with all attributes
197
+ :return:
198
+ A FakeResource object with id, name, description, etc.
199
+ """
200
+ attrs = attrs or {}
201
+
202
+ # Set default attributes.
203
+ consistency_group_info = {
204
+ "id": 'backup-id-' + uuid.uuid4().hex,
205
+ "name": 'backup-name-' + uuid.uuid4().hex,
206
+ "description": 'description-' + uuid.uuid4().hex,
207
+ "status": "error",
208
+ "availability_zone": 'zone' + uuid.uuid4().hex,
209
+ "created_at": 'time-' + uuid.uuid4().hex,
210
+ "volume_types": ['volume-type1'],
211
+ }
212
+
213
+ # Overwrite default attributes.
214
+ consistency_group_info.update(attrs)
215
+
216
+ consistency_group = fakes.FakeResource(
217
+ info=copy.deepcopy(consistency_group_info), loaded=True
218
+ )
219
+ return consistency_group
220
+
221
+
222
+ def create_consistency_groups(attrs=None, count=2):
223
+ """Create multiple fake consistency groups.
224
+
225
+ :param dict attrs:
226
+ A dictionary with all attributes
227
+ :param int count:
228
+ The number of consistency groups to fake
229
+ :return:
230
+ A list of FakeResource objects faking the consistency groups
231
+ """
232
+ consistency_groups = []
233
+ for i in range(0, count):
234
+ consistency_group = create_one_consistency_group(attrs)
235
+ consistency_groups.append(consistency_group)
236
+
237
+ return consistency_groups
238
+
239
+
151
240
  def create_one_extension(attrs=None):
152
241
  """Create a fake extension.
153
242
 
@@ -179,6 +268,85 @@ def create_one_extension(attrs=None):
179
268
  return extension
180
269
 
181
270
 
271
+ def create_one_backup(attrs=None):
272
+ """Create a fake backup.
273
+
274
+ :param dict attrs:
275
+ A dictionary with all attributes
276
+ :return: A fake
277
+ openstack.block_storage.v3.backup.Backup object
278
+ """
279
+ attrs = attrs or {}
280
+
281
+ # Set default attributes.
282
+ backup_info = {
283
+ "availability_zone": 'zone' + uuid.uuid4().hex,
284
+ "container": 'container-' + uuid.uuid4().hex,
285
+ "created_at": 'time-' + uuid.uuid4().hex,
286
+ "data_timestamp": 'time-' + uuid.uuid4().hex,
287
+ "description": 'description-' + uuid.uuid4().hex,
288
+ "encryption_key_id": None,
289
+ "fail_reason": "Service not found for creating backup.",
290
+ "has_dependent_backups": False,
291
+ "id": 'backup-id-' + uuid.uuid4().hex,
292
+ "is_incremental": False,
293
+ "metadata": {},
294
+ "name": 'backup-name-' + uuid.uuid4().hex,
295
+ "object_count": None,
296
+ "project_id": uuid.uuid4().hex,
297
+ "size": random.randint(1, 20),
298
+ "snapshot_id": 'snapshot-id' + uuid.uuid4().hex,
299
+ "status": "error",
300
+ "updated_at": 'time-' + uuid.uuid4().hex,
301
+ "user_id": uuid.uuid4().hex,
302
+ "volume_id": 'volume-id-' + uuid.uuid4().hex,
303
+ }
304
+
305
+ # Overwrite default attributes.
306
+ backup_info.update(attrs)
307
+
308
+ backup = _backup.Backup(**backup_info)
309
+ return backup
310
+
311
+
312
+ def create_backups(attrs=None, count=2):
313
+ """Create multiple fake backups.
314
+
315
+ :param dict attrs:
316
+ A dictionary with all attributes
317
+ :param int count:
318
+ The number of backups to fake
319
+ :return: A list of fake
320
+ openstack.block_storage.v3.backup.Backup objects
321
+ """
322
+ backups = []
323
+ for i in range(0, count):
324
+ backup = create_one_backup(attrs)
325
+ backups.append(backup)
326
+
327
+ return backups
328
+
329
+
330
+ def get_backups(backups=None, count=2):
331
+ """Get an iterable MagicMock object with a list of faked backups.
332
+
333
+ If backups list is provided, then initialize the Mock object with the
334
+ list. Otherwise create one.
335
+
336
+ :param List backups:
337
+ A list of FakeResource objects faking backups
338
+ :param Integer count:
339
+ The number of backups to be faked
340
+ :return
341
+ An iterable Mock object with side_effect set to a list of faked
342
+ backups
343
+ """
344
+ if backups is None:
345
+ backups = create_backups(count)
346
+
347
+ return mock.Mock(side_effect=backups)
348
+
349
+
182
350
  def create_one_cluster(attrs=None):
183
351
  """Create a fake service cluster.
184
352
 
@@ -224,6 +392,86 @@ def create_clusters(attrs=None, count=2):
224
392
  return clusters
225
393
 
226
394
 
395
+ def create_one_encryption_volume_type(attrs=None):
396
+ """Create a fake encryption volume type.
397
+
398
+ :param dict attrs:
399
+ A dictionary with all attributes
400
+ :return:
401
+ A FakeResource object with volume_type_id etc.
402
+ """
403
+ attrs = attrs or {}
404
+
405
+ # Set default attributes.
406
+ encryption_info = {
407
+ "volume_type_id": 'type-id-' + uuid.uuid4().hex,
408
+ 'provider': 'LuksEncryptor',
409
+ 'cipher': None,
410
+ 'key_size': None,
411
+ 'control_location': 'front-end',
412
+ }
413
+
414
+ # Overwrite default attributes.
415
+ encryption_info.update(attrs)
416
+
417
+ encryption_type = fakes.FakeResource(
418
+ info=copy.deepcopy(encryption_info), loaded=True
419
+ )
420
+ return encryption_type
421
+
422
+
423
+ def create_limits(attrs=None):
424
+ """Create a fake limits object."""
425
+ attrs = attrs or {}
426
+
427
+ limits_attrs = {
428
+ 'absolute': {
429
+ 'totalSnapshotsUsed': 1,
430
+ 'maxTotalBackups': 10,
431
+ 'maxTotalVolumeGigabytes': 1000,
432
+ 'maxTotalSnapshots': 10,
433
+ 'maxTotalBackupGigabytes': 1000,
434
+ 'totalBackupGigabytesUsed': 0,
435
+ 'maxTotalVolumes': 10,
436
+ 'totalVolumesUsed': 4,
437
+ 'totalBackupsUsed': 0,
438
+ 'totalGigabytesUsed': 35,
439
+ },
440
+ 'rate': [
441
+ {
442
+ "uri": "*",
443
+ "limit": [
444
+ {
445
+ "value": 10,
446
+ "verb": "POST",
447
+ "remaining": 2,
448
+ "unit": "MINUTE",
449
+ "next-available": "2011-12-15T22:42:45Z",
450
+ },
451
+ {
452
+ "value": 10,
453
+ "verb": "PUT",
454
+ "remaining": 2,
455
+ "unit": "MINUTE",
456
+ "next-available": "2011-12-15T22:42:45Z",
457
+ },
458
+ {
459
+ "value": 100,
460
+ "verb": "DELETE",
461
+ "remaining": 100,
462
+ "unit": "MINUTE",
463
+ "next-available": "2011-12-15T22:42:45Z",
464
+ },
465
+ ],
466
+ }
467
+ ],
468
+ }
469
+ limits_attrs.update(attrs)
470
+
471
+ limits = _limits.Limit(**limits_attrs)
472
+ return limits
473
+
474
+
227
475
  def create_one_resource_filter(attrs=None):
228
476
  """Create a fake resource filter.
229
477
 
@@ -265,6 +513,172 @@ def create_resource_filters(attrs=None, count=2):
265
513
  return resource_filters
266
514
 
267
515
 
516
+ def create_one_transfer(attrs=None):
517
+ """Create a fake transfer.
518
+
519
+ :param dict attrs:
520
+ A dictionary with all attributes of Transfer Request
521
+ :return:
522
+ A FakeResource object with volume_id, name, id.
523
+ """
524
+ # Set default attribute
525
+ transfer_info = {
526
+ 'volume_id': 'volume-id-' + uuid.uuid4().hex,
527
+ 'name': 'fake_transfer_name',
528
+ 'id': 'id-' + uuid.uuid4().hex,
529
+ 'links': 'links-' + uuid.uuid4().hex,
530
+ }
531
+
532
+ # Overwrite default attributes if there are some attributes set
533
+ attrs = attrs or {}
534
+
535
+ transfer_info.update(attrs)
536
+
537
+ transfer = fakes.FakeResource(None, transfer_info, loaded=True)
538
+
539
+ return transfer
540
+
541
+
542
+ def create_transfers(attrs=None, count=2):
543
+ """Create multiple fake transfers.
544
+
545
+ :param dict attrs:
546
+ A dictionary with all attributes of transfer
547
+ :param Integer count:
548
+ The number of transfers to be faked
549
+ :return:
550
+ A list of FakeResource objects
551
+ """
552
+ transfers = []
553
+ for n in range(0, count):
554
+ transfers.append(create_one_transfer(attrs))
555
+
556
+ return transfers
557
+
558
+
559
+ def get_transfers(transfers=None, count=2):
560
+ """Get an iterable MagicMock object with a list of faked transfers.
561
+
562
+ If transfers list is provided, then initialize the Mock object with the
563
+ list. Otherwise create one.
564
+
565
+ :param List transfers:
566
+ A list of FakeResource objects faking transfers
567
+ :param Integer count:
568
+ The number of transfers to be faked
569
+ :return
570
+ An iterable Mock object with side_effect set to a list of faked
571
+ transfers
572
+ """
573
+ if transfers is None:
574
+ transfers = create_transfers(count)
575
+
576
+ return mock.Mock(side_effect=transfers)
577
+
578
+
579
+ def create_one_type_access(attrs=None):
580
+ """Create a fake volume type access for project.
581
+
582
+ :param dict attrs:
583
+ A dictionary with all attributes
584
+ :return:
585
+ A FakeResource object, with Volume_type_ID and Project_ID.
586
+ """
587
+ if attrs is None:
588
+ attrs = {}
589
+
590
+ # Set default attributes.
591
+ type_access_attrs = {
592
+ 'volume_type_id': 'volume-type-id-' + uuid.uuid4().hex,
593
+ 'project_id': 'project-id-' + uuid.uuid4().hex,
594
+ }
595
+
596
+ # Overwrite default attributes.
597
+ type_access_attrs.update(attrs)
598
+
599
+ type_access = fakes.FakeResource(None, type_access_attrs, loaded=True)
600
+
601
+ return type_access
602
+
603
+
604
+ def create_one_volume(attrs=None):
605
+ """Create a fake volume.
606
+
607
+ :param dict attrs:
608
+ A dictionary with all attributes of volume
609
+ :return:
610
+ A FakeResource object with id, name, status, etc.
611
+ """
612
+ attrs = attrs or {}
613
+
614
+ # Set default attribute
615
+ volume_info = {
616
+ 'id': 'volume-id' + uuid.uuid4().hex,
617
+ 'name': 'volume-name' + uuid.uuid4().hex,
618
+ 'description': 'description' + uuid.uuid4().hex,
619
+ 'status': random.choice(['available', 'in_use']),
620
+ 'size': random.randint(1, 20),
621
+ 'volume_type': random.choice(['fake_lvmdriver-1', 'fake_lvmdriver-2']),
622
+ 'bootable': random.randint(0, 1),
623
+ 'metadata': {
624
+ 'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex,
625
+ 'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex,
626
+ 'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex,
627
+ },
628
+ 'snapshot_id': random.randint(1, 5),
629
+ 'availability_zone': 'zone' + uuid.uuid4().hex,
630
+ 'attachments': [
631
+ {
632
+ 'device': '/dev/' + uuid.uuid4().hex,
633
+ 'server_id': uuid.uuid4().hex,
634
+ },
635
+ ],
636
+ }
637
+
638
+ # Overwrite default attributes if there are some attributes set
639
+ volume_info.update(attrs)
640
+
641
+ volume = fakes.FakeResource(None, volume_info, loaded=True)
642
+ return volume
643
+
644
+
645
+ def create_volumes(attrs=None, count=2):
646
+ """Create multiple fake volumes.
647
+
648
+ :param dict attrs:
649
+ A dictionary with all attributes of volume
650
+ :param Integer count:
651
+ The number of volumes to be faked
652
+ :return:
653
+ A list of FakeResource objects
654
+ """
655
+ volumes = []
656
+ for n in range(0, count):
657
+ volumes.append(create_one_volume(attrs))
658
+
659
+ return volumes
660
+
661
+
662
+ def get_volumes(volumes=None, count=2):
663
+ """Get an iterable MagicMock object with a list of faked volumes.
664
+
665
+ If volumes list is provided, then initialize the Mock object with the
666
+ list. Otherwise create one.
667
+
668
+ :param List volumes:
669
+ A list of FakeResource objects faking volumes
670
+ :param Integer count:
671
+ The number of volumes to be faked
672
+ :return
673
+ An iterable Mock object with side_effect set to a list of faked
674
+ volumes
675
+ """
676
+ if volumes is None:
677
+ volumes = create_volumes(count)
678
+
679
+ return mock.Mock(side_effect=volumes)
680
+
681
+
268
682
  def create_one_sdk_volume(attrs=None):
269
683
  """Create a fake volume.
270
684
 
@@ -603,6 +1017,75 @@ def get_volume_attachments(attachments=None, count=2):
603
1017
  return mock.Mock(side_effect=attachments)
604
1018
 
605
1019
 
1020
+ def create_one_volume_type(attrs=None, methods=None):
1021
+ """Create a fake volume type.
1022
+
1023
+ :param dict attrs:
1024
+ A dictionary with all attributes
1025
+ :param dict methods:
1026
+ A dictionary with all methods
1027
+ :return:
1028
+ A FakeResource object with id, name, description, etc.
1029
+ """
1030
+ attrs = attrs or {}
1031
+ methods = methods or {}
1032
+
1033
+ # Set default attributes.
1034
+ volume_type_info = {
1035
+ "id": 'type-id-' + uuid.uuid4().hex,
1036
+ "name": 'type-name-' + uuid.uuid4().hex,
1037
+ "description": 'type-description-' + uuid.uuid4().hex,
1038
+ "extra_specs": {"foo": "bar"},
1039
+ "is_public": True,
1040
+ }
1041
+
1042
+ # Overwrite default attributes.
1043
+ volume_type_info.update(attrs)
1044
+
1045
+ volume_type = fakes.FakeResource(
1046
+ info=copy.deepcopy(volume_type_info), methods=methods, loaded=True
1047
+ )
1048
+ return volume_type
1049
+
1050
+
1051
+ def create_volume_types(attrs=None, count=2):
1052
+ """Create multiple fake volume_types.
1053
+
1054
+ :param dict attrs:
1055
+ A dictionary with all attributes
1056
+ :param int count:
1057
+ The number of types to fake
1058
+ :return:
1059
+ A list of FakeResource objects faking the types
1060
+ """
1061
+ volume_types = []
1062
+ for i in range(0, count):
1063
+ volume_type = create_one_volume_type(attrs)
1064
+ volume_types.append(volume_type)
1065
+
1066
+ return volume_types
1067
+
1068
+
1069
+ def get_volume_types(volume_types=None, count=2):
1070
+ """Get an iterable MagicMock object with a list of faked volume types.
1071
+
1072
+ If volume_types list is provided, then initialize the Mock object with
1073
+ the list. Otherwise create one.
1074
+
1075
+ :param List volume_types:
1076
+ A list of FakeResource objects faking volume types
1077
+ :param Integer count:
1078
+ The number of volume types to be faked
1079
+ :return
1080
+ An iterable Mock object with side_effect set to a list of faked
1081
+ volume types
1082
+ """
1083
+ if volume_types is None:
1084
+ volume_types = create_volume_types(count)
1085
+
1086
+ return mock.Mock(side_effect=volume_types)
1087
+
1088
+
606
1089
  def create_service_log_level_entry(attrs=None):
607
1090
  service_log_level_info = {
608
1091
  'host': 'host_test',
@@ -12,7 +12,6 @@
12
12
 
13
13
  import uuid
14
14
 
15
- from cinderclient import api_versions
16
15
  from osc_lib import exceptions
17
16
 
18
17
  from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
@@ -40,7 +39,7 @@ class TestBlockStorageCleanup(TestBlockStorage):
40
39
  self.cmd = block_storage_cleanup.BlockStorageCleanup(self.app, None)
41
40
 
42
41
  def test_cleanup(self):
43
- self.volume_client.api_version = api_versions.APIVersion('3.24')
42
+ self.set_volume_api_version('3.24')
44
43
 
45
44
  arglist = []
46
45
  verifylist = [
@@ -96,7 +95,7 @@ class TestBlockStorageCleanup(TestBlockStorage):
96
95
  )
97
96
 
98
97
  def test_cleanup_with_args(self):
99
- self.volume_client.api_version = api_versions.APIVersion('3.24')
98
+ self.set_volume_api_version('3.24')
100
99
 
101
100
  fake_cluster = 'fake-cluster'
102
101
  fake_host = 'fake-host'