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.
- openstackclient/api/object_store_v1.py +4 -1
- openstackclient/command.py +27 -0
- openstackclient/common/availability_zone.py +1 -1
- openstackclient/common/clientmanager.py +59 -21
- openstackclient/common/configuration.py +1 -1
- openstackclient/common/extension.py +1 -1
- openstackclient/common/limits.py +1 -1
- openstackclient/common/module.py +5 -3
- openstackclient/common/project_cleanup.py +10 -8
- openstackclient/common/quota.py +54 -23
- openstackclient/common/versions.py +1 -2
- openstackclient/compute/v2/agent.py +1 -1
- openstackclient/compute/v2/aggregate.py +6 -5
- openstackclient/compute/v2/console.py +5 -3
- openstackclient/compute/v2/console_connection.py +1 -1
- openstackclient/compute/v2/flavor.py +1 -1
- openstackclient/compute/v2/host.py +1 -1
- openstackclient/compute/v2/hypervisor.py +1 -1
- openstackclient/compute/v2/hypervisor_stats.py +1 -1
- openstackclient/compute/v2/keypair.py +1 -1
- openstackclient/compute/v2/server.py +78 -29
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_event.py +1 -1
- openstackclient/compute/v2/server_group.py +4 -2
- openstackclient/compute/v2/server_image.py +1 -1
- openstackclient/compute/v2/server_migration.py +1 -1
- openstackclient/compute/v2/server_volume.py +1 -1
- openstackclient/compute/v2/service.py +1 -1
- openstackclient/compute/v2/usage.py +6 -4
- openstackclient/identity/common.py +33 -1
- openstackclient/identity/v2_0/catalog.py +3 -2
- openstackclient/identity/v2_0/ec2creds.py +1 -1
- openstackclient/identity/v2_0/endpoint.py +1 -1
- openstackclient/identity/v2_0/project.py +17 -7
- openstackclient/identity/v2_0/role.py +1 -1
- openstackclient/identity/v2_0/role_assignment.py +3 -3
- openstackclient/identity/v2_0/service.py +4 -2
- openstackclient/identity/v2_0/token.py +1 -1
- openstackclient/identity/v2_0/user.py +2 -2
- openstackclient/identity/v3/access_rule.py +16 -4
- openstackclient/identity/v3/application_credential.py +30 -10
- openstackclient/identity/v3/catalog.py +3 -3
- openstackclient/identity/v3/consumer.py +1 -1
- openstackclient/identity/v3/credential.py +1 -1
- openstackclient/identity/v3/domain.py +10 -4
- openstackclient/identity/v3/ec2creds.py +1 -1
- openstackclient/identity/v3/endpoint.py +33 -12
- openstackclient/identity/v3/endpoint_group.py +1 -1
- openstackclient/identity/v3/federation_protocol.py +40 -41
- openstackclient/identity/v3/group.py +11 -5
- openstackclient/identity/v3/identity_provider.py +12 -10
- openstackclient/identity/v3/implied_role.py +1 -1
- openstackclient/identity/v3/limit.py +86 -85
- openstackclient/identity/v3/mapping.py +1 -1
- openstackclient/identity/v3/policy.py +1 -1
- openstackclient/identity/v3/project.py +191 -115
- openstackclient/identity/v3/region.py +1 -1
- openstackclient/identity/v3/registered_limit.py +97 -109
- openstackclient/identity/v3/role.py +20 -39
- openstackclient/identity/v3/role_assignment.py +12 -23
- openstackclient/identity/v3/service.py +1 -1
- openstackclient/identity/v3/service_provider.py +1 -1
- openstackclient/identity/v3/tag.py +1 -11
- openstackclient/identity/v3/token.py +3 -2
- openstackclient/identity/v3/trust.py +4 -2
- openstackclient/identity/v3/unscoped_saml.py +1 -1
- openstackclient/identity/v3/user.py +22 -13
- openstackclient/image/v1/image.py +19 -16
- openstackclient/image/v2/cache.py +1 -1
- openstackclient/image/v2/image.py +16 -12
- openstackclient/image/v2/info.py +1 -1
- openstackclient/image/v2/metadef_namespaces.py +1 -1
- openstackclient/image/v2/metadef_objects.py +1 -1
- openstackclient/image/v2/metadef_properties.py +3 -2
- openstackclient/image/v2/metadef_resource_type_association.py +1 -1
- openstackclient/image/v2/metadef_resource_types.py +1 -1
- openstackclient/image/v2/task.py +1 -1
- openstackclient/network/common.py +10 -9
- openstackclient/network/v2/address_group.py +4 -3
- openstackclient/network/v2/address_scope.py +8 -6
- openstackclient/network/v2/default_security_group_rule.py +9 -8
- openstackclient/network/v2/floating_ip.py +16 -9
- openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
- openstackclient/network/v2/ip_availability.py +7 -4
- openstackclient/network/v2/l3_conntrack_helper.py +11 -4
- openstackclient/network/v2/local_ip.py +13 -7
- openstackclient/network/v2/local_ip_association.py +7 -4
- openstackclient/network/v2/ndp_proxy.py +13 -6
- openstackclient/network/v2/network.py +33 -16
- openstackclient/network/v2/network_agent.py +5 -5
- openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
- openstackclient/network/v2/network_flavor.py +1 -1
- openstackclient/network/v2/network_flavor_profile.py +1 -1
- openstackclient/network/v2/network_meter.py +1 -1
- openstackclient/network/v2/network_meter_rule.py +1 -1
- openstackclient/network/v2/network_qos_policy.py +7 -5
- openstackclient/network/v2/network_qos_rule.py +1 -1
- openstackclient/network/v2/network_qos_rule_type.py +1 -1
- openstackclient/network/v2/network_rbac.py +8 -5
- openstackclient/network/v2/network_segment.py +2 -2
- openstackclient/network/v2/network_segment_range.py +13 -6
- openstackclient/network/v2/network_service_provider.py +1 -1
- openstackclient/network/v2/network_trunk.py +65 -42
- openstackclient/network/v2/port.py +22 -20
- openstackclient/network/v2/router.py +19 -8
- openstackclient/network/v2/security_group.py +10 -6
- openstackclient/network/v2/security_group_rule.py +11 -5
- openstackclient/network/v2/subnet.py +17 -18
- openstackclient/network/v2/subnet_pool.py +11 -9
- openstackclient/network/v2/taas/__init__.py +0 -0
- openstackclient/network/v2/taas/tap_flow.py +245 -0
- openstackclient/network/v2/taas/tap_mirror.py +237 -0
- openstackclient/network/v2/taas/tap_service.py +211 -0
- openstackclient/object/v1/account.py +1 -1
- openstackclient/object/v1/container.py +1 -1
- openstackclient/object/v1/object.py +1 -1
- openstackclient/shell.py +18 -8
- openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
- openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
- openstackclient/tests/functional/image/v2/test_cache.py +54 -0
- openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
- openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +46 -132
- openstackclient/tests/unit/common/test_command.py +1 -1
- openstackclient/tests/unit/common/test_extension.py +2 -3
- openstackclient/tests/unit/common/test_module.py +14 -7
- openstackclient/tests/unit/common/test_quota.py +79 -0
- openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
- openstackclient/tests/unit/compute/v2/test_console.py +1 -4
- openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
- openstackclient/tests/unit/compute/v2/test_server.py +370 -38
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
- openstackclient/tests/unit/compute/v2/test_service.py +1 -3
- openstackclient/tests/unit/fakes.py +35 -134
- openstackclient/tests/unit/identity/test_common.py +100 -0
- openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
- openstackclient/tests/unit/identity/v3/fakes.py +10 -2
- openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
- openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
- openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
- openstackclient/tests/unit/identity/v3/test_group.py +4 -2
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
- openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
- openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
- openstackclient/tests/unit/identity/v3/test_project.py +832 -513
- openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +356 -221
- openstackclient/tests/unit/identity/v3/test_role.py +1 -82
- openstackclient/tests/unit/identity/v3/test_user.py +7 -51
- openstackclient/tests/unit/image/v2/test_image.py +116 -5
- openstackclient/tests/unit/network/test_common.py +9 -13
- openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
- openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
- openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
- openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
- openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
- openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
- openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
- openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
- openstackclient/tests/unit/network/v2/test_network.py +41 -37
- openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
- openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
- openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
- openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
- openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
- openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
- openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
- openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
- openstackclient/tests/unit/network/v2/test_port.py +75 -86
- openstackclient/tests/unit/network/v2/test_router.py +104 -126
- openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
- openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
- openstackclient/tests/unit/volume/test_find_resource.py +4 -13
- openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
- openstackclient/tests/unit/volume/v3/test_volume.py +38 -12
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
- openstackclient/volume/client.py +7 -17
- openstackclient/volume/v2/backup_record.py +1 -1
- openstackclient/volume/v2/consistency_group.py +9 -9
- openstackclient/volume/v2/consistency_group_snapshot.py +3 -3
- openstackclient/volume/v2/qos_specs.py +3 -3
- openstackclient/volume/v2/service.py +1 -1
- openstackclient/volume/v2/volume.py +14 -7
- openstackclient/volume/v2/volume_backend.py +1 -1
- openstackclient/volume/v2/volume_backup.py +7 -5
- openstackclient/volume/v2/volume_host.py +1 -2
- openstackclient/volume/v2/volume_snapshot.py +4 -4
- openstackclient/volume/v2/volume_transfer_request.py +3 -3
- openstackclient/volume/v2/volume_type.py +16 -11
- openstackclient/volume/v3/block_storage_cleanup.py +1 -1
- openstackclient/volume/v3/block_storage_cluster.py +1 -1
- openstackclient/volume/v3/block_storage_log_level.py +1 -1
- openstackclient/volume/v3/block_storage_manage.py +1 -1
- openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
- openstackclient/volume/v3/service.py +1 -1
- openstackclient/volume/v3/volume.py +16 -9
- openstackclient/volume/v3/volume_attachment.py +6 -5
- openstackclient/volume/v3/volume_backup.py +20 -5
- openstackclient/volume/v3/volume_group.py +1 -1
- openstackclient/volume/v3/volume_group_snapshot.py +1 -1
- openstackclient/volume/v3/volume_group_type.py +1 -1
- openstackclient/volume/v3/volume_message.py +1 -1
- openstackclient/volume/v3/volume_snapshot.py +4 -4
- openstackclient/volume/v3/volume_transfer_request.py +3 -3
- openstackclient/volume/v3/volume_type.py +20 -14
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/METADATA +15 -13
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/RECORD +231 -219
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/entry_points.txt +15 -0
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/AUTHORS +15 -0
- python_openstackclient-9.0.0.dist-info/pbr.json +1 -0
- openstackclient/tests/unit/common/test_logs.py +0 -221
- python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
- {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/LICENSE +0 -0
- {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 =
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
self.network_client.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
self.network_client.
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
1102
|
-
self.network_client.find_subnet_pool =
|
|
1103
|
-
|
|
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 =
|
|
1127
|
-
self.network_client.find_subnet_pool =
|
|
1128
|
-
|
|
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 =
|
|
1186
|
-
self.network_client.set_tags =
|
|
1187
|
-
self.network_client.find_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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
1452
|
-
self.network_client.find_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 =
|
|
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 =
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
self.network_client.
|
|
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 =
|
|
80
|
-
|
|
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 =
|
|
88
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
676
|
-
|
|
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 =
|
|
738
|
-
self.network_client.set_tags =
|
|
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 =
|
|
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 =
|
|
745
|
-
|
|
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 =
|
|
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 =
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
self.network_client.
|
|
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, '
|
|
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.
|
|
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, '
|
|
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.
|
|
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(
|
|
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(
|
|
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
|
-
("
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
"'
|
|
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(
|
|
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
|
-
("
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
('
|
|
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
|
-
("
|
|
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
|
-
('
|
|
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 --
|
|
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
|
-
('
|
|
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 --
|
|
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
|
-
"'
|
|
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,
|