python-openstackclient 7.1.2__py3-none-any.whl → 7.2.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 (133) hide show
  1. openstackclient/api/api.py +2 -1
  2. openstackclient/api/image_v2.py +1 -1
  3. openstackclient/api/object_store_v1.py +12 -20
  4. openstackclient/common/clientmanager.py +1 -1
  5. openstackclient/common/module.py +2 -2
  6. openstackclient/common/quota.py +4 -4
  7. openstackclient/compute/v2/flavor.py +1 -1
  8. openstackclient/compute/v2/server.py +123 -60
  9. openstackclient/compute/v2/server_backup.py +1 -1
  10. openstackclient/compute/v2/server_image.py +1 -1
  11. openstackclient/compute/v2/server_migration.py +11 -2
  12. openstackclient/compute/v2/usage.py +3 -3
  13. openstackclient/identity/common.py +4 -1
  14. openstackclient/identity/v2_0/project.py +1 -1
  15. openstackclient/identity/v2_0/role_assignment.py +1 -1
  16. openstackclient/identity/v2_0/user.py +2 -2
  17. openstackclient/identity/v3/access_rule.py +26 -14
  18. openstackclient/identity/v3/identity_provider.py +1 -1
  19. openstackclient/identity/v3/project.py +1 -1
  20. openstackclient/identity/v3/role_assignment.py +24 -3
  21. openstackclient/identity/v3/service.py +2 -1
  22. openstackclient/identity/v3/user.py +35 -15
  23. openstackclient/image/v2/image.py +13 -13
  24. openstackclient/image/v2/metadef_objects.py +6 -4
  25. openstackclient/network/common.py +8 -7
  26. openstackclient/network/v2/floating_ip.py +6 -2
  27. openstackclient/network/v2/floating_ip_port_forwarding.py +2 -2
  28. openstackclient/network/v2/l3_conntrack_helper.py +1 -1
  29. openstackclient/network/v2/ndp_proxy.py +1 -0
  30. openstackclient/network/v2/network_agent.py +2 -6
  31. openstackclient/network/v2/network_qos_rule.py +2 -5
  32. openstackclient/network/v2/network_trunk.py +5 -4
  33. openstackclient/network/v2/port.py +18 -3
  34. openstackclient/network/v2/router.py +7 -4
  35. openstackclient/network/v2/subnet_pool.py +2 -2
  36. openstackclient/shell.py +3 -2
  37. openstackclient/tests/functional/common/test_help.py +3 -9
  38. openstackclient/tests/functional/common/test_module.py +1 -1
  39. openstackclient/tests/functional/common/test_quota.py +2 -4
  40. openstackclient/tests/functional/compute/v2/common.py +1 -3
  41. openstackclient/tests/functional/compute/v2/test_hypervisor.py +3 -3
  42. openstackclient/tests/functional/compute/v2/test_keypair.py +2 -2
  43. openstackclient/tests/functional/compute/v2/test_server.py +1 -1
  44. openstackclient/tests/functional/identity/v2/common.py +31 -48
  45. openstackclient/tests/functional/identity/v2/test_catalog.py +1 -1
  46. openstackclient/tests/functional/identity/v2/test_ec2_credentials.py +2 -2
  47. openstackclient/tests/functional/identity/v2/test_endpoint.py +2 -2
  48. openstackclient/tests/functional/identity/v2/test_project.py +8 -8
  49. openstackclient/tests/functional/identity/v2/test_role.py +14 -34
  50. openstackclient/tests/functional/identity/v2/test_service.py +2 -2
  51. openstackclient/tests/functional/identity/v2/test_token.py +1 -1
  52. openstackclient/tests/functional/identity/v2/test_user.py +7 -9
  53. openstackclient/tests/functional/identity/v3/common.py +69 -110
  54. openstackclient/tests/functional/identity/v3/test_access_rule.py +86 -0
  55. openstackclient/tests/functional/identity/v3/test_application_credential.py +18 -44
  56. openstackclient/tests/functional/identity/v3/test_catalog.py +1 -1
  57. openstackclient/tests/functional/identity/v3/test_domain.py +9 -11
  58. openstackclient/tests/functional/identity/v3/test_endpoint.py +15 -27
  59. openstackclient/tests/functional/identity/v3/test_group.py +32 -93
  60. openstackclient/tests/functional/identity/v3/test_idp.py +3 -3
  61. openstackclient/tests/functional/identity/v3/test_limit.py +32 -32
  62. openstackclient/tests/functional/identity/v3/test_project.py +17 -26
  63. openstackclient/tests/functional/identity/v3/test_region.py +6 -7
  64. openstackclient/tests/functional/identity/v3/test_registered_limit.py +27 -36
  65. openstackclient/tests/functional/identity/v3/test_role.py +30 -60
  66. openstackclient/tests/functional/identity/v3/test_role_assignment.py +33 -80
  67. openstackclient/tests/functional/identity/v3/test_service.py +7 -13
  68. openstackclient/tests/functional/identity/v3/test_service_provider.py +3 -3
  69. openstackclient/tests/functional/identity/v3/test_user.py +17 -34
  70. openstackclient/tests/functional/image/v2/test_image.py +1 -3
  71. openstackclient/tests/functional/network/v2/common.py +1 -3
  72. openstackclient/tests/functional/network/v2/test_default_security_group_rule.py +3 -8
  73. openstackclient/tests/functional/network/v2/test_l3_conntrack_helper.py +27 -31
  74. openstackclient/tests/functional/network/v2/test_network.py +9 -12
  75. openstackclient/tests/functional/network/v2/test_network_agent.py +15 -20
  76. openstackclient/tests/functional/network/v2/test_network_flavor.py +2 -2
  77. openstackclient/tests/functional/network/v2/test_network_ndp_proxy.py +17 -39
  78. openstackclient/tests/functional/network/v2/test_network_qos_rule.py +48 -63
  79. openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py +1 -1
  80. openstackclient/tests/functional/network/v2/test_network_segment_range.py +2 -2
  81. openstackclient/tests/functional/network/v2/test_network_trunk.py +15 -25
  82. openstackclient/tests/functional/network/v2/test_port.py +28 -34
  83. openstackclient/tests/functional/network/v2/test_router.py +13 -19
  84. openstackclient/tests/functional/object/v1/test_object.py +4 -7
  85. openstackclient/tests/functional/volume/base.py +5 -17
  86. openstackclient/tests/functional/volume/v1/test_volume_type.py +11 -11
  87. openstackclient/tests/functional/volume/v2/test_volume_backup.py +1 -1
  88. openstackclient/tests/functional/volume/v2/test_volume_type.py +13 -15
  89. openstackclient/tests/functional/volume/v3/test_volume_type.py +13 -15
  90. openstackclient/tests/unit/api/test_compute_v2.py +0 -5
  91. openstackclient/tests/unit/api/test_object_store_v1.py +6 -4
  92. openstackclient/tests/unit/common/test_extension.py +24 -31
  93. openstackclient/tests/unit/compute/v2/test_host.py +0 -1
  94. openstackclient/tests/unit/compute/v2/test_server.py +124 -116
  95. openstackclient/tests/unit/identity/v3/test_access_rule.py +65 -64
  96. openstackclient/tests/unit/identity/v3/test_group.py +4 -10
  97. openstackclient/tests/unit/identity/v3/test_limit.py +2 -2
  98. openstackclient/tests/unit/identity/v3/test_service.py +0 -3
  99. openstackclient/tests/unit/identity/v3/test_user.py +4 -90
  100. openstackclient/tests/unit/image/v2/test_metadef_objects.py +1 -2
  101. openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +2 -6
  102. openstackclient/tests/unit/integ/base.py +1 -1
  103. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +3 -3
  104. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +4 -4
  105. openstackclient/tests/unit/network/v2/test_local_ip_association.py +2 -2
  106. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +12 -13
  107. openstackclient/tests/unit/network/v2/test_network_trunk.py +31 -35
  108. openstackclient/tests/unit/network/v2/test_port.py +40 -17
  109. openstackclient/tests/unit/network/v2/test_subnet_pool.py +1 -1
  110. openstackclient/tests/unit/object/v1/test_object.py +1 -1
  111. openstackclient/tests/unit/utils.py +2 -2
  112. openstackclient/volume/client.py +1 -1
  113. openstackclient/volume/v1/volume.py +2 -2
  114. openstackclient/volume/v1/volume_backup.py +2 -2
  115. openstackclient/volume/v1/volume_snapshot.py +2 -2
  116. openstackclient/volume/v2/volume.py +2 -2
  117. openstackclient/volume/v2/volume_backup.py +2 -2
  118. openstackclient/volume/v2/volume_snapshot.py +2 -2
  119. openstackclient/volume/v2/volume_type.py +4 -4
  120. openstackclient/volume/v3/service.py +0 -1
  121. openstackclient/volume/v3/volume.py +3 -3
  122. openstackclient/volume/v3/volume_backup.py +2 -2
  123. openstackclient/volume/v3/volume_group.py +3 -7
  124. openstackclient/volume/v3/volume_type.py +6 -6
  125. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/AUTHORS +3 -0
  126. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/METADATA +2 -3
  127. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/RECORD +132 -131
  128. python_openstackclient-7.2.0.dist-info/pbr.json +1 -0
  129. python_openstackclient-7.1.2.dist-info/pbr.json +0 -1
  130. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/LICENSE +0 -0
  131. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/WHEEL +0 -0
  132. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/entry_points.txt +0 -0
  133. {python_openstackclient-7.1.2.dist-info → python_openstackclient-7.2.0.dist-info}/top_level.txt +0 -0
