python-openstackclient 8.2.0__py3-none-any.whl → 9.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 (233) hide show
  1. openstackclient/api/object_store_v1.py +4 -1
  2. openstackclient/command.py +27 -0
  3. openstackclient/common/availability_zone.py +1 -1
  4. openstackclient/common/clientmanager.py +59 -21
  5. openstackclient/common/configuration.py +1 -1
  6. openstackclient/common/extension.py +1 -1
  7. openstackclient/common/limits.py +1 -1
  8. openstackclient/common/module.py +5 -3
  9. openstackclient/common/project_cleanup.py +10 -8
  10. openstackclient/common/quota.py +54 -23
  11. openstackclient/common/versions.py +1 -2
  12. openstackclient/compute/v2/agent.py +1 -1
  13. openstackclient/compute/v2/aggregate.py +6 -5
  14. openstackclient/compute/v2/console.py +5 -3
  15. openstackclient/compute/v2/console_connection.py +1 -1
  16. openstackclient/compute/v2/flavor.py +1 -1
  17. openstackclient/compute/v2/host.py +1 -1
  18. openstackclient/compute/v2/hypervisor.py +1 -1
  19. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  20. openstackclient/compute/v2/keypair.py +1 -1
  21. openstackclient/compute/v2/server.py +78 -29
  22. openstackclient/compute/v2/server_backup.py +1 -1
  23. openstackclient/compute/v2/server_event.py +1 -1
  24. openstackclient/compute/v2/server_group.py +4 -2
  25. openstackclient/compute/v2/server_image.py +1 -1
  26. openstackclient/compute/v2/server_migration.py +1 -1
  27. openstackclient/compute/v2/server_volume.py +1 -1
  28. openstackclient/compute/v2/service.py +1 -1
  29. openstackclient/compute/v2/usage.py +6 -4
  30. openstackclient/identity/common.py +33 -1
  31. openstackclient/identity/v2_0/catalog.py +3 -2
  32. openstackclient/identity/v2_0/ec2creds.py +1 -1
  33. openstackclient/identity/v2_0/endpoint.py +1 -1
  34. openstackclient/identity/v2_0/project.py +17 -7
  35. openstackclient/identity/v2_0/role.py +1 -1
  36. openstackclient/identity/v2_0/role_assignment.py +3 -3
  37. openstackclient/identity/v2_0/service.py +4 -2
  38. openstackclient/identity/v2_0/token.py +1 -1
  39. openstackclient/identity/v2_0/user.py +2 -2
  40. openstackclient/identity/v3/access_rule.py +16 -4
  41. openstackclient/identity/v3/application_credential.py +30 -10
  42. openstackclient/identity/v3/catalog.py +3 -3
  43. openstackclient/identity/v3/consumer.py +1 -1
  44. openstackclient/identity/v3/credential.py +1 -1
  45. openstackclient/identity/v3/domain.py +10 -4
  46. openstackclient/identity/v3/ec2creds.py +1 -1
  47. openstackclient/identity/v3/endpoint.py +33 -12
  48. openstackclient/identity/v3/endpoint_group.py +1 -1
  49. openstackclient/identity/v3/federation_protocol.py +40 -41
  50. openstackclient/identity/v3/group.py +11 -5
  51. openstackclient/identity/v3/identity_provider.py +12 -10
  52. openstackclient/identity/v3/implied_role.py +1 -1
  53. openstackclient/identity/v3/limit.py +86 -85
  54. openstackclient/identity/v3/mapping.py +1 -1
  55. openstackclient/identity/v3/policy.py +1 -1
  56. openstackclient/identity/v3/project.py +191 -115
  57. openstackclient/identity/v3/region.py +1 -1
  58. openstackclient/identity/v3/registered_limit.py +97 -109
  59. openstackclient/identity/v3/role.py +20 -39
  60. openstackclient/identity/v3/role_assignment.py +12 -23
  61. openstackclient/identity/v3/service.py +1 -1
  62. openstackclient/identity/v3/service_provider.py +1 -1
  63. openstackclient/identity/v3/tag.py +1 -11
  64. openstackclient/identity/v3/token.py +3 -2
  65. openstackclient/identity/v3/trust.py +4 -2
  66. openstackclient/identity/v3/unscoped_saml.py +1 -1
  67. openstackclient/identity/v3/user.py +22 -13
  68. openstackclient/image/v1/image.py +19 -16
  69. openstackclient/image/v2/cache.py +1 -1
  70. openstackclient/image/v2/image.py +16 -12
  71. openstackclient/image/v2/info.py +1 -1
  72. openstackclient/image/v2/metadef_namespaces.py +1 -1
  73. openstackclient/image/v2/metadef_objects.py +1 -1
  74. openstackclient/image/v2/metadef_properties.py +3 -2
  75. openstackclient/image/v2/metadef_resource_type_association.py +1 -1
  76. openstackclient/image/v2/metadef_resource_types.py +1 -1
  77. openstackclient/image/v2/task.py +1 -1
  78. openstackclient/network/common.py +10 -9
  79. openstackclient/network/v2/address_group.py +4 -3
  80. openstackclient/network/v2/address_scope.py +8 -6
  81. openstackclient/network/v2/default_security_group_rule.py +9 -8
  82. openstackclient/network/v2/floating_ip.py +16 -9
  83. openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
  84. openstackclient/network/v2/ip_availability.py +7 -4
  85. openstackclient/network/v2/l3_conntrack_helper.py +11 -4
  86. openstackclient/network/v2/local_ip.py +13 -7
  87. openstackclient/network/v2/local_ip_association.py +7 -4
  88. openstackclient/network/v2/ndp_proxy.py +13 -6
  89. openstackclient/network/v2/network.py +33 -16
  90. openstackclient/network/v2/network_agent.py +5 -5
  91. openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
  92. openstackclient/network/v2/network_flavor.py +1 -1
  93. openstackclient/network/v2/network_flavor_profile.py +1 -1
  94. openstackclient/network/v2/network_meter.py +1 -1
  95. openstackclient/network/v2/network_meter_rule.py +1 -1
  96. openstackclient/network/v2/network_qos_policy.py +7 -5
  97. openstackclient/network/v2/network_qos_rule.py +1 -1
  98. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  99. openstackclient/network/v2/network_rbac.py +8 -5
  100. openstackclient/network/v2/network_segment.py +2 -2
  101. openstackclient/network/v2/network_segment_range.py +13 -6
  102. openstackclient/network/v2/network_service_provider.py +1 -1
  103. openstackclient/network/v2/network_trunk.py +65 -42
  104. openstackclient/network/v2/port.py +22 -20
  105. openstackclient/network/v2/router.py +19 -8
  106. openstackclient/network/v2/security_group.py +10 -6
  107. openstackclient/network/v2/security_group_rule.py +11 -5
  108. openstackclient/network/v2/subnet.py +17 -18
  109. openstackclient/network/v2/subnet_pool.py +11 -9
  110. openstackclient/network/v2/taas/__init__.py +0 -0
  111. openstackclient/network/v2/taas/tap_flow.py +245 -0
  112. openstackclient/network/v2/taas/tap_mirror.py +237 -0
  113. openstackclient/network/v2/taas/tap_service.py +211 -0
  114. openstackclient/object/v1/account.py +1 -1
  115. openstackclient/object/v1/container.py +1 -1
  116. openstackclient/object/v1/object.py +1 -1
  117. openstackclient/shell.py +18 -8
  118. openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
  119. openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
  120. openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
  121. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  122. openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
  123. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  124. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +46 -132
  125. openstackclient/tests/unit/common/test_command.py +1 -1
  126. openstackclient/tests/unit/common/test_extension.py +2 -3
  127. openstackclient/tests/unit/common/test_module.py +14 -7
  128. openstackclient/tests/unit/common/test_quota.py +79 -0
  129. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  130. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  131. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
  132. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  133. openstackclient/tests/unit/compute/v2/test_server.py +370 -38
  134. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  135. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  136. openstackclient/tests/unit/fakes.py +35 -134
  137. openstackclient/tests/unit/identity/test_common.py +100 -0
  138. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  139. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  140. openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
  141. openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
  142. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  143. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  144. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  145. openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
  146. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  147. openstackclient/tests/unit/identity/v3/test_project.py +832 -513
  148. openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
  149. openstackclient/tests/unit/identity/v3/test_registered_limit.py +356 -221
  150. openstackclient/tests/unit/identity/v3/test_role.py +1 -82
  151. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  152. openstackclient/tests/unit/image/v2/test_image.py +116 -5
  153. openstackclient/tests/unit/network/test_common.py +9 -13
  154. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  155. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  156. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  157. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  158. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  159. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  160. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  161. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  162. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  163. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  164. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  165. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  166. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  167. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
  168. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  169. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  170. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  171. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  172. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  173. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  174. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  175. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  176. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  177. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  178. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  179. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  180. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  181. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  182. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  183. openstackclient/tests/unit/network/v2/test_port.py +75 -86
  184. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  185. openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
  186. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
  187. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  188. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  189. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  190. openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
  191. openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
  192. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  193. openstackclient/tests/unit/volume/v3/test_volume.py +38 -12
  194. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  195. openstackclient/volume/client.py +7 -17
  196. openstackclient/volume/v2/backup_record.py +1 -1
  197. openstackclient/volume/v2/consistency_group.py +9 -9
  198. openstackclient/volume/v2/consistency_group_snapshot.py +3 -3
  199. openstackclient/volume/v2/qos_specs.py +3 -3
  200. openstackclient/volume/v2/service.py +1 -1
  201. openstackclient/volume/v2/volume.py +14 -7
  202. openstackclient/volume/v2/volume_backend.py +1 -1
  203. openstackclient/volume/v2/volume_backup.py +7 -5
  204. openstackclient/volume/v2/volume_host.py +1 -2
  205. openstackclient/volume/v2/volume_snapshot.py +4 -4
  206. openstackclient/volume/v2/volume_transfer_request.py +3 -3
  207. openstackclient/volume/v2/volume_type.py +16 -11
  208. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  209. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  210. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  211. openstackclient/volume/v3/block_storage_manage.py +1 -1
  212. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  213. openstackclient/volume/v3/service.py +1 -1
  214. openstackclient/volume/v3/volume.py +16 -9
  215. openstackclient/volume/v3/volume_attachment.py +6 -5
  216. openstackclient/volume/v3/volume_backup.py +20 -5
  217. openstackclient/volume/v3/volume_group.py +1 -1
  218. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  219. openstackclient/volume/v3/volume_group_type.py +1 -1
  220. openstackclient/volume/v3/volume_message.py +1 -1
  221. openstackclient/volume/v3/volume_snapshot.py +4 -4
  222. openstackclient/volume/v3/volume_transfer_request.py +3 -3
  223. openstackclient/volume/v3/volume_type.py +20 -14
  224. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/METADATA +15 -13
  225. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/RECORD +231 -219
  226. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/WHEEL +1 -1
  227. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/entry_points.txt +15 -0
  228. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/AUTHORS +15 -0
  229. python_openstackclient-9.0.0.dist-info/pbr.json +1 -0
  230. openstackclient/tests/unit/common/test_logs.py +0 -221
  231. python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
  232. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/LICENSE +0 -0
  233. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,6 @@
