python-openstackclient 8.1.0__py3-none-any.whl → 8.3.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 (241) hide show
  1. openstackclient/api/compute_v2.py +2 -2
  2. openstackclient/api/object_store_v1.py +4 -1
  3. openstackclient/api/volume_v2.py +60 -0
  4. openstackclient/api/volume_v3.py +60 -0
  5. openstackclient/command.py +27 -0
  6. openstackclient/common/availability_zone.py +1 -1
  7. openstackclient/common/clientmanager.py +59 -21
  8. openstackclient/common/configuration.py +1 -1
  9. openstackclient/common/extension.py +1 -1
  10. openstackclient/common/limits.py +1 -1
  11. openstackclient/common/module.py +4 -2
  12. openstackclient/common/project_cleanup.py +10 -8
  13. openstackclient/common/quota.py +23 -6
  14. openstackclient/common/versions.py +1 -2
  15. openstackclient/compute/v2/agent.py +1 -1
  16. openstackclient/compute/v2/aggregate.py +6 -5
  17. openstackclient/compute/v2/console.py +5 -3
  18. openstackclient/compute/v2/console_connection.py +1 -1
  19. openstackclient/compute/v2/flavor.py +15 -2
  20. openstackclient/compute/v2/host.py +1 -1
  21. openstackclient/compute/v2/hypervisor.py +1 -1
  22. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  23. openstackclient/compute/v2/keypair.py +1 -1
  24. openstackclient/compute/v2/server.py +77 -30
  25. openstackclient/compute/v2/server_backup.py +1 -1
  26. openstackclient/compute/v2/server_event.py +1 -1
  27. openstackclient/compute/v2/server_group.py +4 -2
  28. openstackclient/compute/v2/server_image.py +1 -1
  29. openstackclient/compute/v2/server_migration.py +1 -1
  30. openstackclient/compute/v2/server_volume.py +1 -1
  31. openstackclient/compute/v2/service.py +1 -1
  32. openstackclient/compute/v2/usage.py +6 -4
  33. openstackclient/identity/common.py +10 -14
  34. openstackclient/identity/v2_0/catalog.py +3 -2
  35. openstackclient/identity/v2_0/ec2creds.py +1 -1
  36. openstackclient/identity/v2_0/endpoint.py +1 -1
  37. openstackclient/identity/v2_0/project.py +17 -7
  38. openstackclient/identity/v2_0/role.py +1 -1
  39. openstackclient/identity/v2_0/role_assignment.py +3 -3
  40. openstackclient/identity/v2_0/service.py +1 -1
  41. openstackclient/identity/v2_0/token.py +1 -1
  42. openstackclient/identity/v2_0/user.py +2 -2
  43. openstackclient/identity/v3/access_rule.py +16 -4
  44. openstackclient/identity/v3/application_credential.py +116 -95
  45. openstackclient/identity/v3/catalog.py +3 -3
  46. openstackclient/identity/v3/consumer.py +1 -1
  47. openstackclient/identity/v3/credential.py +1 -1
  48. openstackclient/identity/v3/domain.py +15 -10
  49. openstackclient/identity/v3/ec2creds.py +1 -1
  50. openstackclient/identity/v3/endpoint.py +33 -12
  51. openstackclient/identity/v3/endpoint_group.py +1 -1
  52. openstackclient/identity/v3/federation_protocol.py +1 -1
  53. openstackclient/identity/v3/group.py +11 -5
  54. openstackclient/identity/v3/identity_provider.py +12 -10
  55. openstackclient/identity/v3/implied_role.py +1 -1
  56. openstackclient/identity/v3/limit.py +1 -1
  57. openstackclient/identity/v3/mapping.py +1 -1
  58. openstackclient/identity/v3/policy.py +1 -1
  59. openstackclient/identity/v3/project.py +34 -22
  60. openstackclient/identity/v3/region.py +1 -1
  61. openstackclient/identity/v3/registered_limit.py +16 -11
  62. openstackclient/identity/v3/role.py +27 -41
  63. openstackclient/identity/v3/role_assignment.py +12 -23
  64. openstackclient/identity/v3/service.py +1 -1
  65. openstackclient/identity/v3/service_provider.py +1 -1
  66. openstackclient/identity/v3/tag.py +3 -2
  67. openstackclient/identity/v3/token.py +3 -2
  68. openstackclient/identity/v3/trust.py +4 -2
  69. openstackclient/identity/v3/unscoped_saml.py +1 -1
  70. openstackclient/identity/v3/user.py +22 -13
  71. openstackclient/image/v1/image.py +35 -17
  72. openstackclient/image/v2/cache.py +11 -7
  73. openstackclient/image/v2/image.py +62 -12
  74. openstackclient/image/v2/info.py +1 -1
  75. openstackclient/image/v2/metadef_namespaces.py +1 -1
  76. openstackclient/image/v2/metadef_objects.py +9 -3
  77. openstackclient/image/v2/metadef_properties.py +11 -3
  78. openstackclient/image/v2/metadef_resource_type_association.py +1 -1
  79. openstackclient/image/v2/metadef_resource_types.py +1 -1
  80. openstackclient/image/v2/task.py +1 -1
  81. openstackclient/network/common.py +10 -9
  82. openstackclient/network/v2/address_group.py +4 -3
  83. openstackclient/network/v2/address_scope.py +8 -6
  84. openstackclient/network/v2/default_security_group_rule.py +9 -8
  85. openstackclient/network/v2/floating_ip.py +16 -9
  86. openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
  87. openstackclient/network/v2/ip_availability.py +7 -4
  88. openstackclient/network/v2/l3_conntrack_helper.py +11 -4
  89. openstackclient/network/v2/local_ip.py +13 -7
  90. openstackclient/network/v2/local_ip_association.py +7 -4
  91. openstackclient/network/v2/ndp_proxy.py +13 -6
  92. openstackclient/network/v2/network.py +33 -16
  93. openstackclient/network/v2/network_agent.py +5 -5
  94. openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
  95. openstackclient/network/v2/network_flavor.py +1 -1
  96. openstackclient/network/v2/network_flavor_profile.py +1 -1
  97. openstackclient/network/v2/network_meter.py +1 -1
  98. openstackclient/network/v2/network_meter_rule.py +1 -1
  99. openstackclient/network/v2/network_qos_policy.py +7 -5
  100. openstackclient/network/v2/network_qos_rule.py +1 -1
  101. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  102. openstackclient/network/v2/network_rbac.py +8 -5
  103. openstackclient/network/v2/network_segment.py +2 -2
  104. openstackclient/network/v2/network_segment_range.py +13 -6
  105. openstackclient/network/v2/network_service_provider.py +1 -1
  106. openstackclient/network/v2/network_trunk.py +65 -42
  107. openstackclient/network/v2/port.py +38 -20
  108. openstackclient/network/v2/router.py +19 -8
  109. openstackclient/network/v2/security_group.py +52 -7
  110. openstackclient/network/v2/security_group_rule.py +27 -4
  111. openstackclient/network/v2/subnet.py +17 -18
  112. openstackclient/network/v2/subnet_pool.py +11 -9
  113. openstackclient/network/v2/taas/__init__.py +0 -0
  114. openstackclient/network/v2/taas/tap_flow.py +245 -0
  115. openstackclient/network/v2/taas/tap_mirror.py +237 -0
  116. openstackclient/network/v2/taas/tap_service.py +211 -0
  117. openstackclient/object/v1/account.py +1 -1
  118. openstackclient/object/v1/container.py +1 -1
  119. openstackclient/object/v1/object.py +1 -1
  120. openstackclient/shell.py +18 -8
  121. openstackclient/tests/functional/identity/v3/test_access_rule.py +1 -1
  122. openstackclient/tests/functional/identity/v3/test_application_credential.py +7 -7
  123. openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
  124. openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
  125. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  126. openstackclient/tests/functional/image/v2/test_image.py +36 -14
  127. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  128. openstackclient/tests/functional/volume/v2/test_volume.py +1 -1
  129. openstackclient/tests/functional/volume/v3/test_volume.py +2 -2
  130. openstackclient/tests/unit/api/test_volume_v2.py +124 -0
  131. openstackclient/tests/unit/api/test_volume_v3.py +124 -0
  132. openstackclient/tests/unit/common/test_command.py +1 -1
  133. openstackclient/tests/unit/common/test_extension.py +2 -3
  134. openstackclient/tests/unit/common/test_module.py +14 -7
  135. openstackclient/tests/unit/common/test_quota.py +20 -0
  136. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  137. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  138. openstackclient/tests/unit/compute/v2/test_flavor.py +160 -177
  139. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  140. openstackclient/tests/unit/compute/v2/test_server.py +406 -81
  141. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  142. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  143. openstackclient/tests/unit/fakes.py +35 -134
  144. openstackclient/tests/unit/identity/test_common.py +100 -0
  145. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  146. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  147. openstackclient/tests/unit/identity/v3/test_application_credential.py +50 -44
  148. openstackclient/tests/unit/identity/v3/test_domain.py +3 -3
  149. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  150. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  151. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  152. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  153. openstackclient/tests/unit/identity/v3/test_project.py +31 -54
  154. openstackclient/tests/unit/identity/v3/test_registered_limit.py +2 -2
  155. openstackclient/tests/unit/identity/v3/test_role.py +3 -90
  156. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  157. openstackclient/tests/unit/image/v1/test_image.py +47 -0
  158. openstackclient/tests/unit/image/v2/test_image.py +190 -9
  159. openstackclient/tests/unit/image/v2/test_metadef_objects.py +22 -0
  160. openstackclient/tests/unit/image/v2/test_metadef_properties.py +24 -10
  161. openstackclient/tests/unit/network/test_common.py +9 -13
  162. openstackclient/tests/unit/network/v2/fakes.py +1 -0
  163. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  164. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  165. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  166. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  167. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  168. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  169. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  170. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  171. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  172. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  173. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  174. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  175. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  176. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -23
  177. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  178. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  179. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  180. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  181. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  182. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  183. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  184. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  185. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  186. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  187. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  188. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  189. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  190. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  191. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  192. openstackclient/tests/unit/network/v2/test_port.py +113 -84
  193. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  194. openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -26
  195. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +66 -18
  196. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  197. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  198. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  199. openstackclient/tests/unit/volume/v2/test_volume.py +358 -305
  200. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  201. openstackclient/tests/unit/volume/v3/test_volume.py +443 -415
  202. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  203. openstackclient/volume/client.py +7 -17
  204. openstackclient/volume/v2/backup_record.py +1 -1
  205. openstackclient/volume/v2/consistency_group.py +1 -1
  206. openstackclient/volume/v2/consistency_group_snapshot.py +1 -1
  207. openstackclient/volume/v2/qos_specs.py +1 -1
  208. openstackclient/volume/v2/service.py +2 -2
  209. openstackclient/volume/v2/volume.py +80 -54
  210. openstackclient/volume/v2/volume_backend.py +1 -1
  211. openstackclient/volume/v2/volume_backup.py +5 -3
  212. openstackclient/volume/v2/volume_host.py +1 -2
  213. openstackclient/volume/v2/volume_snapshot.py +2 -2
  214. openstackclient/volume/v2/volume_transfer_request.py +1 -1
  215. openstackclient/volume/v2/volume_type.py +11 -6
  216. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  217. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  218. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  219. openstackclient/volume/v3/block_storage_manage.py +1 -1
  220. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  221. openstackclient/volume/v3/service.py +2 -2
  222. openstackclient/volume/v3/volume.py +104 -77
  223. openstackclient/volume/v3/volume_attachment.py +6 -5
  224. openstackclient/volume/v3/volume_backup.py +18 -3
  225. openstackclient/volume/v3/volume_group.py +2 -2
  226. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  227. openstackclient/volume/v3/volume_group_type.py +1 -1
  228. openstackclient/volume/v3/volume_message.py +1 -1
  229. openstackclient/volume/v3/volume_snapshot.py +2 -2
  230. openstackclient/volume/v3/volume_transfer_request.py +1 -1
  231. openstackclient/volume/v3/volume_type.py +15 -9
  232. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/METADATA +19 -17
  233. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/RECORD +239 -224
  234. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/WHEEL +1 -1
  235. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/entry_points.txt +15 -0
  236. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/AUTHORS +15 -0
  237. python_openstackclient-8.3.0.dist-info/pbr.json +1 -0
  238. openstackclient/tests/unit/common/test_logs.py +0 -221
  239. python_openstackclient-8.1.0.dist-info/pbr.json +0 -1
  240. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/LICENSE +0 -0
  241. {python_openstackclient-8.1.0.dist-info → python_openstackclient-8.3.0.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,6 @@
13
13
  # under the License.
14
14
 
15
15
  import base64
16
- import collections
17
16
  import getpass
18
17
  import json
19
18
  import tempfile
@@ -21,9 +20,11 @@ from unittest import mock
21
20
  import uuid
22
21
 
23
22
  import iso8601
23
+ from openstack.compute.v2 import flavor as _flavor
24
24
  from openstack.compute.v2 import server as _server
25
25
  from openstack.compute.v2 import server_group as _server_group
26
26
  from openstack import exceptions as sdk_exceptions
27
+ from openstack.image.v2 import image as _image
27
28
  from openstack.test import fakes as sdk_fakes
28
29
  from osc_lib.cli import format_columns
29
30
  from osc_lib import exceptions
@@ -89,10 +90,6 @@ class TestServerAddFixedIP(TestServer):
89
90
  # Get the command object to test
90
91
  self.cmd = server.AddFixedIP(self.app, None)
91
92
 
92
- # Mock network methods
93
- self.find_network = mock.Mock()
94
- self.app.client_manager.network.find_network = self.find_network
95
-
96
93
  def test_server_add_fixed_ip_pre_v249_with_tag(self):
97
94
  self.set_compute_api_version('2.48')
98
95
 
@@ -408,7 +405,7 @@ class TestServerAddFloatingIPNetwork(
408
405
  self.server = compute_fakes.create_one_server()
409
406
  self.compute_client.find_server.return_value = self.server
410
407
 
411
- self.network_client.update_ip = mock.Mock(return_value=None)
408
+ self.network_client.update_ip.return_value = None
412
409
 
413
410
  # Get the command object to test
414
411
  self.cmd = server.AddFloatingIP(self.app, None)
@@ -416,8 +413,8 @@ class TestServerAddFloatingIPNetwork(
416
413
  def test_server_add_floating_ip(self):
417
414
  _port = network_fakes.create_one_port()
418
415
  _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
419
- self.network_client.find_ip = mock.Mock(return_value=_floating_ip)
420
- self.network_client.ports = mock.Mock(return_value=[_port])
416
+ self.network_client.find_ip.return_value = _floating_ip
417
+ self.network_client.ports.return_value = [_port]
421
418
  arglist = [
422
419
  self.server.id,
423
420
  _floating_ip['floating_ip_address'],
@@ -448,8 +445,8 @@ class TestServerAddFloatingIPNetwork(
448
445
  def test_server_add_floating_ip_no_ports(self):
449
446
  floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
450
447
 
451
- self.network_client.find_ip = mock.Mock(return_value=floating_ip)
452
- self.network_client.ports = mock.Mock(return_value=[])
448
+ self.network_client.find_ip.return_value = floating_ip
449
+ self.network_client.ports.return_value = []
453
450
 
454
451
  arglist = [
455
452
  self.server.id,
@@ -479,17 +476,17 @@ class TestServerAddFloatingIPNetwork(
479
476
  def test_server_add_floating_ip_no_external_gateway(self, success=False):
480
477
  _port = network_fakes.create_one_port()
481
478
  _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
482
- self.network_client.find_ip = mock.Mock(return_value=_floating_ip)
479
+ self.network_client.find_ip.return_value = _floating_ip
483
480
  return_value = [_port]
484
481
  # In the success case, we'll have two ports, where the first port is
485
482
  # not attached to an external gateway but the second port is.
486
483
  if success:
487
484
  return_value.append(_port)
488
- self.network_client.ports = mock.Mock(return_value=return_value)
485
+ self.network_client.ports.return_value = return_value
489
486
  side_effect = [sdk_exceptions.NotFoundException()]
490
487
  if success:
491
488
  side_effect.append(None)
492
- self.network_client.update_ip = mock.Mock(side_effect=side_effect)
489
+ self.network_client.update_ip.side_effect = side_effect
493
490
  arglist = [
494
491
  self.server.id,
495
492
  _floating_ip['floating_ip_address'],
@@ -535,8 +532,8 @@ class TestServerAddFloatingIPNetwork(
535
532
  def test_server_add_floating_ip_with_fixed_ip(self):
536
533
  _port = network_fakes.create_one_port()
537
534
  _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
538
- self.network_client.find_ip = mock.Mock(return_value=_floating_ip)
539
- self.network_client.ports = mock.Mock(return_value=[_port])
535
+ self.network_client.find_ip.return_value = _floating_ip
536
+ self.network_client.ports.return_value = [_port]
540
537
  # The user has specified a fixed ip that matches one of the ports
541
538
  # already attached to the instance.
542
539
  arglist = [
@@ -575,8 +572,8 @@ class TestServerAddFloatingIPNetwork(
575
572
  def test_server_add_floating_ip_with_fixed_ip_no_port_found(self):
576
573
  _port = network_fakes.create_one_port()
577
574
  _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
578
- self.network_client.find_ip = mock.Mock(return_value=_floating_ip)
579
- self.network_client.ports = mock.Mock(return_value=[_port])
575
+ self.network_client.find_ip.return_value = _floating_ip
576
+ self.network_client.ports.return_value = [_port]
580
577
  # The user has specified a fixed ip that does not match any of the
581
578
  # ports already attached to the instance.
582
579
  nonexistent_ip = '10.0.0.9'
@@ -614,9 +611,6 @@ class TestServerAddPort(TestServer):
614
611
  # Get the command object to test
615
612
  self.cmd = server.AddPort(self.app, None)
616
613
 
617
- self.find_port = mock.Mock()
618
- self.app.client_manager.network.find_port = self.find_port
619
-
620
614
  def _test_server_add_port(self, port_id):
621
615
  servers = self.setup_sdk_servers_mock(count=1)
622
616
  port = 'fake-port'
@@ -636,21 +630,23 @@ class TestServerAddPort(TestServer):
636
630
  self.assertIsNone(result)
637
631
 
638
632
  def test_server_add_port(self):
639
- self._test_server_add_port(self.find_port.return_value.id)
640
- self.find_port.assert_called_once_with(
633
+ self._test_server_add_port(
634
+ self.network_client.find_port.return_value.id
635
+ )
636
+ self.network_client.find_port.assert_called_once_with(
641
637
  'fake-port', ignore_missing=False
642
638
  )
643
639
 
644
640
  def test_server_add_port_no_neutron(self):
645
641
  self.app.client_manager.network_endpoint_enabled = False
646
642
  self._test_server_add_port('fake-port')
647
- self.find_port.assert_not_called()
643
+ self.network_client.find_port.assert_not_called()
648
644
 
649
645
  def test_server_add_port_with_tag(self):
650
646
  self.set_compute_api_version('2.49')
651
647
 
652
648
  servers = self.setup_sdk_servers_mock(count=1)
653
- self.find_port.return_value.id = 'fake-port'
649
+ self.network_client.find_port.return_value.id = 'fake-port'
654
650
  arglist = [
655
651
  servers[0].id,
656
652
  'fake-port',
@@ -675,7 +671,7 @@ class TestServerAddPort(TestServer):
675
671
  self.set_compute_api_version('2.48')
676
672
 
677
673
  servers = self.setup_sdk_servers_mock(count=1)
678
- self.find_port.return_value.id = 'fake-port'
674
+ self.network_client.find_port.return_value.id = 'fake-port'
679
675
  arglist = [
680
676
  servers[0].id,
681
677
  'fake-port',
@@ -1038,9 +1034,6 @@ class TestServerAddNetwork(TestServer):
1038
1034
  # Get the command object to test
1039
1035
  self.cmd = server.AddNetwork(self.app, None)
1040
1036
 
1041
- self.find_network = mock.Mock()
1042
- self.app.client_manager.network.find_network = self.find_network
1043
-
1044
1037
  def _test_server_add_network(self, net_id):
1045
1038
  servers = self.setup_sdk_servers_mock(count=1)
1046
1039
  network = 'fake-network'
@@ -1060,21 +1053,23 @@ class TestServerAddNetwork(TestServer):
1060
1053
  self.assertIsNone(result)
1061
1054
 
1062
1055
  def test_server_add_network(self):
1063
- self._test_server_add_network(self.find_network.return_value.id)
1064
- self.find_network.assert_called_once_with(
1056
+ self._test_server_add_network(
1057
+ self.network_client.find_network.return_value.id
1058
+ )
1059
+ self.network_client.find_network.assert_called_once_with(
1065
1060
  'fake-network', ignore_missing=False
1066
1061
  )
1067
1062
 
1068
1063
  def test_server_add_network_no_neutron(self):
1069
1064
  self.app.client_manager.network_endpoint_enabled = False
1070
1065
  self._test_server_add_network('fake-network')
1071
- self.find_network.assert_not_called()
1066
+ self.network_client.find_network.assert_not_called()
1072
1067
 
1073
1068
  def test_server_add_network_with_tag(self):
1074
1069
  self.set_compute_api_version('2.49')
1075
1070
 
1076
1071
  servers = self.setup_sdk_servers_mock(count=1)
1077
- self.find_network.return_value.id = 'fake-network'
1072
+ self.network_client.find_network.return_value.id = 'fake-network'
1078
1073
 
1079
1074
  arglist = [
1080
1075
  servers[0].id,
@@ -1100,7 +1095,7 @@ class TestServerAddNetwork(TestServer):
1100
1095
  self.set_compute_api_version('2.48')
1101
1096
 
1102
1097
  servers = self.setup_sdk_servers_mock(count=1)
1103
- self.find_network.return_value.id = 'fake-network'
1098
+ self.network_client.find_network.return_value.id = 'fake-network'
1104
1099
 
1105
1100
  arglist = [
1106
1101
  servers[0].id,
@@ -1218,7 +1213,6 @@ class TestServerCreate(TestServer):
1218
1213
  'locked',
1219
1214
  'locked_reason',
1220
1215
  'name',
1221
- 'pinned_availability_zone',
1222
1216
  'progress',
1223
1217
  'project_id',
1224
1218
  'properties',
@@ -1267,7 +1261,6 @@ class TestServerCreate(TestServer):
1267
1261
  None, # locked
1268
1262
  None, # locked_reason
1269
1263
  self.server.name,
1270
- None, # pinned_availability_zone
1271
1264
  None, # progress
1272
1265
  None, # project_id
1273
1266
  format_columns.DictColumn({}), # properties
@@ -4456,6 +4449,55 @@ class TestServerDelete(compute_fakes.TestComputev2):
4456
4449
  )
4457
4450
  self.assertIsNone(result)
4458
4451
 
4452
+ def test_server_delete_multi_servers_with_exceptions(self):
4453
+ servers = compute_fakes.create_servers(count=2)
4454
+ self.compute_client.find_server.side_effect = [
4455
+ servers[0],
4456
+ sdk_exceptions.ResourceNotFound(),
4457
+ servers[1],
4458
+ ]
4459
+
4460
+ arglist = [servers[0].id, 'unexist_server', servers[1].id]
4461
+
4462
+ verifylist = [
4463
+ ('force', False),
4464
+ ('all_projects', False),
4465
+ ('wait', False),
4466
+ (
4467
+ 'server',
4468
+ [servers[0].id, 'unexist_server', servers[1].id],
4469
+ ),
4470
+ ]
4471
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
4472
+
4473
+ exc = self.assertRaises(
4474
+ exceptions.CommandError,
4475
+ self.cmd.take_action,
4476
+ parsed_args,
4477
+ )
4478
+ self.assertEqual('1 of 3 servers failed to delete.', str(exc))
4479
+
4480
+ self.compute_client.find_server.assert_has_calls(
4481
+ [
4482
+ mock.call(
4483
+ servers[0].id, ignore_missing=False, all_projects=False
4484
+ ),
4485
+ mock.call(
4486
+ 'unexist_server', ignore_missing=False, all_projects=False
4487
+ ),
4488
+ mock.call(
4489
+ servers[1].id, ignore_missing=False, all_projects=False
4490
+ ),
4491
+ ]
4492
+ )
4493
+
4494
+ self.compute_client.delete_server.assert_has_calls(
4495
+ [
4496
+ mock.call(servers[0], force=False),
4497
+ mock.call(servers[1], force=False),
4498
+ ]
4499
+ )
4500
+
4459
4501
  def test_server_delete_with_all_projects(self):
4460
4502
  arglist = [
4461
4503
  self.server.id,
@@ -4589,10 +4631,8 @@ class _TestServerList(TestServer):
4589
4631
  'Flavor Name',
4590
4632
  'Flavor ID',
4591
4633
  'Availability Zone',
4592
- 'Pinned Availability Zone',
4593
4634
  'Host',
4594
4635
  'Properties',
4595
- 'Scheduler Hints',
4596
4636
  )
4597
4637
  columns_all_projects = (
4598
4638
  'ID',
@@ -4659,17 +4699,19 @@ class TestServerList(_TestServerList):
4659
4699
  def setUp(self):
4660
4700
  super().setUp()
4661
4701
 
4662
- Image = collections.namedtuple('Image', 'id name')
4663
4702
  self.image_client.images.return_value = [
4664
- Image(id=s.image['id'], name=self.image.name)
4703
+ sdk_fakes.generate_fake_resource(
4704
+ _image.Image, id=s.image['id'], name=self.image.name
4705
+ )
4665
4706
  # Image will be an empty string if boot-from-volume
4666
4707
  for s in self.servers
4667
4708
  if s.image
4668
4709
  ]
4669
4710
 
4670
- Flavor = collections.namedtuple('Flavor', 'id name')
4671
4711
  self.compute_client.flavors.return_value = [
4672
- Flavor(id=s.flavor['id'], name=self.flavor.name)
4712
+ sdk_fakes.generate_fake_resource(
4713
+ _flavor.Flavor, id=s.flavor['id'], name=self.flavor.name
4714
+ )
4673
4715
  for s in self.servers
4674
4716
  ]
4675
4717
 
@@ -4738,10 +4780,8 @@ class TestServerList(_TestServerList):
4738
4780
  self.flavor.name,
4739
4781
  s.flavor['id'],
4740
4782
  getattr(s, 'availability_zone'),
4741
- getattr(s, 'pinned_availability_zone', ''),
4742
4783
  server.HostColumn(getattr(s, 'hypervisor_hostname')),
4743
4784
  format_columns.DictColumn(s.metadata),
4744
- format_columns.DictListColumn(None),
4745
4785
  )
4746
4786
  for s in self.servers
4747
4787
  )
@@ -4815,13 +4855,9 @@ class TestServerList(_TestServerList):
4815
4855
  '-c',
4816
4856
  'Availability Zone',
4817
4857
  '-c',
4818
- 'Pinned Availability Zone',
4819
- '-c',
4820
4858
  'Host',
4821
4859
  '-c',
4822
4860
  'Properties',
4823
- '-c',
4824
- 'Scheduler Hints',
4825
4861
  '--long',
4826
4862
  ]
4827
4863
  verifylist = [
@@ -4841,10 +4877,8 @@ class TestServerList(_TestServerList):
4841
4877
  self.assertIn('Image ID', columns)
4842
4878
  self.assertIn('Flavor ID', columns)
4843
4879
  self.assertIn('Availability Zone', columns)
4844
- self.assertIn('Pinned Availability Zone', columns)
4845
4880
  self.assertIn('Host', columns)
4846
4881
  self.assertIn('Properties', columns)
4847
- self.assertIn('Scheduler Hints', columns)
4848
4882
  self.assertCountEqual(columns, set(columns))
4849
4883
 
4850
4884
  def test_server_list_no_name_lookup_option(self):
@@ -5255,10 +5289,8 @@ class TestServerList(_TestServerList):
5255
5289
  self.flavor.name,
5256
5290
  s.flavor['id'],
5257
5291
  getattr(s, 'availability_zone'),
5258
- getattr(s, 'pinned_availability_zone', ''),
5259
5292
  server.HostColumn(getattr(s, 'hypervisor_hostname')),
5260
5293
  format_columns.DictColumn(s.metadata),
5261
- format_columns.DictListColumn(s.scheduler_hints),
5262
5294
  )
5263
5295
  for s in self.servers
5264
5296
  )
@@ -5287,9 +5319,10 @@ class TestServerList(_TestServerList):
5287
5319
  self.compute_client.servers.return_value = servers
5288
5320
 
5289
5321
  # Make sure the returned image and flavor IDs match the servers.
5290
- Image = collections.namedtuple('Image', 'id name')
5291
5322
  self.image_client.images.return_value = [
5292
- Image(id=s.image['id'], name=self.image.name)
5323
+ sdk_fakes.generate_fake_resource(
5324
+ _image.Image, id=s.image['id'], name=self.image.name
5325
+ )
5293
5326
  # Image will be an empty string if boot-from-volume
5294
5327
  for s in servers
5295
5328
  if s.image
@@ -5311,10 +5344,8 @@ class TestServerList(_TestServerList):
5311
5344
  self.flavor.name,
5312
5345
  s.flavor['id'],
5313
5346
  getattr(s, 'availability_zone'),
5314
- getattr(s, 'pinned_availability_zone', ''),
5315
5347
  server.HostColumn(getattr(s, 'hypervisor_hostname')),
5316
5348
  format_columns.DictColumn(s.metadata),
5317
- format_columns.DictListColumn(s.scheduler_hints),
5318
5349
  s.host_status,
5319
5350
  )
5320
5351
  for s in servers
@@ -5349,7 +5380,6 @@ class TestServerListV273(_TestServerList):
5349
5380
  'Image ID',
5350
5381
  'Flavor',
5351
5382
  'Availability Zone',
5352
- 'Pinned Availability Zone',
5353
5383
  'Host',
5354
5384
  'Properties',
5355
5385
  'Scheduler Hints',
@@ -5374,9 +5404,10 @@ class TestServerListV273(_TestServerList):
5374
5404
  self.servers = self.setup_sdk_servers_mock(3)
5375
5405
  self.compute_client.servers.return_value = self.servers
5376
5406
 
5377
- Image = collections.namedtuple('Image', 'id name')
5378
5407
  self.image_client.images.return_value = [
5379
- Image(id=s.image['id'], name=self.image.name)
5408
+ sdk_fakes.generate_fake_resource(
5409
+ _image.Image, id=s.image['id'], name=self.image.name
5410
+ )
5380
5411
  # Image will be an empty string if boot-from-volume
5381
5412
  for s in self.servers
5382
5413
  if s.image
@@ -5547,6 +5578,307 @@ class TestServerListV273(_TestServerList):
5547
5578
  self.assertEqual(expected_row, partial_server)
5548
5579
 
5549
5580
 
5581
+ class TestServerListV296(_TestServerList):
5582
+ columns = (
5583
+ 'ID',
5584
+ 'Name',
5585
+ 'Status',
5586
+ 'Networks',
5587
+ 'Image',
5588
+ 'Flavor',
5589
+ )
5590
+ columns_long = (
5591
+ 'ID',
5592
+ 'Name',
5593
+ 'Status',
5594
+ 'Task State',
5595
+ 'Power State',
5596
+ 'Networks',
5597
+ 'Image Name',
5598
+ 'Image ID',
5599
+ 'Flavor',
5600
+ 'Availability Zone',
5601
+ 'Host',
5602
+ 'Properties',
5603
+ 'Pinned Availability Zone',
5604
+ )
5605
+
5606
+ def setUp(self):
5607
+ super().setUp()
5608
+ self.set_compute_api_version('2.96')
5609
+
5610
+ self.image_client.images.return_value = [
5611
+ sdk_fakes.generate_fake_resource(
5612
+ _image.Image, id=s.image['id'], name=self.image.name
5613
+ )
5614
+ # Image will be an empty string if boot-from-volume
5615
+ for s in self.servers
5616
+ if s.image
5617
+ ]
5618
+
5619
+ self.compute_client.flavors.return_value = [
5620
+ sdk_fakes.generate_fake_resource(
5621
+ _flavor.Flavor, id=s.flavor['id'], name=self.flavor.name
5622
+ )
5623
+ for s in self.servers
5624
+ ]
5625
+
5626
+ self.data = tuple(
5627
+ (
5628
+ s.id,
5629
+ s.name,
5630
+ s.status,
5631
+ server.AddressesColumn(s.addresses),
5632
+ # Image will be an empty string if boot-from-volume
5633
+ self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
5634
+ self.flavor.name,
5635
+ )
5636
+ for s in self.servers
5637
+ )
5638
+
5639
+ def test_server_list_long_option(self):
5640
+ self.data = tuple(
5641
+ (
5642
+ s.id,
5643
+ s.name,
5644
+ s.status,
5645
+ getattr(s, 'task_state'),
5646
+ server.PowerStateColumn(getattr(s, 'power_state')),
5647
+ server.AddressesColumn(s.addresses),
5648
+ # Image will be an empty string if boot-from-volume
5649
+ self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
5650
+ s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
5651
+ self.flavor.name,
5652
+ getattr(s, 'availability_zone'),
5653
+ server.HostColumn(getattr(s, 'hypervisor_hostname')),
5654
+ format_columns.DictColumn(s.metadata),
5655
+ getattr(s, 'pinned_availability_zone', ''),
5656
+ )
5657
+ for s in self.servers
5658
+ )
5659
+ arglist = [
5660
+ '--long',
5661
+ ]
5662
+ verifylist = [
5663
+ ('all_projects', False),
5664
+ ('long', True),
5665
+ ]
5666
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5667
+
5668
+ columns, data = self.cmd.take_action(parsed_args)
5669
+ self.compute_client.servers.assert_called_with(**self.kwargs)
5670
+ image_ids = {s.image['id'] for s in self.servers if s.image}
5671
+ self.image_client.images.assert_called_once_with(
5672
+ id=f'in:{",".join(image_ids)}',
5673
+ )
5674
+ self.compute_client.flavors.assert_called_once_with(is_public=None)
5675
+ self.assertEqual(self.columns_long, columns)
5676
+ self.assertEqual(self.data, tuple(data))
5677
+
5678
+ def test_server_list_column_option(self):
5679
+ arglist = [
5680
+ '-c',
5681
+ 'Project ID',
5682
+ '-c',
5683
+ 'User ID',
5684
+ '-c',
5685
+ 'Created At',
5686
+ '-c',
5687
+ 'Security Groups',
5688
+ '-c',
5689
+ 'Task State',
5690
+ '-c',
5691
+ 'Power State',
5692
+ '-c',
5693
+ 'Image ID',
5694
+ '-c',
5695
+ 'Flavor ID',
5696
+ '-c',
5697
+ 'Availability Zone',
5698
+ '-c',
5699
+ 'Host',
5700
+ '-c',
5701
+ 'Properties',
5702
+ '-c',
5703
+ 'Pinned Availability Zone',
5704
+ '--long',
5705
+ ]
5706
+ verifylist = [
5707
+ ('long', True),
5708
+ ]
5709
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5710
+
5711
+ columns, data = self.cmd.take_action(parsed_args)
5712
+
5713
+ self.compute_client.servers.assert_called_with(**self.kwargs)
5714
+ self.assertIn('Project ID', columns)
5715
+ self.assertIn('User ID', columns)
5716
+ self.assertIn('Created At', columns)
5717
+ self.assertIn('Security Groups', columns)
5718
+ self.assertIn('Task State', columns)
5719
+ self.assertIn('Power State', columns)
5720
+ self.assertIn('Image ID', columns)
5721
+ self.assertIn('Flavor ID', columns)
5722
+ self.assertIn('Availability Zone', columns)
5723
+ self.assertIn('Pinned Availability Zone', columns)
5724
+ self.assertIn('Host', columns)
5725
+ self.assertIn('Properties', columns)
5726
+ self.assertCountEqual(columns, set(columns))
5727
+
5728
+
5729
+ class TestServerListV2100(_TestServerList):
5730
+ columns = (
5731
+ 'ID',
5732
+ 'Name',
5733
+ 'Status',
5734
+ 'Networks',
5735
+ 'Image',
5736
+ 'Flavor',
5737
+ )
5738
+ columns_long = (
5739
+ 'ID',
5740
+ 'Name',
5741
+ 'Status',
5742
+ 'Task State',
5743
+ 'Power State',
5744
+ 'Networks',
5745
+ 'Image Name',
5746
+ 'Image ID',
5747
+ 'Flavor',
5748
+ 'Availability Zone',
5749
+ 'Host',
5750
+ 'Properties',
5751
+ 'Pinned Availability Zone',
5752
+ 'Scheduler Hints',
5753
+ )
5754
+
5755
+ def setUp(self):
5756
+ super().setUp()
5757
+ self.set_compute_api_version('2.100')
5758
+
5759
+ self.image_client.images.return_value = [
5760
+ sdk_fakes.generate_fake_resource(
5761
+ _image.Image, id=s.image['id'], name=self.image.name
5762
+ )
5763
+ # Image will be an empty string if boot-from-volume
5764
+ for s in self.servers
5765
+ if s.image
5766
+ ]
5767
+
5768
+ self.compute_client.flavors.return_value = [
5769
+ sdk_fakes.generate_fake_resource(
5770
+ _flavor.Flavor, id=s.flavor['id'], name=self.flavor.name
5771
+ )
5772
+ for s in self.servers
5773
+ ]
5774
+
5775
+ self.data = tuple(
5776
+ (
5777
+ s.id,
5778
+ s.name,
5779
+ s.status,
5780
+ server.AddressesColumn(s.addresses),
5781
+ # Image will be an empty string if boot-from-volume
5782
+ self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
5783
+ self.flavor.name,
5784
+ )
5785
+ for s in self.servers
5786
+ )
5787
+
5788
+ def test_server_list_long_option(self):
5789
+ self.data = tuple(
5790
+ (
5791
+ s.id,
5792
+ s.name,
5793
+ s.status,
5794
+ getattr(s, 'task_state'),
5795
+ server.PowerStateColumn(getattr(s, 'power_state')),
5796
+ server.AddressesColumn(s.addresses),
5797
+ # Image will be an empty string if boot-from-volume
5798
+ self.image.name if s.image else server.IMAGE_STRING_FOR_BFV,
5799
+ s.image['id'] if s.image else server.IMAGE_STRING_FOR_BFV,
5800
+ self.flavor.name,
5801
+ getattr(s, 'availability_zone'),
5802
+ server.HostColumn(getattr(s, 'hypervisor_hostname')),
5803
+ format_columns.DictColumn(s.metadata),
5804
+ getattr(s, 'pinned_availability_zone', ''),
5805
+ format_columns.DictListColumn(None),
5806
+ )
5807
+ for s in self.servers
5808
+ )
5809
+ arglist = [
5810
+ '--long',
5811
+ ]
5812
+ verifylist = [
5813
+ ('all_projects', False),
5814
+ ('long', True),
5815
+ ]
5816
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5817
+
5818
+ columns, data = self.cmd.take_action(parsed_args)
5819
+ self.compute_client.servers.assert_called_with(**self.kwargs)
5820
+ image_ids = {s.image['id'] for s in self.servers if s.image}
5821
+ self.image_client.images.assert_called_once_with(
5822
+ id=f'in:{",".join(image_ids)}',
5823
+ )
5824
+ self.compute_client.flavors.assert_called_once_with(is_public=None)
5825
+ self.assertEqual(self.columns_long, columns)
5826
+ self.assertEqual(self.data, tuple(data))
5827
+
5828
+ def test_server_list_column_option(self):
5829
+ arglist = [
5830
+ '-c',
5831
+ 'Project ID',
5832
+ '-c',
5833
+ 'User ID',
5834
+ '-c',
5835
+ 'Created At',
5836
+ '-c',
5837
+ 'Security Groups',
5838
+ '-c',
5839
+ 'Task State',
5840
+ '-c',
5841
+ 'Power State',
5842
+ '-c',
5843
+ 'Image ID',
5844
+ '-c',
5845
+ 'Flavor ID',
5846
+ '-c',
5847
+ 'Availability Zone',
5848
+ '-c',
5849
+ 'Host',
5850
+ '-c',
5851
+ 'Properties',
5852
+ '-c',
5853
+ 'Pinned Availability Zone',
5854
+ '-c',
5855
+ 'Scheduler Hints',
5856
+ '--long',
5857
+ ]
5858
+ verifylist = [
5859
+ ('long', True),
5860
+ ]
5861
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5862
+
5863
+ columns, data = self.cmd.take_action(parsed_args)
5864
+
5865
+ self.compute_client.servers.assert_called_with(**self.kwargs)
5866
+ self.assertIn('Project ID', columns)
5867
+ self.assertIn('User ID', columns)
5868
+ self.assertIn('Created At', columns)
5869
+ self.assertIn('Security Groups', columns)
5870
+ self.assertIn('Task State', columns)
5871
+ self.assertIn('Power State', columns)
5872
+ self.assertIn('Image ID', columns)
5873
+ self.assertIn('Flavor ID', columns)
5874
+ self.assertIn('Availability Zone', columns)
5875
+ self.assertIn('Pinned Availability Zone', columns)
5876
+ self.assertIn('Host', columns)
5877
+ self.assertIn('Properties', columns)
5878
+ self.assertIn('Scheduler Hints', columns)
5879
+ self.assertCountEqual(columns, set(columns))
5880
+
5881
+
5550
5882
  class TestServerAction(compute_fakes.TestComputev2):
5551
5883
  def run_method_with_sdk_servers(self, method_name, server_count):
5552
5884
  servers = compute_fakes.create_servers(count=server_count)
@@ -7351,14 +7683,14 @@ class TestServerRemoveFloatingIPNetwork(network_fakes.TestNetworkV2):
7351
7683
  def setUp(self):
7352
7684
  super().setUp()
7353
7685
 
7354
- self.network_client.update_ip = mock.Mock(return_value=None)
7686
+ self.network_client.update_ip.return_value = None
7355
7687
 
7356
7688
  # Get the command object to test
7357
7689
  self.cmd = server.RemoveFloatingIP(self.app, None)
7358
7690
 
7359
7691
  def test_server_remove_floating_ip_default(self):
7360
7692
  _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
7361
- self.network_client.find_ip = mock.Mock(return_value=_floating_ip)
7693
+ self.network_client.find_ip.return_value = _floating_ip
7362
7694
  arglist = [
7363
7695
  'fake_server',
7364
7696
  _floating_ip['ip'],
@@ -7391,9 +7723,6 @@ class TestServerRemovePort(TestServer):
7391
7723
  # Get the command object to test
7392
7724
  self.cmd = server.RemovePort(self.app, None)
7393
7725
 
7394
- self.find_port = mock.Mock()
7395
- self.app.client_manager.network.find_port = self.find_port
7396
-
7397
7726
  def _test_server_remove_port(self, port_id):
7398
7727
  servers = self.setup_sdk_servers_mock(count=1)
7399
7728
  port = 'fake-port'
@@ -7416,15 +7745,17 @@ class TestServerRemovePort(TestServer):
7416
7745
  self.assertIsNone(result)
7417
7746
 
7418
7747
  def test_server_remove_port(self):
7419
- self._test_server_remove_port(self.find_port.return_value.id)
7420
- self.find_port.assert_called_once_with(
7748
+ self._test_server_remove_port(
7749
+ self.network_client.find_port.return_value.id
7750
+ )
7751
+ self.network_client.find_port.assert_called_once_with(
7421
7752
  'fake-port', ignore_missing=False
7422
7753
  )
7423
7754
 
7424
7755
  def test_server_remove_port_no_neutron(self):
7425
7756
  self.app.client_manager.network_endpoint_enabled = False
7426
7757
  self._test_server_remove_port('fake-port')
7427
- self.find_port.assert_not_called()
7758
+ self.network_client.find_port.assert_not_called()
7428
7759
 
7429
7760
 
7430
7761
  class TestServerRemoveNetwork(TestServer):
@@ -7434,16 +7765,12 @@ class TestServerRemoveNetwork(TestServer):
7434
7765
  # Get the command object to test
7435
7766
  self.cmd = server.RemoveNetwork(self.app, None)
7436
7767
 
7437
- # Set method to be tested.
7438
- self.fake_inf = mock.Mock()
7439
-
7440
- self.find_network = mock.Mock()
7441
- self.app.client_manager.network.find_network = self.find_network
7442
- self.compute_client.server_interfaces.return_value = [self.fake_inf]
7768
+ self.fake_if = mock.Mock()
7769
+ self.compute_client.server_interfaces.return_value = [self.fake_if]
7443
7770
 
7444
7771
  def _test_server_remove_network(self, network_id):
7445
- self.fake_inf.net_id = network_id
7446
- self.fake_inf.port_id = 'fake-port'
7772
+ self.fake_if.net_id = network_id
7773
+ self.fake_if.port_id = 'fake-port'
7447
7774
  servers = self.setup_sdk_servers_mock(count=1)
7448
7775
  network = 'fake-network'
7449
7776
 
@@ -7468,15 +7795,17 @@ class TestServerRemoveNetwork(TestServer):
7468
7795
  self.assertIsNone(result)
7469
7796
 
7470
7797
  def test_server_remove_network(self):
7471
- self._test_server_remove_network(self.find_network.return_value.id)
7472
- self.find_network.assert_called_once_with(
7798
+ self._test_server_remove_network(
7799
+ self.network_client.find_network.return_value.id
7800
+ )
7801
+ self.network_client.find_network.assert_called_once_with(
7473
7802
  'fake-network', ignore_missing=False
7474
7803
  )
7475
7804
 
7476
7805
  def test_server_remove_network_no_neutron(self):
7477
7806
  self.app.client_manager.network_endpoint_enabled = False
7478
7807
  self._test_server_remove_network('fake-network')
7479
- self.find_network.assert_not_called()
7808
+ self.network_client.find_network.assert_not_called()
7480
7809
 
7481
7810
 
7482
7811
  class TestServerRemoveSecurityGroup(TestServer):
@@ -8542,7 +8871,6 @@ class TestServerShow(TestServer):
8542
8871
  'locked',
8543
8872
  'locked_reason',
8544
8873
  'name',
8545
- 'pinned_availability_zone',
8546
8874
  'progress',
8547
8875
  'project_id',
8548
8876
  'properties',
@@ -8592,7 +8920,6 @@ class TestServerShow(TestServer):
8592
8920
  None, # locked
8593
8921
  None, # locked_reason
8594
8922
  self.server.name,
8595
- None, # pinned_availability_zone
8596
8923
  None, # progress
8597
8924
  'tenant-id-xxx', # project_id
8598
8925
  format_columns.DictColumn({}), # properties
@@ -9531,7 +9858,6 @@ class TestServerGeneral(TestServer):
9531
9858
  'locked': None,
9532
9859
  'locked_reason': None,
9533
9860
  'name': _server.name,
9534
- 'pinned_availability_zone': None,
9535
9861
  'progress': None,
9536
9862
  'project_id': 'tenant-id-xxx',
9537
9863
  'properties': format_columns.DictColumn({}),
@@ -9618,7 +9944,6 @@ class TestServerGeneral(TestServer):
9618
9944
  'locked': None,
9619
9945
  'locked_reason': None,
9620
9946
  'name': _server.name,
9621
- 'pinned_availability_zone': None,
9622
9947
  'progress': None,
9623
9948
  'project_id': 'tenant-id-xxx',
9624
9949
  'properties': format_columns.DictColumn({}),