@@ -78,30 +78,6 @@ class TestServer(compute_fakes.TestComputev2):
78
78
 
79
79
  return servers
80
80
 
81
- def setup_sdk_volumes_mock(self, count):
82
- volumes = volume_fakes.create_sdk_volumes(count=count)
83
-
84
- # This is the return value for volume_client.find_volume()
85
- self.volume_sdk_client.find_volume.side_effect = volumes
86
-
87
- return volumes
88
-
89
- def run_method_with_sdk_servers(self, method_name, server_count):
90
- servers = self.setup_sdk_servers_mock(count=server_count)
91
-
92
- arglist = [s.id for s in servers]
93
- verifylist = [
94
- ('server', arglist),
95
- ]
96
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
97
-
98
- result = self.cmd.take_action(parsed_args)
99
-
100
- calls = [mock.call(s.id) for s in servers]
101
- method = getattr(self.compute_sdk_client, method_name)
102
- method.assert_has_calls(calls)
103
- self.assertIsNone(result)
104
-
105
81
 
106
82
  class TestServerAddFixedIP(TestServer):
107
83
  def setUp(self):
@@ -730,12 +706,15 @@ class TestServerVolume(TestServer):
730
706
  def setUp(self):
731
707
  super().setUp()
732
708
 
733
- self.servers = self.setup_sdk_servers_mock(count=1)
734
- self.volumes = self.setup_sdk_volumes_mock(count=1)
709
+ self.server = compute_fakes.create_one_sdk_server()
710
+ self.compute_sdk_client.find_server.return_value = self.server
711
+
712
+ self.volume = volume_fakes.create_one_sdk_volume()
713
+ self.volume_sdk_client.find_volume.return_value = self.volume
735
714
 