11
11
  # under the License.
12
12
  #
13
13
 
14
- from unittest import mock
15
14
  from unittest.mock import call
16
15
 
17
16
  from osc_lib.cli import format_columns
@@ -266,19 +265,14 @@ class TestCreateSubnet(TestSubnet):
266
265
  self.domains_mock.get.return_value = self.domain
267
266
 
268
267
  # Mock SDK calls for all tests.
269
- self.network_client.create_subnet = mock.Mock(
270
- return_value=self._subnet
271
- )
272
- self.network_client.set_tags = mock.Mock(return_value=None)
273
- self.network_client.find_network = mock.Mock(
274
- return_value=self._network
275
- )
276
- self.network_client.find_segment = mock.Mock(
277
- return_value=self._network_segment
278
- )
279
- self.network_client.find_subnet_pool = mock.Mock(
280
- return_value=self._subnet_pool
281
- )
268
+ self.network_client.create_subnet.return_value = self._subnet
269
+
270
+ self.network_client.set_tags.return_value = None
271
+ self.network_client.find_network.return_value = self._network
272
+
273
+ self.network_client.find_segment.return_value = self._network_segment
274
+
275
+ self.network_client.find_subnet_pool.return_value = self._subnet_pool
282
276
 
283
277
  def test_create_no_options(self):