736
715
  attrs = {
737
- 'server_id': self.servers[0].id,
738
- 'volume_id': self.volumes[0].id,
716
+ 'server_id': self.server.id,
717
+ 'volume_id': self.volume.id,
739
718
  }
740
719
  self.volume_attachment = compute_fakes.create_one_volume_attachment(
741
720
  attrs=attrs
@@ -758,12 +737,12 @@ class TestServerAddVolume(TestServerVolume):
758
737
  arglist = [
759
738
  '--device',
760
739
  '/dev/sdb',
761
- self.servers[0].id,
762
- self.volumes[0].id,
740
+ self.server.id,
741
+ self.volume.id,
763
742
  ]
764
743
  verifylist = [
765
- ('server', self.servers[0].id),
766
- ('volume', self.volumes[0].id),
744
+ ('server', self.server.id),
745
+ ('volume', self.volume.id),
767
746
  ('device', '/dev/sdb'),
768
747
  ]
769
748
 
@@ -782,7 +761,7 @@ class TestServerAddVolume(TestServerVolume):
782
761
  self.assertEqual(expected_columns, columns)
783
762
  self.assertEqual(expected_data, data)
784
763
  self.compute_sdk_client.create_volume_attachment.assert_called_once_with(
785
- self.servers[0], volumeId=self.volumes[0].id, device='/dev/sdb'
764
+ self.server, volumeId=self.volume.id, device='/dev/sdb'
786
765
  )
787
766
 
788
767
  def test_server_add_volume_with_tag(self):
@@ -793,12 +772,12 @@ class TestServerAddVolume(TestServerVolume):
793
772
  '/dev/sdb',
794
773
  '--tag',
795
774
  'foo',
796
- self.servers[0].id,
797
- self.volumes[0].id,
775
+ self.server.id,
776
+ self.volume.id,
798
777
  ]
799
778
  verifylist = [
800
- ('server', self.servers[0].id),
801
- ('volume', self.volumes[0].id),
779
+ ('server', self.server.id),
780
+ ('volume', self.volume.id),
802
781
  ('device', '/dev/sdb'),
803
782
  ('tag', 'foo'),
804
783
  ]
@@ -819,8 +798,8 @@ class TestServerAddVolume(TestServerVolume):
819
798
  self.assertEqual(expected_columns, columns)
820
799
  self.assertEqual(expected_data, data)
821
800
  self.compute_sdk_client.create_volume_attachment.assert_called_once_with(
822
- self.servers[0],
823
- volumeId=self.volumes[0].id,
801
+ self.server,
802
+ volumeId=self.volume.id,
824
803
  device='/dev/sdb',
825
804
  tag='foo',
826
805
  )
@@ -829,14 +808,14 @@ class TestServerAddVolume(TestServerVolume):
829
808
  self.set_compute_api_version('2.48')
830
809
 
831
810
  arglist = [
832
- self.servers[0].id,
833
- self.volumes[0].id,
811
+ self.server.id,
812
+ self.volume.id,
834
813
  '--tag',
835
814
  'foo',
836
815
  ]
837
816
  verifylist = [
838
- ('server', self.servers[0].id),
839
- ('volume', self.volumes[0].id),
817
+ ('server', self.server.id),
818
+ ('volume', self.volume.id),
840
819
  ('tag', 'foo'),
841
820
  ]
842
821
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -856,13 +835,13 @@ class TestServerAddVolume(TestServerVolume):
856
835
  '--enable-delete-on-termination',
857
836
  '--device',
858
837
  '/dev/sdb',
859
- self.servers[0].id,
860
- self.volumes[0].id,
838
+ self.server.id,
839
+ self.volume.id,
861
840
  ]
862
841
 
863
842
  verifylist = [
864
- ('server', self.servers[0].id),
865
- ('volume', self.volumes[0].id),
843
+ ('server', self.server.id),
844
+ ('volume', self.volume.id),
866
845
  ('device', '/dev/sdb'),
867
846
  ('enable_delete_on_termination', True),
868
847
  ]
@@ -889,8 +868,8 @@ class TestServerAddVolume(TestServerVolume):
889
868
  self.assertEqual(expected_columns, columns)
890
869
  self.assertEqual(expected_data, data)
891
870
  self.compute_sdk_client.create_volume_attachment.assert_called_once_with(
892
- self.servers[0],
893
- volumeId=self.volumes[0].id,
871
+ self.server,
872
+ volumeId=self.volume.id,
894
873
  device='/dev/sdb',
895
874
  delete_on_termination=True,
896
875
  )
@@ -904,13 +883,13 @@ class TestServerAddVolume(TestServerVolume):
904
883
  '--disable-delete-on-termination',
905
884
  '--device',
906
885
  '/dev/sdb',
907
- self.servers[0].id,
908
- self.volumes[0].id,
886
+ self.server.id,
887
+ self.volume.id,
909
888
  ]
910
889
 
911
890
  verifylist = [
912
- ('server', self.servers[0].id),
913
- ('volume', self.volumes[0].id),
891
+ ('server', self.server.id),
892
+ ('volume', self.volume.id),
914
893
  ('device', '/dev/sdb'),
915
894
  ('disable_delete_on_termination', True),
916
895
  ]
@@ -938,8 +917,8 @@ class TestServerAddVolume(TestServerVolume):
938
917
  self.assertEqual(expected_columns, columns)
939
918
  self.assertEqual(expected_data, data)
940
919
  self.compute_sdk_client.create_volume_attachment.assert_called_once_with(
941
- self.servers[0],
942
- volumeId=self.volumes[0].id,
920
+ self.server,
921
+ volumeId=self.volume.id,
943
922
  device='/dev/sdb',
944
923
  delete_on_termination=False,
945
924
  )