284
278
  arglist = []
@@ -333,7 +327,7 @@ class TestCreateSubnet(TestSubnet):
333
327
  def test_create_from_subnet_pool_options(self):
334
328
  # Mock SDK calls for this test.
335
329
  self.network_client.create_subnet.return_value = self._subnet_from_pool
336
- self.network_client.set_tags = mock.Mock(return_value=None)
330
+ self.network_client.set_tags.return_value = None
337
331
  self._network.id = self._subnet_from_pool.network_id
338
332
 
339
333
  arglist = [
@@ -721,7 +715,7 @@ class TestDeleteSubnet(TestSubnet):
721
715
  def setUp(self):
722
716
  super().setUp()
723
717
 
724
- self.network_client.delete_subnet = mock.Mock(return_value=None)
718
+ self.network_client.delete_subnet.return_value = None
725
719
 
726
720
  self.network_client.find_subnet = network_fakes.FakeSubnet.get_subnets(
727
721
  self._subnets
@@ -775,9 +769,7 @@ class TestDeleteSubnet(TestSubnet):
775
769
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
776
770
 
777
771
  find_mock_result = [self._subnets[0], exceptions.CommandError]
778
- self.network_client.find_subnet = mock.Mock(
779
- side_effect=find_mock_result
780
- )
772
+ self.network_client.find_subnet.side_effect = find_mock_result
781
773
 
782
774
  try:
783
775
  self.cmd.take_action(parsed_args)
@@ -855,7 +847,7 @@ class TestListSubnet(TestSubnet):
855
847
  # Get the command object to test
856
848
  self.cmd = subnet_v2.ListSubnet(self.app, None)
857
849
 
858
- self.network_client.subnets = mock.Mock(return_value=self._subnet)
850
+ self.network_client.subnets.return_value = self._subnet
859
851
 
860
852
  def test_subnet_list_no_options(self):
861
853
  arglist = []
@@ -1019,7 +1011,7 @@ class TestListSubnet(TestSubnet):
1019
1011
 
1020
1012
  def test_subnet_list_network(self):
1021
1013
  network = network_fakes.create_one_network()
1022
- self.network_client.find_network = mock.Mock(return_value=network)
1014
+ self.network_client.find_network.return_value = network
1023
1015
  arglist = [
1024
1016
  '--network',
1025
1017
  network.id,
@@ -1038,7 +1030,7 @@ class TestListSubnet(TestSubnet):
1038
1030
 
1039
1031
  def test_subnet_list_gateway(self):
1040
1032
  subnet = network_fakes.FakeSubnet.create_one_subnet()
1041
- self.network_client.find_network = mock.Mock(return_value=subnet)
1033
+ self.network_client.find_network.return_value = subnet
1042
1034
  arglist = [
1043
1035
  '--gateway',
1044
1036
  subnet.gateway_ip,
@@ -1057,7 +1049,7 @@ class TestListSubnet(TestSubnet):
1057
1049
 
1058
1050
  def test_subnet_list_name(self):
1059
1051
  subnet = network_fakes.FakeSubnet.create_one_subnet()
1060
- self.network_client.find_network = mock.Mock(return_value=subnet)
1052
+ self.network_client.find_network.return_value = subnet
1061
1053
  arglist = [
1062
1054
  '--name',
1063
1055
  subnet.name,
@@ -1076,7 +1068,7 @@ class TestListSubnet(TestSubnet):
1076
1068
 
1077
1069
  def test_subnet_list_subnet_range(self):
1078
1070
  subnet = network_fakes.FakeSubnet.create_one_subnet()
1079
- self.network_client.find_network = mock.Mock(return_value=subnet)
1071
+ self.network_client.find_network.return_value = subnet
1080
1072
  arglist = [
1081
1073
  '--subnet-range',
1082
1074
  subnet.cidr,
@@ -1098,10 +1090,9 @@ class TestListSubnet(TestSubnet):
1098
1090
  subnet = network_fakes.FakeSubnet.create_one_subnet(
1099
1091
  {'subnetpool_id': subnet_pool.id}
1100
1092
  )
1101
- self.network_client.find_network = mock.Mock(return_value=subnet)
1102
- self.network_client.find_subnet_pool = mock.Mock(
1103
- return_value=subnet_pool
1104
- )
1093
+ self.network_client.find_network.return_value = subnet
1094
+ self.network_client.find_subnet_pool.return_value = subnet_pool
1095
+
1105
1096
  arglist = [
1106
1097
  '--subnet-pool',
1107
1098
  subnet_pool.name,
@@ -1123,10 +1114,9 @@ class TestListSubnet(TestSubnet):
1123
1114
  subnet = network_fakes.FakeSubnet.create_one_subnet(
1124
1115
  {'subnetpool_id': subnet_pool.id}
1125
1116
  )
1126
- self.network_client.find_network = mock.Mock(return_value=subnet)
1127
- self.network_client.find_subnet_pool = mock.Mock(
1128
- return_value=subnet_pool
1129
- )
1117
+ self.network_client.find_network.return_value = subnet
1118
+ self.network_client.find_subnet_pool.return_value = subnet_pool
1119
+
1130
1120
  arglist = [
1131
1121
  '--subnet-pool',
1132
1122
  subnet_pool.id,
@@ -1182,9 +1172,9 @@ class TestSetSubnet(TestSubnet):
1182
1172
 
1183
1173
  def setUp(self):
1184
1174
  super().setUp()
1185
- self.network_client.update_subnet = mock.Mock(return_value=None)
1186
- self.network_client.set_tags = mock.Mock(return_value=None)
1187
- self.network_client.find_subnet = mock.Mock(return_value=self._subnet)
1175
+ self.network_client.update_subnet.return_value = None
1176
+ self.network_client.set_tags.return_value = None
1177
+ self.network_client.find_subnet.return_value = self._subnet
1188
1178
  self.cmd = subnet_v2.SetSubnet(self.app, None)
1189
1179
 
1190
1180
  def test_set_this(self):
@@ -1263,7 +1253,7 @@ class TestSetSubnet(TestSubnet):
1263
1253
  'service_types': ["network:router_gateway"],
1264
1254
  }
1265
1255
  )
1266
- self.network_client.find_subnet = mock.Mock(return_value=_testsubnet)
1256
+ self.network_client.find_subnet.return_value = _testsubnet
1267
1257
  arglist = [
1268
1258
  '--dns-nameserver',
1269
1259
  '10.0.0.2',
@@ -1329,7 +1319,7 @@ class TestSetSubnet(TestSubnet):
1329
1319
  'dns_nameservers': ["10.0.0.1"],
1330
1320
  }
1331
1321
  )
1332
- self.network_client.find_subnet = mock.Mock(return_value=_testsubnet)
1322
+ self.network_client.find_subnet.return_value = _testsubnet
1333
1323
  arglist = [
1334
1324
  '--host-route',
1335
1325
  'destination=10.30.30.30/24,gateway=10.30.30.1',
@@ -1379,7 +1369,7 @@ class TestSetSubnet(TestSubnet):
1379
1369
  'dns_nameservers': ['10.0.0.1'],
1380
1370
  }
1381
1371
  )
1382
- self.network_client.find_subnet = mock.Mock(return_value=_testsubnet)
1372
+ self.network_client.find_subnet.return_value = _testsubnet
1383
1373
  arglist = [
1384
1374
  '--no-host-route',
1385
1375
  '--no-allocation-pool',
@@ -1448,8 +1438,8 @@ class TestSetSubnet(TestSubnet):
1448
1438
  'segment_id': None,
1449
1439
  }
1450
1440
  )
1451
- self.network_client.find_subnet = mock.Mock(return_value=_subnet)
1452
- self.network_client.find_segment = mock.Mock(return_value=_segment)
1441
+ self.network_client.find_subnet.return_value = _subnet
1442
+ self.network_client.find_segment.return_value = _segment
1453
1443
  arglist = ['--network-segment', _segment.id, _subnet.name]
1454
1444
  verifylist = [('network_segment', _segment.id)]
1455
1445
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1514,7 +1504,7 @@ class TestShowSubnet(TestSubnet):
1514
1504
  # Get the command object to test
1515
1505
  self.cmd = subnet_v2.ShowSubnet(self.app, None)
1516
1506
 
1517
- self.network_client.find_subnet = mock.Mock(return_value=self._subnet)
1507
+ self.network_client.find_subnet.return_value = self._subnet
1518
1508
 
1519
1509
  def test_show_no_options(self):
1520
1510
  arglist = []
@@ -1572,11 +1562,10 @@ class TestUnsetSubnet(TestSubnet):
1572
1562
  'tags': ['green', 'red'],
1573
1563
  }
1574
1564
  )
1575
- self.network_client.find_subnet = mock.Mock(
1576
- return_value=self._testsubnet
1577
- )
1578
- self.network_client.update_subnet = mock.Mock(return_value=None)
1579
- self.network_client.set_tags = mock.Mock(return_value=None)
1565
+ self.network_client.find_subnet.return_value = self._testsubnet
1566
+
1567
+ self.network_client.update_subnet.return_value = None
1568
+ self.network_client.set_tags.return_value = None
1580
1569
  # Get the command object to test
1581
1570
  self.cmd = subnet_v2.UnsetSubnet(self.app, None)
1582
1571
 
@@ -10,7 +10,6 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
- from unittest import mock
14
13
  from unittest.mock import call
15
14
 
16
15
  from osc_lib.cli import format_columns
@@ -76,16 +75,15 @@ class TestCreateSubnetPool(TestSubnetPool):
76
75
  def setUp(self):
77
76
  super().setUp()
78
77
 
79
- self.network_client.create_subnet_pool = mock.Mock(
80
- return_value=self._subnet_pool
81
- )
82
- self.network_client.set_tags = mock.Mock(return_value=None)
78
+ self.network_client.create_subnet_pool.return_value = self._subnet_pool
79
+
80
+ self.network_client.set_tags.return_value = None
83
81
 
84
82
  # Get the command object to test
85
83
  self.cmd = subnet_pool.CreateSubnetPool(self.app, None)
86
84
 
87
- self.network_client.find_address_scope = mock.Mock(
88
- return_value=self._address_scope
85
+ self.network_client.find_address_scope.return_value = (
86
+ self._address_scope
89
87
  )
90
88
 
91
89
  self.projects_mock.get.return_value = self.project
@@ -387,7 +385,7 @@ class TestDeleteSubnetPool(TestSubnetPool):
387
385
  def setUp(self):
388
386
  super().setUp()
389
387
 
390
- self.network_client.delete_subnet_pool = mock.Mock(return_value=None)
388
+ self.network_client.delete_subnet_pool.return_value = None
391
389
 
392
390
  self.network_client.find_subnet_pool = (
393
391
  network_fakes.FakeSubnetPool.get_subnet_pools(self._subnet_pools)
@@ -445,9 +443,7 @@ class TestDeleteSubnetPool(TestSubnetPool):
445
443
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
446
444
 
447
445
  find_mock_result = [self._subnet_pools[0], exceptions.CommandError]
448
- self.network_client.find_subnet_pool = mock.Mock(
449
- side_effect=find_mock_result
450
- )
446
+ self.network_client.find_subnet_pool.side_effect = find_mock_result
451
447
 
452
448
  try:
453
449
  self.cmd.take_action(parsed_args)
@@ -514,9 +510,7 @@ class TestListSubnetPool(TestSubnetPool):
514
510
  # Get the command object to test
515
511
  self.cmd = subnet_pool.ListSubnetPool(self.app, None)
516
512
 
517
- self.network_client.subnet_pools = mock.Mock(
518
- return_value=self._subnet_pools
519
- )
513
+ self.network_client.subnet_pools.return_value = self._subnet_pools
520
514
 
521
515
  def test_subnet_pool_list_no_option(self):
522
516
  arglist = []
@@ -653,7 +647,7 @@ class TestListSubnetPool(TestSubnetPool):
653
647
 
654
648
  def test_subnet_pool_list_name(self):
655
649
  subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
656
- self.network_client.find_network = mock.Mock(return_value=subnet_pool)
650
+ self.network_client.find_network.return_value = subnet_pool
657
651
  arglist = [
658
652
  '--name',
659
653
  subnet_pool.name,
@@ -672,9 +666,8 @@ class TestListSubnetPool(TestSubnetPool):
672
666
 
673
667
  def test_subnet_pool_list_address_scope(self):
674
668
  addr_scope = network_fakes.create_one_address_scope()
675
- self.network_client.find_address_scope = mock.Mock(
676
- return_value=addr_scope
677
- )
669
+ self.network_client.find_address_scope.return_value = addr_scope
670
+
678
671
  arglist = [
679
672
  '--address-scope',
680
673
  addr_scope.id,
@@ -734,15 +727,13 @@ class TestSetSubnetPool(TestSubnetPool):
734
727
  def setUp(self):
735
728
  super().setUp()
736
729
 
737
- self.network_client.update_subnet_pool = mock.Mock(return_value=None)
738
- self.network_client.set_tags = mock.Mock(return_value=None)
730
+ self.network_client.update_subnet_pool.return_value = None
731
+ self.network_client.set_tags.return_value = None
739
732
 
740
- self.network_client.find_subnet_pool = mock.Mock(
741
- return_value=self._subnet_pool
742
- )
733
+ self.network_client.find_subnet_pool.return_value = self._subnet_pool
743
734
 
744
- self.network_client.find_address_scope = mock.Mock(
745
- return_value=self._address_scope
735
+ self.network_client.find_address_scope.return_value = (
736
+ self._address_scope
746
737
  )
747
738
 
748
739
  # Get the command object to test
@@ -1079,9 +1070,7 @@ class TestShowSubnetPool(TestSubnetPool):
1079
1070
  def setUp(self):
1080
1071
  super().setUp()
1081
1072
 
1082
- self.network_client.find_subnet_pool = mock.Mock(
1083
- return_value=self._subnet_pool
1084
- )
1073
+ self.network_client.find_subnet_pool.return_value = self._subnet_pool
1085
1074
 
1086
1075
  # Get the command object to test
1087
1076
  self.cmd = subnet_pool.ShowSubnetPool(self.app, None)
@@ -1122,11 +1111,10 @@ class TestUnsetSubnetPool(TestSubnetPool):
1122
1111
  self._subnetpool = network_fakes.FakeSubnetPool.create_one_subnet_pool(
1123
1112
  {'tags': ['green', 'red']}
1124
1113
  )
1125
- self.network_client.find_subnet_pool = mock.Mock(
1126
- return_value=self._subnetpool
1127
- )
1128
- self.network_client.update_subnet_pool = mock.Mock(return_value=None)
1129
- self.network_client.set_tags = mock.Mock(return_value=None)
1114
+ self.network_client.find_subnet_pool.return_value = self._subnetpool
1115
+
1116
+ self.network_client.update_subnet_pool.return_value = None
1117
+ self.network_client.set_tags.return_value = None
1130
1118
  # Get the command object to test
1131
1119
  self.cmd = subnet_pool.UnsetSubnetPool(self.app, None)
1132
1120
 
@@ -21,15 +21,6 @@ from osc_lib import exceptions
21
21
  from osc_lib import utils
22
22
 
23
23
  from openstackclient.tests.unit import utils as test_utils
24
- from openstackclient.volume import client # noqa
25
-
26
-
27
- # Monkey patch for v1 cinderclient
28
- # NOTE(dtroyer): Do here because openstackclient.volume.client
29
- # doesn't do it until the client object is created now.
30
- volumes.Volume.NAME_ATTR = 'display_name'
31
- volume_snapshots.Snapshot.NAME_ATTR = 'display_name'
32
-
33
24
 
34
25
  ID = '1after909'
35
26
  NAME = 'PhilSpector'
@@ -42,14 +33,14 @@ class TestFindResourceVolumes(test_utils.TestCase):
42
33
  api.client = mock.Mock()
43
34
  api.client.get = mock.Mock()
44
35
  resp = mock.Mock()
45
- body = {"volumes": [{"id": ID, 'display_name': NAME}]}
36
+ body = {"volumes": [{"id": ID, 'name': NAME}]}
46
37
  api.client.get.side_effect = [Exception("Not found"), (resp, body)]
47
38
  self.manager = volumes.VolumeManager(api)
48
39
 
49
40
  def test_find(self):
50
41
  result = utils.find_resource(self.manager, NAME)
51
42
  self.assertEqual(ID, result.id)
52
- self.assertEqual(NAME, result.display_name)
43
+ self.assertEqual(NAME, result.name)
53
44
 
54
45
  def test_not_find(self):
55
46
  self.assertRaises(
@@ -67,14 +58,14 @@ class TestFindResourceVolumeSnapshots(test_utils.TestCase):
67
58
  api.client = mock.Mock()
68
59
  api.client.get = mock.Mock()
69
60
  resp = mock.Mock()
70
- body = {"snapshots": [{"id": ID, 'display_name': NAME}]}
61
+ body = {"snapshots": [{"id": ID, 'name': NAME}]}
71
62
  api.client.get.side_effect = [Exception("Not found"), (resp, body)]
72
63
  self.manager = volume_snapshots.SnapshotManager(api)
73
64
 
74
65
  def test_find(self):
75
66
  result = utils.find_resource(self.manager, NAME)
76
67
  self.assertEqual(ID, result.id)
77
- self.assertEqual(NAME, result.display_name)
68
+ self.assertEqual(NAME, result.name)
78
69
 
79
70
  def test_not_find(self):
80
71
  self.assertRaises(
@@ -129,7 +129,10 @@ class TestConsistencyGroupAddVolume(TestConsistencyGroup):
129
129
  utils, 'find_resource', side_effect=find_mock_result
130
130
  ) as find_mock:
131
131
  result = self.cmd.take_action(parsed_args)
132
- mock_error.assert_called_with("1 of 2 volumes failed to add.")
132
+ mock_error.assert_called_with(
133
+ '%(result)s of %(total)s volumes failed to add.',
134
+ {'result': 1, 'total': 2},
135
+ )
133
136
  self.assertIsNone(result)
134
137
  find_mock.assert_any_call(
135
138
  self.consistencygroups_mock, self._consistency_group.id
@@ -602,7 +605,10 @@ class TestConsistencyGroupRemoveVolume(TestConsistencyGroup):
602
605
  utils, 'find_resource', side_effect=find_mock_result
603
606
  ) as find_mock:
604
607
  result = self.cmd.take_action(parsed_args)
605
- mock_error.assert_called_with("1 of 2 volumes failed to remove.")
608
+ mock_error.assert_called_with(
609
+ '%(result)s of %(total)s volumes failed to remove.',
610
+ {'result': 1, 'total': 2},
611
+ )
606
612
  self.assertIsNone(result)
607
613
  find_mock.assert_any_call(
608
614
  self.consistencygroups_mock, self._consistency_group.id
@@ -655,7 +655,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
655
655
  arglist = [self.volumes[0].id]
656
656
  verifylist = [
657
657
  ("force", False),
658
- ("purge", False),
658
+ ("cascade", False),
659
659
  ("volumes", [self.volumes[0].id]),
660
660
  ]
661
661
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -674,7 +674,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
674
674
  arglist = [v.id for v in self.volumes]
675
675
  verifylist = [
676
676
  ('force', False),
677
- ('purge', False),
677
+ ('cascade', False),
678
678
  ('volumes', arglist),
679
679
  ]
680
680
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -701,7 +701,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
701
701
  ]
702
702
  verifylist = [
703
703
  ('force', False),
704
- ('purge', False),
704
+ ('cascade', False),
705
705
  ('volumes', [self.volumes[0].id, 'unexist_volume']),
706
706
  ]
707
707
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -732,7 +732,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
732
732
  ]
733
733
  verifylist = [
734
734
  ('force', False),
735
- ('purge', True),
735
+ ('cascade', True),
736
736
  ('volumes', [self.volumes[0].id]),
737
737
  ]
738
738
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -754,7 +754,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
754
754
  ]
755
755
  verifylist = [
756
756
  ('force', True),
757
- ('purge', False),
757
+ ('cascade', False),
758
758
  ('volumes', [self.volumes[0].id]),
759
759
  ]
760
760
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1618,7 +1618,8 @@ class TestVolumeSet(TestVolume):
1618
1618
  result = self.cmd.take_action(parsed_args)
1619
1619
  self.volumes_mock.retype.assert_not_called()
1620
1620
  mock_warning.assert_called_with(
1621
- "'--retype-policy' option will not work without '--type' option"
1621
+ "'%s' option will not work without '--type' option",
1622
+ '--retype-policy',
1622
1623
  )
1623
1624
  self.assertIsNone(result)
1624
1625
 
@@ -565,7 +565,9 @@ class TestBackupShow(volume_fakes.TestVolume):
565
565
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
566
566
 
567
567
  columns, data = self.cmd.take_action(parsed_args)
568
- self.volume_sdk_client.find_backup.assert_called_with(self.backup.id)
568
+ self.volume_sdk_client.find_backup.assert_called_with(
569
+ self.backup.id, ignore_missing=False
570
+ )
569
571
 
570
572
  self.assertEqual(self.columns, columns)
571
573
  self.assertEqual(self.data, data)
@@ -37,6 +37,7 @@ class TestVolumeCreate(volume_fakes.TestVolume):
37
37
  columns = (
38
38
  'attachments',
39
39
  'availability_zone',
40
+ 'backup_id',
40
41
  'bootable',
41
42
  'cluster_name',
42
43
  'consistencygroup_id',
@@ -78,6 +79,7 @@ class TestVolumeCreate(volume_fakes.TestVolume):
78
79
  self.datalist = (
79
80
  self.volume.attachments,
80
81
  self.volume.availability_zone,
82
+ self.volume.backup_id,
81
83
  self.volume.is_bootable,
82
84
  self.volume.cluster_name,
83
85
  self.volume.consistency_group_id,
@@ -910,7 +912,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
910
912
  arglist = [self.volumes[0].id]
911
913
  verifylist = [
912
914
  ("force", False),
913
- ("purge", False),
915
+ ("cascade", False),
914
916
  ("volumes", [self.volumes[0].id]),
915
917
  ]
916
918
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -929,7 +931,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
929
931
  arglist = [v.id for v in self.volumes]
930
932
  verifylist = [
931
933
  ('force', False),
932
- ('purge', False),
934
+ ('cascade', False),
933
935
  ('volumes', arglist),
934
936
  ]
935
937
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -956,7 +958,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
956
958
  ]
957
959
  verifylist = [
958
960
  ('force', False),
959
- ('purge', False),
961
+ ('cascade', False),
960
962
  ('volumes', [self.volumes[0].id, 'unexist_volume']),
961
963
  ]
962
964
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -987,7 +989,29 @@ class TestVolumeDelete(volume_fakes.TestVolume):
987
989
  ]
988
990
  verifylist = [
989
991
  ('force', False),
990
- ('purge', True),
992
+ ('cascade', True),
993
+ ('volumes', [self.volumes[0].id]),
994
+ ]
995
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
996
+
997
+ result = self.cmd.take_action(parsed_args)
998
+ self.assertIsNone(result)
999
+
1000
+ self.volume_sdk_client.find_volume.assert_called_once_with(
1001
+ self.volumes[0].id, ignore_missing=False
1002
+ )
1003
+ self.volume_sdk_client.delete_volume.assert_called_once_with(
1004
+ self.volumes[0].id, cascade=True, force=False
1005
+ )
1006
+
1007
+ def test_volume_delete_with_cascade(self):
1008
+ arglist = [
1009
+ '--cascade',
1010
+ self.volumes[0].id,
1011
+ ]
1012
+ verifylist = [
1013
+ ('force', False),
1014
+ ('cascade', True),
991
1015
  ('volumes', [self.volumes[0].id]),
992
1016
  ]
993
1017
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1009,7 +1033,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1009
1033
  ]
1010
1034
  verifylist = [
1011
1035
  ('force', True),
1012
- ('purge', False),
1036
+ ('cascade', False),
1013
1037
  ('volumes', [self.volumes[0].id]),
1014
1038
  ]
1015
1039
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1029,7 +1053,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1029
1053
  verifylist = [
1030
1054
  ("remote", True),
1031
1055
  ("force", False),
1032
- ("purge", False),
1056
+ ("cascade", False),
1033
1057
  ("volumes", [self.volumes[0].id]),
1034
1058
  ]
1035
1059
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1050,7 +1074,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1050
1074
  verifylist = [
1051
1075
  ('remote', True),
1052
1076
  ('force', False),
1053
- ('purge', False),
1077
+ ('cascade', False),
1054
1078
  ('volumes', arglist[1:]),
1055
1079
  ]
1056
1080
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1075,7 +1099,6 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1075
1099
  verifylist = [
1076
1100
  ('remote', True),
1077
1101
  ('force', False),
1078
- ('purge', True),
1079
1102
  ('volumes', [self.volumes[0].id]),
1080
1103
  ]
1081
1104
 
@@ -1084,7 +1107,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1084
1107
  exceptions.CommandError, self.cmd.take_action, parsed_args
1085
1108
  )
1086
1109
  self.assertIn(
1087
- "The --force and --purge options are not supported with the "
1110
+ "The --force and --cascade options are not supported with the "
1088
1111
  "--remote parameter.",
1089
1112
  str(exc),
1090
1113
  )
@@ -1102,7 +1125,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1102
1125
  verifylist = [
1103
1126
  ('remote', True),
1104
1127
  ('force', True),
1105
- ('purge', False),
1128
+ ('cascade', False),
1106
1129
  ('volumes', [self.volumes[0].id]),
1107
1130
  ]
1108
1131
 
@@ -1111,7 +1134,7 @@ class TestVolumeDelete(volume_fakes.TestVolume):
1111
1134
  exceptions.CommandError, self.cmd.take_action, parsed_args
1112
1135
  )
1113
1136
  self.assertIn(
1114
- "The --force and --purge options are not supported with the "
1137
+ "The --force and --cascade options are not supported with the "
1115
1138
  "--remote parameter.",
1116
1139
  str(exc),
1117
1140
  )
@@ -1996,7 +2019,8 @@ class TestVolumeSet(volume_fakes.TestVolume):
1996
2019
  result = self.cmd.take_action(parsed_args)
1997
2020
  self.volumes_mock.retype.assert_not_called()
1998
2021
  mock_warning.assert_called_with(
1999
- "'--retype-policy' option will not work without '--type' option"
2022
+ "'%s' option will not work without '--type' option",
2023
+ '--retype-policy',
2000
2024
  )
2001
2025
  self.assertIsNone(result)
2002
2026
 
@@ -2011,6 +2035,7 @@ class TestVolumeShow(volume_fakes.TestVolume):
2011
2035
  self.columns = (
2012
2036
  'attachments',
2013
2037
  'availability_zone',
2038
+ 'backup_id',
2014
2039
  'bootable',
2015
2040
  'cluster_name',
2016
2041
  'consistencygroup_id',
@@ -2045,6 +2070,7 @@ class TestVolumeShow(volume_fakes.TestVolume):
2045
2070
  self.data = (
2046
2071
  self.volume.attachments,
2047
2072
  self.volume.availability_zone,
2073
+ self.volume.backup_id,
2048
2074
  self.volume.is_bootable,
2049
2075
  self.volume.cluster_name,
2050
2076
  self.volume.consistency_group_id,