@@ -950,13 +929,13 @@ class TestServerAddVolume(TestServerVolume):
950
929
  self.set_compute_api_version('2.78')
951
930
 
952
931
  arglist = [
953
- self.servers[0].id,
954
- self.volumes[0].id,
932
+ self.server.id,
933
+ self.volume.id,
955
934
  '--enable-delete-on-termination',
956
935
  ]
957
936
  verifylist = [
958
- ('server', self.servers[0].id),
959
- ('volume', self.volumes[0].id),
937
+ ('server', self.server.id),
938
+ ('volume', self.volume.id),
960
939
  ('enable_delete_on_termination', True),
961
940
  ]
962
941
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -974,13 +953,13 @@ class TestServerAddVolume(TestServerVolume):
974
953
  self.set_compute_api_version('2.78')
975
954
 
976
955
  arglist = [
977
- self.servers[0].id,
978
- self.volumes[0].id,
956
+ self.server.id,
957
+ self.volume.id,
979
958
  '--disable-delete-on-termination',
980
959
  ]
981
960
  verifylist = [
982
- ('server', self.servers[0].id),
983
- ('volume', self.volumes[0].id),
961
+ ('server', self.server.id),
962
+ ('volume', self.volume.id),
984
963
  ('disable_delete_on_termination', True),
985
964
  ]
986
965
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1002,13 +981,13 @@ class TestServerAddVolume(TestServerVolume):
1002
981
  '--disable-delete-on-termination',
1003
982
  '--device',
1004
983
  '/dev/sdb',
1005
- self.servers[0].id,
1006
- self.volumes[0].id,
984
+ self.server.id,
985
+ self.volume.id,
1007
986
  ]
1008
987
 
1009
988
  verifylist = [
1010
- ('server', self.servers[0].id),
1011
- ('volume', self.volumes[0].id),
989
+ ('server', self.server.id),
990
+ ('volume', self.volume.id),
1012
991
  ('device', '/dev/sdb'),
1013
992
  ('enable_delete_on_termination', True),
1014
993
  ('disable_delete_on_termination', True),
@@ -1036,13 +1015,13 @@ class TestServerRemoveVolume(TestServerVolume):
1036
1015
 
1037
1016
  def test_server_remove_volume(self):
1038
1017
  arglist = [
1039
- self.servers[0].id,
1040
- self.volumes[0].id,
1018
+ self.server.id,
1019
+ self.volume.id,
1041
1020
  ]
1042
1021
 
1043
1022
  verifylist = [
1044
- ('server', self.servers[0].id),
1045
- ('volume', self.volumes[0].id),
1023
+ ('server', self.server.id),
1024
+ ('volume', self.volume.id),
1046
1025
  ]
1047
1026
 
1048
1027
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1051,8 +1030,8 @@ class TestServerRemoveVolume(TestServerVolume):
1051
1030
 
1052
1031
  self.assertIsNone(result)
1053
1032
  self.compute_sdk_client.delete_volume_attachment.assert_called_once_with(
1054
- self.volumes[0],
1055
- self.servers[0],
1033
+ self.volume,
1034
+ self.server,
1056
1035
  ignore_missing=False,
1057
1036
  )
1058
1037
 
@@ -1166,7 +1145,7 @@ class TestServerAddSecurityGroup(compute_fakes.TestComputev2):
1166
1145
  arglist = [self.server.id, 'fake_sg']
1167
1146
  verifylist = [
1168
1147
  ('server', self.server.id),
1169
- ('group', 'fake_sg'),
1148
+ ('security_groups', ['fake_sg']),
1170
1149
  ]
1171
1150
 
1172
1151
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1197,7 +1176,7 @@ class TestServerAddSecurityGroup(compute_fakes.TestComputev2):
1197
1176
  arglist = [self.server.id, 'fake_sg']
1198
1177
  verifylist = [
1199
1178
  ('server', self.server.id),
1200
- ('group', 'fake_sg'),
1179
+ ('security_groups', ['fake_sg']),
1201
1180
  ]
1202
1181
 
1203
1182
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1429,7 +1408,7 @@ class TestServerCreate(TestServer):
1429
1408
  ('flavor', self.flavor.id),
1430
1409
  ('key_name', 'keyname'),
1431
1410
  ('properties', {'Beta': 'b'}),
1432
- ('security_group', [security_group.id]),
1411
+ ('security_groups', [security_group.id]),
1433
1412
  ('hints', {'a': ['b', 'c']}),
1434
1413
  ('server_group', server_group.id),
1435
1414
  ('config_drive', True),
@@ -1499,7 +1478,7 @@ class TestServerCreate(TestServer):
1499
1478
  ('image', self.image.id),
1500
1479
  ('flavor', self.flavor.id),
1501
1480
  ('key_name', 'keyname'),
1502
- ('security_group', ['not_exist_sg']),
1481
+ ('security_groups', ['not_exist_sg']),
1503
1482
  ('server_name', self.server.name),
1504
1483
  ]
1505
1484
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1525,7 +1504,7 @@ class TestServerCreate(TestServer):
1525
1504
  verifylist = [
1526
1505
  ('image', self.image.id),
1527
1506
  ('flavor', self.flavor.id),
1528
- ('security_group', [sg_name]),
1507
+ ('security_groups', [sg_name]),
1529
1508
  ('server_name', self.server.name),
1530
1509
  ]
1531
1510
 
@@ -4581,7 +4560,7 @@ class _TestServerList(TestServer):
4581
4560
  'status': None,
4582
4561
  'flavor': None,
4583
4562
  'image': None,
4584
- 'host': None,
4563
+ 'compute_host': None,
4585
4564
  'project_id': None,
4586
4565
  'all_projects': False,
4587
4566
  'user_id': None,
@@ -5476,14 +5455,28 @@ class TestServerListV273(_TestServerList):
5476
5455
  self.assertEqual(expected_row, partial_server)
5477
5456
 
5478
5457
 
5479
- class TestServerLock(TestServer):
5480
- def setUp(self):
5481
- super().setUp()
5458
+ class TestServerAction(compute_fakes.TestComputev2):
5459
+ def run_method_with_sdk_servers(self, method_name, server_count):
5460
+ servers = compute_fakes.create_sdk_servers(count=server_count)
5461
+ self.compute_sdk_client.find_server.side_effect = servers
5482
5462
 
5483
- self.server = compute_fakes.create_one_sdk_server()
5463
+ arglist = [s.id for s in servers]
5464
+ verifylist = [
5465
+ ('server', arglist),
5466
+ ]
5484
5467
 
5485
- self.compute_sdk_client.find_server.return_value = self.server
5486
- self.compute_sdk_client.lock_server.return_value = None
5468
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5469
+ result = self.cmd.take_action(parsed_args)
5470
+
5471
+ calls = [mock.call(s.id) for s in servers]
5472
+ method = getattr(self.compute_sdk_client, method_name)
5473
+ method.assert_has_calls(calls)
5474
+ self.assertIsNone(result)
5475
+
5476
+
5477
+ class TestServerLock(TestServerAction):
5478
+ def setUp(self):
5479
+ super().setUp()
5487
5480
 
5488
5481
  # Get the command object to test
5489
5482
  self.cmd = server.LockServer(self.app, None)
@@ -5497,6 +5490,10 @@ class TestServerLock(TestServer):
5497
5490
  def test_server_lock_with_reason(self):
5498
5491
  self.set_compute_api_version('2.73')
5499
5492
 
5493
+ self.server = compute_fakes.create_one_sdk_server()
5494
+ self.compute_sdk_client.find_server.return_value = self.server
5495
+ self.compute_sdk_client.lock_server.return_value = None
5496
+
5500
5497
  arglist = [
5501
5498
  self.server.id,
5502
5499
  '--reason',
@@ -5506,8 +5503,10 @@ class TestServerLock(TestServer):
5506
5503
  ('server', [self.server.id]),
5507
5504
  ('reason', 'blah'),
5508
5505
  ]
5506
+
5509
5507
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5510
5508
  self.cmd.take_action(parsed_args)
5509
+
5511
5510
  self.compute_sdk_client.find_server.assert_called_with(
5512
5511
  self.server.id,
5513
5512
  ignore_missing=False,
@@ -5520,30 +5519,38 @@ class TestServerLock(TestServer):
5520
5519
  def test_server_lock_with_reason_multi_servers(self):
5521
5520
  self.set_compute_api_version('2.73')
5522
5521
 
5523
- server2 = compute_fakes.create_one_sdk_server()
5522
+ server_a = compute_fakes.create_one_sdk_server()
5523
+ server_b = compute_fakes.create_one_sdk_server()
5524
+
5525
+ self.compute_sdk_client.find_server.side_effect = [server_a, server_b]
5526
+ self.compute_sdk_client.lock_server.return_value = None
5524
5527
  arglist = [
5525
- self.server.id,
5526
- server2.id,
5528
+ server_a.id,
5529
+ server_b.id,
5527
5530
  '--reason',
5528
5531
  'choo..choo',
5529
5532
  ]
5530
5533
  verifylist = [
5531
- ('server', [self.server.id, server2.id]),
5534
+ ('server', [server_a.id, server_b.id]),
5532
5535
  ('reason', 'choo..choo'),
5533
5536
  ]
5537
+
5534
5538
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5535
5539
  self.cmd.take_action(parsed_args)
5540
+
5536
5541
  self.assertEqual(2, self.compute_sdk_client.find_server.call_count)
5537
- self.compute_sdk_client.lock_server.assert_called_with(
5538
- self.server.id,
5539
- locked_reason="choo..choo",
5542
+ self.compute_sdk_client.lock_server.assert_has_calls(
5543
+ [
5544
+ mock.call(server_a.id, locked_reason="choo..choo"),
5545
+ mock.call(server_b.id, locked_reason="choo..choo"),
5546
+ ]
5540
5547
  )
5541
- self.assertEqual(2, self.compute_sdk_client.lock_server.call_count)
5542
5548
 
5543
5549
  def test_server_lock_with_reason_pre_v273(self):
5544
5550
  self.set_compute_api_version('2.72')
5545
5551
 
5546
5552
  server = compute_fakes.create_one_sdk_server()
5553
+
5547
5554
  arglist = [
5548
5555
  server.id,
5549
5556
  '--reason',
@@ -5553,6 +5560,7 @@ class TestServerLock(TestServer):
5553
5560
  ('server', [server.id]),
5554
5561
  ('reason', "blah"),
5555
5562
  ]
5563
+
5556
5564
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5557
5565
  ex = self.assertRaises(
5558
5566
  exceptions.CommandError,
@@ -6089,7 +6097,7 @@ class TestServerReboot(TestServer):
6089
6097
  )
6090
6098
 
6091
6099
 
6092
- class TestServerPause(TestServer):
6100
+ class TestServerPause(TestServerAction):
6093
6101
  def setUp(self):
6094
6102
  super().setUp()
6095
6103
 
@@ -7363,9 +7371,7 @@ class TestServerRemoveSecurityGroup(TestServer):
7363
7371
 
7364
7372
  self.server = compute_fakes.create_one_sdk_server()
7365
7373
  self.compute_sdk_client.find_server.return_value = self.server
7366
- self.compute_sdk_client.remove_security_group_from_server.return_value = (
7367
- None
7368
- )
7374
+ self.compute_sdk_client.remove_security_group_from_server.return_value = None
7369
7375
 
7370
7376
  # Get the command object to test
7371
7377
  self.cmd = server.RemoveServerSecurityGroup(self.app, None)
@@ -7374,7 +7380,7 @@ class TestServerRemoveSecurityGroup(TestServer):
7374
7380
  arglist = [self.server.id, 'fake_sg']
7375
7381
  verifylist = [
7376
7382
  ('server', self.server.id),
7377
- ('group', 'fake_sg'),
7383
+ ('security_groups', ['fake_sg']),
7378
7384
  ]
7379
7385
 
7380
7386
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -7405,7 +7411,7 @@ class TestServerRemoveSecurityGroup(TestServer):
7405
7411
  arglist = [self.server.id, 'fake_sg']
7406
7412
  verifylist = [
7407
7413
  ('server', self.server.id),
7408
- ('group', 'fake_sg'),
7414
+ ('security_groups', ['fake_sg']),
7409
7415
  ]
7410
7416
 
7411
7417
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -7830,7 +7836,7 @@ class TestServerRevertMigration(compute_fakes.TestComputev2):
7830
7836
  self.assertIsNone(result)
7831
7837
 
7832
7838
 
7833
- class TestServerRestore(TestServer):
7839
+ class TestServerRestore(TestServerAction):
7834
7840
  def setUp(self):
7835
7841
  super().setUp()
7836
7842
 
@@ -7844,7 +7850,7 @@ class TestServerRestore(TestServer):
7844
7850
  self.run_method_with_sdk_servers('restore_server', 3)
7845
7851
 
7846
7852
 
7847
- class TestServerResume(TestServer):
7853
+ class TestServerResume(TestServerAction):
7848
7854
  def setUp(self):
7849
7855
  super().setUp()
7850
7856
 
@@ -8713,7 +8719,7 @@ class TestServerSsh(TestServer):
8713
8719
  )
8714
8720
 
8715
8721
 
8716
- class TestServerStart(TestServer):
8722
+ class TestServerStart(TestServerAction):
8717
8723
  def setUp(self):
8718
8724
  super().setUp()
8719
8725
 
@@ -8727,28 +8733,29 @@ class TestServerStart(TestServer):
8727
8733
  self.run_method_with_sdk_servers('start_server', 3)
8728
8734
 
8729
8735
  def test_server_start_with_all_projects(self):
8730
- servers = self.setup_sdk_servers_mock(count=1)
8736
+ server = compute_fakes.create_one_sdk_server()
8737
+ self.compute_sdk_client.find_server.return_value = server
8731
8738
 
8732
8739
  arglist = [
8733
- servers[0].id,
8740
+ server.id,
8734
8741
  '--all-projects',
8735
8742
  ]
8736
8743
  verifylist = [
8737
- ('server', [servers[0].id]),
8744
+ ('server', [server.id]),
8738
8745
  ]
8739
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
8740
8746
 
8747
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
8741
8748
  self.cmd.take_action(parsed_args)
8742
8749
 
8743
8750
  self.compute_sdk_client.find_server.assert_called_once_with(
8744
- servers[0].id,
8751
+ server.id,
8745
8752
  ignore_missing=False,
8746
8753
  details=False,
8747
8754
  all_projects=True,
8748
8755
  )
8749
8756
 
8750
8757
 
8751
- class TestServerStop(TestServer):
8758
+ class TestServerStop(TestServerAction):
8752
8759
  def setUp(self):
8753
8760
  super().setUp()
8754
8761
 
@@ -8762,28 +8769,29 @@ class TestServerStop(TestServer):
8762
8769
  self.run_method_with_sdk_servers('stop_server', 3)
8763
8770
 
8764
8771
  def test_server_start_with_all_projects(self):
8765
- servers = self.setup_sdk_servers_mock(count=1)
8772
+ server = compute_fakes.create_one_sdk_server()
8773
+ self.compute_sdk_client.find_server.return_value = server
8766
8774
 
8767
8775
  arglist = [
8768
- servers[0].id,
8776
+ server.id,
8769
8777
  '--all-projects',
8770
8778
  ]
8771
8779
  verifylist = [
8772
- ('server', [servers[0].id]),
8780
+ ('server', [server.id]),
8773
8781
  ]
8774
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
8775
8782
 
8783
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
8776
8784
  self.cmd.take_action(parsed_args)
8777
8785
 
8778
8786
  self.compute_sdk_client.find_server.assert_called_once_with(
8779
- servers[0].id,
8787
+ server.id,
8780
8788
  ignore_missing=False,
8781
8789
  details=False,
8782
8790
  all_projects=True,
8783
8791
  )
8784
8792
 
8785
8793
 
8786
- class TestServerSuspend(TestServer):
8794
+ class TestServerSuspend(TestServerAction):
8787
8795
  def setUp(self):
8788
8796
  super().setUp()
8789
8797
 
@@ -8797,7 +8805,7 @@ class TestServerSuspend(TestServer):
8797
8805
  self.run_method_with_sdk_servers('suspend_server', 3)
8798
8806
 
8799
8807
 
8800
- class TestServerUnlock(TestServer):
8808
+ class TestServerUnlock(TestServerAction):
8801
8809
  def setUp(self):
8802
8810
  super().setUp()
8803
8811
 
@@ -8811,7 +8819,7 @@ class TestServerUnlock(TestServer):
8811
8819
  self.run_method_with_sdk_servers('unlock_server', 3)
8812
8820
 
8813
8821
 
8814
- class TestServerUnpause(TestServer):
8822
+ class TestServerUnpause(TestServerAction):
8815
8823
  def setUp(self):
8816
8824
  super().setUp()
8817
8825