octavia 12.0.0.0rc2__py3-none-any.whl → 13.0.0.0rc1__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 (193) hide show
  1. octavia/amphorae/backends/agent/api_server/osutils.py +1 -0
  2. octavia/amphorae/backends/agent/api_server/plug.py +21 -7
  3. octavia/amphorae/backends/agent/api_server/templates/amphora-netns.systemd.j2 +2 -2
  4. octavia/amphorae/backends/agent/api_server/util.py +21 -0
  5. octavia/amphorae/backends/health_daemon/health_daemon.py +9 -3
  6. octavia/amphorae/backends/health_daemon/health_sender.py +2 -0
  7. octavia/amphorae/backends/utils/interface.py +14 -6
  8. octavia/amphorae/backends/utils/interface_file.py +6 -3
  9. octavia/amphorae/backends/utils/keepalivedlvs_query.py +8 -9
  10. octavia/amphorae/drivers/driver_base.py +1 -2
  11. octavia/amphorae/drivers/haproxy/rest_api_driver.py +11 -25
  12. octavia/amphorae/drivers/health/heartbeat_udp.py +34 -24
  13. octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +3 -12
  14. octavia/amphorae/drivers/noop_driver/driver.py +3 -5
  15. octavia/api/common/pagination.py +4 -4
  16. octavia/api/drivers/amphora_driver/v2/driver.py +11 -5
  17. octavia/api/drivers/driver_agent/driver_get.py +22 -14
  18. octavia/api/drivers/driver_agent/driver_updater.py +8 -4
  19. octavia/api/drivers/utils.py +4 -2
  20. octavia/api/healthcheck/healthcheck_plugins.py +4 -2
  21. octavia/api/root_controller.py +4 -1
  22. octavia/api/v2/controllers/amphora.py +35 -38
  23. octavia/api/v2/controllers/availability_zone_profiles.py +43 -33
  24. octavia/api/v2/controllers/availability_zones.py +22 -18
  25. octavia/api/v2/controllers/flavor_profiles.py +37 -28
  26. octavia/api/v2/controllers/flavors.py +19 -15
  27. octavia/api/v2/controllers/health_monitor.py +44 -33
  28. octavia/api/v2/controllers/l7policy.py +52 -40
  29. octavia/api/v2/controllers/l7rule.py +68 -55
  30. octavia/api/v2/controllers/listener.py +88 -61
  31. octavia/api/v2/controllers/load_balancer.py +52 -34
  32. octavia/api/v2/controllers/member.py +63 -52
  33. octavia/api/v2/controllers/pool.py +55 -42
  34. octavia/api/v2/controllers/quotas.py +5 -3
  35. octavia/api/v2/types/listener.py +15 -0
  36. octavia/cmd/octavia_worker.py +0 -3
  37. octavia/cmd/status.py +1 -4
  38. octavia/common/clients.py +25 -45
  39. octavia/common/config.py +64 -22
  40. octavia/common/constants.py +3 -2
  41. octavia/common/data_models.py +7 -1
  42. octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +12 -1
  43. octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +5 -2
  44. octavia/common/jinja/lvs/jinja_cfg.py +4 -2
  45. octavia/common/keystone.py +58 -5
  46. octavia/common/validate.py +35 -0
  47. octavia/compute/drivers/noop_driver/driver.py +6 -0
  48. octavia/controller/healthmanager/health_manager.py +3 -6
  49. octavia/controller/housekeeping/house_keeping.py +36 -37
  50. octavia/controller/worker/amphora_rate_limit.py +5 -4
  51. octavia/controller/worker/task_utils.py +57 -41
  52. octavia/controller/worker/v2/controller_worker.py +160 -103
  53. octavia/controller/worker/v2/flows/listener_flows.py +3 -0
  54. octavia/controller/worker/v2/flows/load_balancer_flows.py +9 -14
  55. octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +152 -91
  56. octavia/controller/worker/v2/tasks/compute_tasks.py +4 -2
  57. octavia/controller/worker/v2/tasks/database_tasks.py +542 -400
  58. octavia/controller/worker/v2/tasks/network_tasks.py +119 -79
  59. octavia/db/api.py +26 -23
  60. octavia/db/base_models.py +2 -2
  61. octavia/db/healthcheck.py +2 -1
  62. octavia/db/migration/alembic_migrations/versions/632152d2d32e_add_http_strict_transport_security_.py +42 -0
  63. octavia/db/models.py +12 -2
  64. octavia/db/prepare.py +2 -0
  65. octavia/db/repositories.py +462 -482
  66. octavia/hacking/checks.py +1 -1
  67. octavia/network/base.py +0 -14
  68. octavia/network/drivers/neutron/allowed_address_pairs.py +92 -135
  69. octavia/network/drivers/neutron/base.py +65 -77
  70. octavia/network/drivers/neutron/utils.py +69 -85
  71. octavia/network/drivers/noop_driver/driver.py +0 -7
  72. octavia/statistics/drivers/update_db.py +10 -10
  73. octavia/tests/common/constants.py +91 -84
  74. octavia/tests/common/sample_data_models.py +13 -1
  75. octavia/tests/fixtures.py +32 -0
  76. octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +9 -10
  77. octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +260 -15
  78. octavia/tests/functional/api/test_root_controller.py +3 -28
  79. octavia/tests/functional/api/v2/base.py +5 -3
  80. octavia/tests/functional/api/v2/test_amphora.py +18 -5
  81. octavia/tests/functional/api/v2/test_availability_zone_profiles.py +1 -0
  82. octavia/tests/functional/api/v2/test_listener.py +51 -19
  83. octavia/tests/functional/api/v2/test_load_balancer.py +10 -1
  84. octavia/tests/functional/db/base.py +31 -16
  85. octavia/tests/functional/db/test_models.py +27 -28
  86. octavia/tests/functional/db/test_repositories.py +407 -50
  87. octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +2 -0
  88. octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +1 -1
  89. octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +54 -6
  90. octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +35 -0
  91. octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +8 -0
  92. octavia/tests/unit/amphorae/backends/health_daemon/test_health_sender.py +18 -0
  93. octavia/tests/unit/amphorae/backends/utils/test_interface.py +81 -0
  94. octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +2 -0
  95. octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +129 -5
  96. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +42 -20
  97. octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +18 -20
  98. octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +4 -4
  99. octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +4 -1
  100. octavia/tests/unit/api/drivers/driver_agent/test_driver_get.py +3 -3
  101. octavia/tests/unit/api/drivers/driver_agent/test_driver_updater.py +11 -13
  102. octavia/tests/unit/base.py +6 -0
  103. octavia/tests/unit/cmd/test_interface.py +2 -2
  104. octavia/tests/unit/cmd/test_status.py +2 -2
  105. octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +152 -1
  106. octavia/tests/unit/common/sample_configs/sample_configs_combined.py +10 -3
  107. octavia/tests/unit/common/test_clients.py +0 -39
  108. octavia/tests/unit/common/test_keystone.py +54 -0
  109. octavia/tests/unit/common/test_validate.py +67 -0
  110. octavia/tests/unit/controller/healthmanager/test_health_manager.py +8 -22
  111. octavia/tests/unit/controller/housekeeping/test_house_keeping.py +3 -64
  112. octavia/tests/unit/controller/worker/test_amphora_rate_limit.py +1 -1
  113. octavia/tests/unit/controller/worker/test_task_utils.py +44 -24
  114. octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +0 -1
  115. octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +49 -26
  116. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +399 -196
  117. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +37 -64
  118. octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +3 -14
  119. octavia/tests/unit/controller/worker/v2/test_controller_worker.py +2 -2
  120. octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +456 -561
  121. octavia/tests/unit/network/drivers/neutron/test_base.py +181 -194
  122. octavia/tests/unit/network/drivers/neutron/test_utils.py +14 -30
  123. octavia/tests/unit/statistics/drivers/test_update_db.py +7 -5
  124. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/README.rst +1 -1
  125. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/AUTHORS +4 -0
  126. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/METADATA +4 -4
  127. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/RECORD +141 -189
  128. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/entry_points.txt +1 -2
  129. octavia-13.0.0.0rc1.dist-info/pbr.json +1 -0
  130. octavia/api/drivers/amphora_driver/v1/__init__.py +0 -11
  131. octavia/api/drivers/amphora_driver/v1/driver.py +0 -547
  132. octavia/controller/queue/v1/__init__.py +0 -11
  133. octavia/controller/queue/v1/consumer.py +0 -64
  134. octavia/controller/queue/v1/endpoints.py +0 -160
  135. octavia/controller/worker/v1/__init__.py +0 -11
  136. octavia/controller/worker/v1/controller_worker.py +0 -1157
  137. octavia/controller/worker/v1/flows/__init__.py +0 -11
  138. octavia/controller/worker/v1/flows/amphora_flows.py +0 -610
  139. octavia/controller/worker/v1/flows/health_monitor_flows.py +0 -105
  140. octavia/controller/worker/v1/flows/l7policy_flows.py +0 -94
  141. octavia/controller/worker/v1/flows/l7rule_flows.py +0 -100
  142. octavia/controller/worker/v1/flows/listener_flows.py +0 -128
  143. octavia/controller/worker/v1/flows/load_balancer_flows.py +0 -692
  144. octavia/controller/worker/v1/flows/member_flows.py +0 -230
  145. octavia/controller/worker/v1/flows/pool_flows.py +0 -127
  146. octavia/controller/worker/v1/tasks/__init__.py +0 -11
  147. octavia/controller/worker/v1/tasks/amphora_driver_tasks.py +0 -453
  148. octavia/controller/worker/v1/tasks/cert_task.py +0 -51
  149. octavia/controller/worker/v1/tasks/compute_tasks.py +0 -335
  150. octavia/controller/worker/v1/tasks/database_tasks.py +0 -2756
  151. octavia/controller/worker/v1/tasks/lifecycle_tasks.py +0 -173
  152. octavia/controller/worker/v1/tasks/model_tasks.py +0 -41
  153. octavia/controller/worker/v1/tasks/network_tasks.py +0 -970
  154. octavia/controller/worker/v1/tasks/retry_tasks.py +0 -74
  155. octavia/tests/unit/api/drivers/amphora_driver/v1/__init__.py +0 -11
  156. octavia/tests/unit/api/drivers/amphora_driver/v1/test_driver.py +0 -824
  157. octavia/tests/unit/controller/queue/v1/__init__.py +0 -11
  158. octavia/tests/unit/controller/queue/v1/test_consumer.py +0 -61
  159. octavia/tests/unit/controller/queue/v1/test_endpoints.py +0 -189
  160. octavia/tests/unit/controller/worker/v1/__init__.py +0 -11
  161. octavia/tests/unit/controller/worker/v1/flows/__init__.py +0 -11
  162. octavia/tests/unit/controller/worker/v1/flows/test_amphora_flows.py +0 -474
  163. octavia/tests/unit/controller/worker/v1/flows/test_health_monitor_flows.py +0 -72
  164. octavia/tests/unit/controller/worker/v1/flows/test_l7policy_flows.py +0 -67
  165. octavia/tests/unit/controller/worker/v1/flows/test_l7rule_flows.py +0 -67
  166. octavia/tests/unit/controller/worker/v1/flows/test_listener_flows.py +0 -91
  167. octavia/tests/unit/controller/worker/v1/flows/test_load_balancer_flows.py +0 -431
  168. octavia/tests/unit/controller/worker/v1/flows/test_member_flows.py +0 -106
  169. octavia/tests/unit/controller/worker/v1/flows/test_pool_flows.py +0 -77
  170. octavia/tests/unit/controller/worker/v1/tasks/__init__.py +0 -11
  171. octavia/tests/unit/controller/worker/v1/tasks/test_amphora_driver_tasks.py +0 -792
  172. octavia/tests/unit/controller/worker/v1/tasks/test_cert_task.py +0 -46
  173. octavia/tests/unit/controller/worker/v1/tasks/test_compute_tasks.py +0 -634
  174. octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks.py +0 -2615
  175. octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks_quota.py +0 -415
  176. octavia/tests/unit/controller/worker/v1/tasks/test_lifecycle_tasks.py +0 -401
  177. octavia/tests/unit/controller/worker/v1/tasks/test_model_tasks.py +0 -44
  178. octavia/tests/unit/controller/worker/v1/tasks/test_network_tasks.py +0 -1788
  179. octavia/tests/unit/controller/worker/v1/tasks/test_retry_tasks.py +0 -47
  180. octavia/tests/unit/controller/worker/v1/test_controller_worker.py +0 -2096
  181. octavia-12.0.0.0rc2.dist-info/pbr.json +0 -1
  182. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
  183. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  184. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  185. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  186. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  187. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  188. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  189. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  190. {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
  191. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/LICENSE +0 -0
  192. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/WHEEL +0 -0
  193. {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -11,16 +11,17 @@
11
11
  # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
12
  # License for the specific language governing permissions and limitations
13
13
  # under the License.
14
- import copy
15
14
  from unittest import mock
16
15
 
17
- from neutronclient.common import exceptions as neutron_exceptions
18
16
  from novaclient.client import exceptions as nova_exceptions
17
+ import openstack.exceptions as os_exceptions
18
+ from openstack.network.v2.port import Port
19
+ from openstack.network.v2.security_group import SecurityGroup
20
+ from openstack.network.v2.subnet import Subnet
19
21
  from oslo_config import cfg
20
22
  from oslo_config import fixture as oslo_fixture
21
23
  from oslo_utils import uuidutils
22
24
 
23
- from octavia.common import clients
24
25
  from octavia.common import constants
25
26
  from octavia.common import data_models
26
27
  from octavia.common import exceptions
@@ -59,17 +60,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
59
60
 
60
61
  def setUp(self):
61
62
  super().setUp()
62
- with mock.patch('octavia.common.clients.neutron_client.Client',
63
- autospec=True) as neutron_client:
63
+ with mock.patch('octavia.common.clients.openstack.connection'
64
+ '.Connection', autospec=True) as os_connection:
64
65
  with mock.patch('stevedore.driver.DriverManager.driver',
65
66
  autospec=True):
66
- client = neutron_client(clients.NEUTRON_VERSION)
67
- client.list_extensions.return_value = {
68
- 'extensions': [
69
- {'alias': allowed_address_pairs.AAP_EXT_ALIAS},
70
- {'alias': neutron_base.SEC_GRP_EXT_ALIAS}
71
- ]
72
- }
67
+ network_proxy = os_connection().network
68
+ network_proxy.find_extension = (
69
+ lambda x: 'alias' if x in (
70
+ allowed_address_pairs.AAP_EXT_ALIAS,
71
+ neutron_base.SEC_GRP_EXT_ALIAS)
72
+ else None)
73
73
  self.k_session = mock.patch(
74
74
  'keystoneauth1.session.Session').start()
75
75
  self.driver = allowed_address_pairs.AllowedAddressPairsDriver()
@@ -108,18 +108,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
108
108
  lb.vip.load_balancer = lb
109
109
  vip = lb.vip
110
110
  sec_grp_id = 'lb-sec-grp1'
111
- show_port = self.driver.neutron_client.show_port
112
- show_port.return_value = {'port': {
113
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
114
- delete_port = self.driver.neutron_client.delete_port
115
- delete_sec_grp = self.driver.neutron_client.delete_security_group
116
- list_security_groups = self.driver.neutron_client.list_security_groups
117
- security_groups = {
118
- 'security_groups': [
119
- {'id': sec_grp_id}
120
- ]
121
- }
122
- list_security_groups.return_value = security_groups
111
+ show_port = self.driver.network_proxy.get_port
112
+ show_port.return_value = Port(
113
+ device_owner=allowed_address_pairs.OCTAVIA_OWNER)
114
+ delete_port = self.driver.network_proxy.delete_port
115
+ delete_sec_grp = self.driver.network_proxy.delete_security_group
116
+ list_security_groups = self.driver.network_proxy.find_security_group
117
+ list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
123
118
  self.driver.deallocate_vip(vip)
124
119
  calls = [mock.call(vip.port_id)]
125
120
  for amp in lb.amphorae:
@@ -132,38 +127,27 @@ class TestAllowedAddressPairsDriver(base.TestCase):
132
127
  lb.vip.load_balancer = lb
133
128
  vip = lb.vip
134
129
  sec_grp_id = 'lb-sec-grp1'
135
- show_port = self.driver.neutron_client.show_port
136
- port = {'port': {
137
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
130
+ show_port = self.driver.network_proxy.get_port
131
+ port = Port(device_owner=allowed_address_pairs.OCTAVIA_OWNER)
138
132
  show_port.side_effect = [port, Exception]
139
- list_security_groups = self.driver.neutron_client.list_security_groups
140
- security_groups = {
141
- 'security_groups': [
142
- {'id': sec_grp_id}
143
- ]
144
- }
145
- list_security_groups.return_value = security_groups
133
+ list_security_groups = self.driver.network_proxy.find_security_group
134
+ list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
146
135
  self.driver.deallocate_vip(vip)
147
- self.driver.neutron_client.update_port.assert_not_called()
136
+ self.driver.network_proxy.update_port.assert_not_called()
148
137
 
149
138
  def test_deallocate_vip_port_deleted(self):
150
139
  lb = dmh.generate_load_balancer_tree()
151
140
  lb.vip.load_balancer = lb
152
141
  vip = lb.vip
153
142
  sec_grp_id = 'lb-sec-grp1'
154
- show_port = self.driver.neutron_client.show_port
155
- show_port.return_value = {'port': {
156
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
157
- delete_port = self.driver.neutron_client.delete_port
158
- delete_port.side_effect = neutron_exceptions.NotFound
159
- delete_sec_grp = self.driver.neutron_client.delete_security_group
160
- list_security_groups = self.driver.neutron_client.list_security_groups
161
- security_groups = {
162
- 'security_groups': [
163
- {'id': sec_grp_id}
164
- ]
165
- }
166
- list_security_groups.return_value = security_groups
143
+ show_port = self.driver.network_proxy.get_port
144
+ show_port.return_value = Port(
145
+ device_owner=allowed_address_pairs.OCTAVIA_OWNER)
146
+ delete_port = self.driver.network_proxy.delete_port
147
+ delete_port.side_effect = os_exceptions.ResourceNotFound
148
+ delete_sec_grp = self.driver.network_proxy.delete_security_group
149
+ find_security_group = self.driver.network_proxy.find_security_group
150
+ find_security_group.return_value = SecurityGroup(id=sec_grp_id)
167
151
  self.driver.deallocate_vip(vip)
168
152
  calls = [mock.call(vip.port_id)]
169
153
  for amp in lb.amphorae:
@@ -175,16 +159,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
175
159
  lb = dmh.generate_load_balancer_tree()
176
160
  lb.vip.load_balancer = lb
177
161
  vip = lb.vip
178
- show_port = self.driver.neutron_client.show_port
179
- show_port.return_value = {'port': {
180
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
181
- delete_port = self.driver.neutron_client.delete_port
182
- delete_sec_grp = self.driver.neutron_client.delete_security_group
183
- list_security_groups = self.driver.neutron_client.list_security_groups
184
- security_groups = {
185
- 'security_groups': []
186
- }
187
- list_security_groups.return_value = security_groups
162
+ show_port = self.driver.network_proxy.get_port
163
+ show_port.return_value = Port(
164
+ device_owner=allowed_address_pairs.OCTAVIA_OWNER)
165
+ delete_port = self.driver.network_proxy.delete_port
166
+ delete_sec_grp = self.driver.network_proxy.delete_security_group
167
+ list_security_groups = self.driver.network_proxy.find_security_group
168
+ list_security_groups.return_value = None
188
169
  self.driver.deallocate_vip(vip)
189
170
  delete_port.assert_called_with(vip.port_id)
190
171
  delete_sec_grp.assert_not_called()
@@ -193,10 +174,10 @@ class TestAllowedAddressPairsDriver(base.TestCase):
193
174
  lb = dmh.generate_load_balancer_tree()
194
175
  vip = data_models.Vip(port_id='1')
195
176
  vip.load_balancer = lb
196
- show_port = self.driver.neutron_client.show_port
197
- show_port.return_value = {'port': {
198
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
199
- delete_port = self.driver.neutron_client.delete_port
177
+ show_port = self.driver.network_proxy.get_port
178
+ show_port.return_value = Port(
179
+ device_owner=allowed_address_pairs.OCTAVIA_OWNER)
180
+ delete_port = self.driver.network_proxy.delete_port
200
181
  delete_port.side_effect = [None, None, TypeError]
201
182
  self.assertRaises(network_base.DeallocateVIPException,
202
183
  self.driver.deallocate_vip, vip)
@@ -209,27 +190,22 @@ class TestAllowedAddressPairsDriver(base.TestCase):
209
190
  lb = dmh.generate_load_balancer_tree()
210
191
  lb.vip.load_balancer = lb
211
192
  vip = lb.vip
212
- show_port = self.driver.neutron_client.show_port
213
- show_port.return_value = {'port': {
214
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
215
- delete_port = self.driver.neutron_client.delete_port
216
- list_ports = self.driver.neutron_client.list_ports
217
- list_security_groups = self.driver.neutron_client.list_security_groups
218
- delete_sec_grp = self.driver.neutron_client.delete_security_group
219
- security_groups = {
220
- 'security_groups': [
221
- {'id': t_constants.MOCK_SECURITY_GROUP_ID}
222
- ]
223
- }
224
- list_security_groups.return_value = security_groups
193
+ show_port = self.driver.network_proxy.get_port
194
+ show_port.return_value = Port(
195
+ device_owner=allowed_address_pairs.OCTAVIA_OWNER)
196
+ delete_port = self.driver.network_proxy.delete_port
197
+ list_ports = self.driver.network_proxy.ports
198
+ find_security_group = self.driver.network_proxy.find_security_group
199
+ delete_sec_grp = self.driver.network_proxy.delete_security_group
200
+ security_group = SecurityGroup(id=t_constants.MOCK_SECURITY_GROUP_ID)
201
+ find_security_group.return_value = security_group
225
202
  delete_grp_results = [
226
203
  network_base.DeallocateVIPException
227
204
  for _ in range(max_retries + 1)] # Total tries = max_retries + 1
228
205
  delete_grp_results.append(None)
229
206
  delete_sec_grp.side_effect = delete_grp_results
230
- list_ports.side_effect = [{
231
- "ports": [t_constants.MOCK_NEUTRON_PORT['port'],
232
- t_constants.MOCK_NEUTRON_PORT2['port']]}]
207
+ list_ports.return_value = iter([t_constants.MOCK_NEUTRON_PORT,
208
+ t_constants.MOCK_NEUTRON_PORT2])
233
209
  self.driver.deallocate_vip(vip)
234
210
  # First we expect the amp's ports to be deleted
235
211
  dp_calls = [mock.call(amp.vrrp_port_id) for amp in lb.amphorae]
@@ -248,19 +224,19 @@ class TestAllowedAddressPairsDriver(base.TestCase):
248
224
  lb = dmh.generate_load_balancer_tree()
249
225
  vip = data_models.Vip(port_id='1')
250
226
  vip.load_balancer = lb
251
- show_port = self.driver.neutron_client.show_port
252
- show_port.side_effect = neutron_exceptions.PortNotFoundClient
227
+ show_port = self.driver.network_proxy.get_port
228
+ show_port.side_effect = os_exceptions.ResourceNotFound
253
229
  self.driver.deallocate_vip(vip)
254
230
 
255
231
  def test_deallocate_vip_when_port_not_found_for_update(self):
256
232
  lb = dmh.generate_load_balancer_tree()
257
233
  vip = data_models.Vip(port_id='1')
258
234
  vip.load_balancer = lb
259
- show_port = self.driver.neutron_client.show_port
260
- show_port.return_value = {'port': {
261
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER}}
262
- update_port = self.driver.neutron_client.update_port
263
- update_port.side_effect = neutron_exceptions.PortNotFoundClient
235
+ show_port = self.driver.network_proxy.get_port
236
+ show_port.return_value = Port(
237
+ device_owner=allowed_address_pairs.OCTAVIA_OWNER)
238
+ update_port = self.driver.network_proxy.update_port
239
+ update_port.side_effect = os_exceptions.ResourceNotFound
264
240
  self.driver.deallocate_vip(vip)
265
241
 
266
242
  def test_deallocate_vip_when_port_not_owned_by_octavia(self):
@@ -268,23 +244,19 @@ class TestAllowedAddressPairsDriver(base.TestCase):
268
244
  lb.vip.load_balancer = lb
269
245
  vip = lb.vip
270
246
  sec_grp_id = 'lb-sec-grp1'
271
- show_port = self.driver.neutron_client.show_port
272
- show_port.return_value = {'port': {
247
+ show_port = self.driver.network_proxy.get_port
248
+ show_port.return_value = Port(**{
273
249
  'id': vip.port_id,
274
250
  'device_owner': 'neutron:LOADBALANCERV2',
275
- 'security_groups': [sec_grp_id]}}
276
- update_port = self.driver.neutron_client.update_port
277
- delete_sec_grp = self.driver.neutron_client.delete_security_group
278
- list_security_groups = self.driver.neutron_client.list_security_groups
279
- security_groups = {
280
- 'security_groups': [
281
- {'id': sec_grp_id}
282
- ]
283
- }
284
- list_security_groups.return_value = security_groups
251
+ 'security_groups': [sec_grp_id]})
252
+ update_port = self.driver.network_proxy.update_port
253
+ delete_sec_grp = self.driver.network_proxy.delete_security_group
254
+ list_security_groups = self.driver.network_proxy.find_security_group
255
+ list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
285
256
  self.driver.deallocate_vip(vip)
286
- expected_port_update = {'port': {'security_groups': []}}
287
- update_port.assert_called_once_with(vip.port_id, expected_port_update)
257
+ expected_port_update = {'security_group_ids': []}
258
+ update_port.assert_called_once_with(vip.port_id,
259
+ **expected_port_update)
288
260
  delete_sec_grp.assert_called_once_with(sec_grp_id)
289
261
 
290
262
  def test_deallocate_vip_when_vip_port_not_found(self):
@@ -295,8 +267,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
295
267
  session_mock = mock.MagicMock()
296
268
  session_mock.get_project_id.return_value = admin_project_id
297
269
  self.k_session.return_value = session_mock
298
- show_port = self.driver.neutron_client.show_port
299
- show_port.side_effect = neutron_exceptions.PortNotFoundClient
270
+ show_port = self.driver.network_proxy.get_port
271
+ show_port.side_effect = os_exceptions.ResourceNotFound
300
272
  self.driver.deallocate_vip(vip)
301
273
 
302
274
  def test_plug_aap_errors_when_nova_cant_find_network_to_attach(self):
@@ -317,8 +289,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
317
289
  network_attach = self.driver.compute.attach_network_or_port
318
290
  network_attach.return_value = t_constants.MOCK_NOVA_INTERFACE
319
291
 
320
- update_port = self.driver.neutron_client.update_port
321
- update_port.side_effect = neutron_exceptions.PortNotFoundClient
292
+ update_port = self.driver.network_proxy.update_port
293
+ update_port.side_effect = os_exceptions.ResourceNotFound
322
294
  self.assertRaises(network_base.PortNotFound,
323
295
  self.driver.plug_aap_port, lb, lb.vip,
324
296
  lb.amphorae[0], subnet)
@@ -408,40 +380,40 @@ class TestAllowedAddressPairsDriver(base.TestCase):
408
380
  subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
409
381
  network_id=t_constants.MOCK_VIP_NET_ID)
410
382
 
411
- list_ports = self.driver.neutron_client.list_ports
412
- port1 = t_constants.MOCK_MANAGEMENT_PORT1['port']
413
- port2 = t_constants.MOCK_MANAGEMENT_PORT2['port']
414
- list_ports.side_effect = [{'ports': [port1]}, {'ports': [port2]}]
383
+ list_ports = self.driver.network_proxy.ports
384
+ port1 = t_constants.MOCK_MANAGEMENT_PORT1
385
+ port2 = t_constants.MOCK_MANAGEMENT_PORT2
386
+ list_ports.return_value = iter([port1, port2])
415
387
  network_attach = self.driver.compute.attach_network_or_port
416
388
  network_attach.side_effect = [t_constants.MOCK_VRRP_INTERFACE1]
417
- update_port = self.driver.neutron_client.update_port
418
- expected_aap = {'port': {'allowed_address_pairs':
419
- [{'ip_address': lb.vip.ip_address}]}}
389
+ update_port = self.driver.network_proxy.update_port
390
+ expected_aap = {
391
+ 'allowed_address_pairs': [{'ip_address': lb.vip.ip_address}]}
420
392
  amp = self.driver.plug_aap_port(lb, lb.vip, lb.amphorae[0], subnet)
421
- update_port.assert_any_call(amp.vrrp_port_id, expected_aap)
393
+ update_port.assert_any_call(amp.vrrp_port_id, **expected_aap)
422
394
  self.assertIn(amp.vrrp_ip, [t_constants.MOCK_VRRP_IP1,
423
395
  t_constants.MOCK_VRRP_IP2])
424
396
  self.assertEqual(lb.vip.ip_address, amp.ha_ip)
425
397
 
426
398
  @mock.patch('octavia.network.drivers.neutron.utils.'
427
- 'convert_port_dict_to_model')
399
+ 'convert_port_to_model')
428
400
  def test_plug_aap_port_create_fails(self, mock_convert):
429
401
  lb = dmh.generate_load_balancer_tree()
430
402
 
431
403
  subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
432
404
  network_id=t_constants.MOCK_VIP_NET_ID)
433
405
 
434
- list_ports = self.driver.neutron_client.list_ports
435
- port1 = t_constants.MOCK_MANAGEMENT_PORT1['port']
436
- port2 = t_constants.MOCK_MANAGEMENT_PORT2['port']
437
- list_ports.side_effect = [{'ports': [port1]}, {'ports': [port2]}]
438
- port_create = self.driver.neutron_client.create_port
406
+ list_ports = self.driver.network_proxy.ports
407
+ port1 = t_constants.MOCK_MANAGEMENT_PORT1
408
+ port2 = t_constants.MOCK_MANAGEMENT_PORT2
409
+ list_ports.return_value = iter([port1, port2])
410
+ port_create = self.driver.network_proxy.create_port
439
411
  port_create.side_effect = [Exception('Create failure')]
440
412
  self.assertRaises(network_base.PlugVIPException,
441
413
  self.driver.plug_aap_port,
442
414
  lb, lb.vip, lb.amphorae[0], subnet)
443
415
  mock_convert.assert_not_called()
444
- self.driver.neutron_client.delete_port.assert_not_called()
416
+ self.driver.network_proxy.delete_port.assert_not_called()
445
417
 
446
418
  def test_plug_aap_port_attach_fails(self):
447
419
  lb = dmh.generate_load_balancer_tree()
@@ -449,16 +421,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
449
421
  subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
450
422
  network_id=t_constants.MOCK_VIP_NET_ID)
451
423
 
452
- list_ports = self.driver.neutron_client.list_ports
453
- port1 = t_constants.MOCK_MANAGEMENT_PORT1['port']
454
- port2 = t_constants.MOCK_MANAGEMENT_PORT2['port']
455
- list_ports.side_effect = [{'ports': [port1]}, {'ports': [port2]}]
424
+ list_ports = self.driver.network_proxy.ports
425
+ port1 = t_constants.MOCK_MANAGEMENT_PORT1
426
+ port2 = t_constants.MOCK_MANAGEMENT_PORT2
427
+ list_ports.return_value = iter([port1, port2])
456
428
  network_attach = self.driver.compute.attach_network_or_port
457
429
  network_attach.side_effect = [Exception('Attach failure')]
458
430
  self.assertRaises(network_base.PlugVIPException,
459
431
  self.driver.plug_aap_port,
460
432
  lb, lb.vip, lb.amphorae[0], subnet)
461
- self.driver.neutron_client.delete_port.assert_called_once()
433
+ self.driver.network_proxy.delete_port.assert_called_once()
462
434
 
463
435
  def test_plug_aap_port_with_add_vips(self):
464
436
  additional_vips = [
@@ -470,21 +442,20 @@ class TestAllowedAddressPairsDriver(base.TestCase):
470
442
  subnet = network_models.Subnet(id=t_constants.MOCK_VIP_SUBNET_ID,
471
443
  network_id=t_constants.MOCK_VIP_NET_ID)
472
444
 
473
- list_ports = self.driver.neutron_client.list_ports
474
- port1 = t_constants.MOCK_MANAGEMENT_PORT1['port']
475
- port2 = t_constants.MOCK_MANAGEMENT_PORT2['port']
476
- list_ports.side_effect = [{'ports': [port1]}, {'ports': [port2]}]
445
+ list_ports = self.driver.network_proxy.ports
446
+ port1 = t_constants.MOCK_MANAGEMENT_PORT1
447
+ port2 = t_constants.MOCK_MANAGEMENT_PORT2
448
+ list_ports.return_value = iter([port1, port2])
477
449
  network_attach = self.driver.compute.attach_network_or_port
478
450
  network_attach.side_effect = [t_constants.MOCK_VRRP_INTERFACE1]
479
- update_port = self.driver.neutron_client.update_port
451
+ update_port = self.driver.network_proxy.update_port
480
452
  amp = self.driver.plug_aap_port(lb, lb.vip, lb.amphorae[0], subnet)
481
453
  expected_aap = {
482
- 'port': {
483
- 'allowed_address_pairs':
484
- [{'ip_address': lb.vip.ip_address},
485
- {'ip_address': lb.additional_vips[0].ip_address}]}}
454
+ 'allowed_address_pairs':
455
+ [{'ip_address': lb.vip.ip_address},
456
+ {'ip_address': lb.additional_vips[0].ip_address}]}
486
457
 
487
- update_port.assert_any_call(amp.vrrp_port_id, expected_aap)
458
+ update_port.assert_any_call(amp.vrrp_port_id, **expected_aap)
488
459
  self.assertIn(amp.vrrp_ip, [t_constants.MOCK_VRRP_IP1,
489
460
  t_constants.MOCK_VRRP_IP2])
490
461
  self.assertEqual(lb.vip.ip_address, amp.ha_ip)
@@ -505,14 +476,14 @@ class TestAllowedAddressPairsDriver(base.TestCase):
505
476
  subnet = network_models.Subnet(
506
477
  id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
507
478
  network_id=t_constants.MOCK_MANAGEMENT_NET_ID)
508
- list_ports = self.driver.neutron_client.list_ports
509
- port1 = t_constants.MOCK_MANAGEMENT_PORT1['port']
510
- port2 = t_constants.MOCK_MANAGEMENT_PORT2['port']
479
+ list_ports = self.driver.network_proxy.ports
480
+ port1 = t_constants.MOCK_MANAGEMENT_PORT1
481
+ port2 = t_constants.MOCK_MANAGEMENT_PORT2
511
482
  self._set_safely(t_constants.MOCK_MANAGEMENT_FIXED_IPS1[0],
512
483
  'ip_address', lb.amphorae[0].lb_network_ip)
513
484
  self._set_safely(t_constants.MOCK_MANAGEMENT_FIXED_IPS2[0],
514
485
  'ip_address', lb.amphorae[1].lb_network_ip)
515
- list_ports.side_effect = [{'ports': [port1]}, {'ports': [port2]}]
486
+ list_ports.side_effect = [iter([port1]), iter([port2])]
516
487
  network_attach = self.driver.compute.attach_network_or_port
517
488
  self._set_safely(t_constants.MOCK_VRRP_INTERFACE1,
518
489
  'net_id', t_constants.MOCK_MANAGEMENT_NET_ID)
@@ -523,11 +494,11 @@ class TestAllowedAddressPairsDriver(base.TestCase):
523
494
  self._set_safely(t_constants.MOCK_VRRP_FIXED_IPS2[0],
524
495
  'subnet_id', t_constants.MOCK_MANAGEMENT_SUBNET_ID)
525
496
  network_attach.side_effect = [t_constants.MOCK_VRRP_INTERFACE1]
526
- update_port = self.driver.neutron_client.update_port
527
- expected_aap = {'port': {'allowed_address_pairs':
528
- [{'ip_address': lb.vip.ip_address}]}}
497
+ update_port = self.driver.network_proxy.update_port
498
+ expected_aap = {
499
+ 'allowed_address_pairs': [{'ip_address': lb.vip.ip_address}]}
529
500
  amp = self.driver.plug_aap_port(lb, lb.vip, lb.amphorae[0], subnet)
530
- update_port.assert_any_call(amp.vrrp_port_id, expected_aap)
501
+ update_port.assert_any_call(amp.vrrp_port_id, **expected_aap)
531
502
  self.assertIn(amp.vrrp_ip, [t_constants.MOCK_VRRP_IP1,
532
503
  t_constants.MOCK_VRRP_IP2])
533
504
  self.assertEqual(lb.vip.ip_address, amp.ha_ip)
@@ -557,7 +528,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
557
528
  self.assertFalse(result)
558
529
 
559
530
  def test_allocate_vip_when_port_already_provided(self):
560
- show_port = self.driver.neutron_client.show_port
531
+ show_port = self.driver.network_proxy.get_port
561
532
  show_port.return_value = t_constants.MOCK_NEUTRON_PORT
562
533
  fake_lb_vip = data_models.Vip(
563
534
  port_id=t_constants.MOCK_PORT_ID,
@@ -580,15 +551,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
580
551
  bad_existing_port.port_id = uuidutils.generate_uuid()
581
552
  bad_existing_port.network_id = uuidutils.generate_uuid()
582
553
  bad_existing_port.subnet_id = uuidutils.generate_uuid()
583
- show_port = self.driver.neutron_client.show_port
554
+ show_port = self.driver.network_proxy.get_port
584
555
  show_port.return_value = bad_existing_port
585
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
586
- port_create_dict['port']['device_owner'] = (
556
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
557
+ port_create_dict['device_owner'] = (
587
558
  allowed_address_pairs.OCTAVIA_OWNER)
588
- port_create_dict['port']['device_id'] = 'lb-1'
589
- create_port = self.driver.neutron_client.create_port
559
+ port_create_dict['device_id'] = 'lb-1'
560
+ create_port = self.driver.network_proxy.create_port
590
561
  create_port.return_value = port_create_dict
591
- show_subnet = self.driver.neutron_client.show_subnet
562
+ show_subnet = self.driver.network_proxy.get_subnet
592
563
  show_subnet.return_value = {'subnet': {
593
564
  'id': t_constants.MOCK_SUBNET_ID,
594
565
  'network_id': t_constants.MOCK_NETWORK_ID
@@ -601,19 +572,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
601
572
  project_id='test-project')
602
573
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
603
574
  exp_create_port_call = {
604
- 'port': {
605
- 'name': 'octavia-lb-1',
606
- 'network_id': t_constants.MOCK_NETWORK_ID,
607
- 'device_id': 'lb-1',
608
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
609
- 'admin_state_up': False,
610
- 'project_id': 'test-project',
611
- 'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
612
- }
575
+ 'name': 'octavia-lb-1',
576
+ 'network_id': t_constants.MOCK_NETWORK_ID,
577
+ 'device_id': 'lb-1',
578
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
579
+ 'admin_state_up': False,
580
+ 'project_id': 'test-project',
581
+ 'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
613
582
  }
614
- self.driver.neutron_client.delete_port.assert_called_once_with(
583
+ self.driver.network_proxy.delete_port.assert_called_once_with(
615
584
  t_constants.MOCK_PORT_ID)
616
- create_port.assert_called_once_with(exp_create_port_call)
585
+ create_port.assert_called_once_with(**exp_create_port_call)
617
586
  self.assertIsInstance(vip, data_models.Vip)
618
587
  self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
619
588
  self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
@@ -627,13 +596,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
627
596
  '_check_extension_enabled', return_value=True)
628
597
  def test_allocate_vip_when_port_not_found(self, mock_check_ext,
629
598
  mock_get_port):
630
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
631
- port_create_dict['port']['device_owner'] = (
599
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
600
+ port_create_dict['device_owner'] = (
632
601
  allowed_address_pairs.OCTAVIA_OWNER)
633
- port_create_dict['port']['device_id'] = 'lb-1'
634
- create_port = self.driver.neutron_client.create_port
602
+ port_create_dict['device_id'] = 'lb-1'
603
+ create_port = self.driver.network_proxy.create_port
635
604
  create_port.return_value = port_create_dict
636
- show_subnet = self.driver.neutron_client.show_subnet
605
+ show_subnet = self.driver.network_proxy.get_subnet
637
606
  show_subnet.return_value = {'subnet': {
638
607
  'id': t_constants.MOCK_SUBNET_ID,
639
608
  'network_id': t_constants.MOCK_NETWORK_ID
@@ -645,17 +614,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
645
614
  project_id='test-project')
646
615
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
647
616
  exp_create_port_call = {
648
- 'port': {
649
- 'name': 'octavia-lb-1',
650
- 'network_id': t_constants.MOCK_NETWORK_ID,
651
- 'device_id': 'lb-1',
652
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
653
- 'admin_state_up': False,
654
- 'project_id': 'test-project',
655
- 'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
656
- }
617
+ 'name': 'octavia-lb-1',
618
+ 'network_id': t_constants.MOCK_NETWORK_ID,
619
+ 'device_id': 'lb-1',
620
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
621
+ 'admin_state_up': False,
622
+ 'project_id': 'test-project',
623
+ 'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
657
624
  }
658
- create_port.assert_called_once_with(exp_create_port_call)
625
+ create_port.assert_called_once_with(**exp_create_port_call)
659
626
  self.assertIsInstance(vip, data_models.Vip)
660
627
  self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
661
628
  self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
@@ -681,7 +648,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
681
648
  fake_lb_vip = data_models.Vip(
682
649
  subnet_id=t_constants.MOCK_SUBNET_ID)
683
650
  fake_lb = data_models.LoadBalancer(id='1', vip=fake_lb_vip)
684
- create_port = self.driver.neutron_client.create_port
651
+ create_port = self.driver.network_proxy.create_port
685
652
  create_port.side_effect = Exception
686
653
  self.assertRaises(network_base.AllocateVIPException,
687
654
  self.driver.allocate_vip, fake_lb)
@@ -689,17 +656,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
689
656
  @mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
690
657
  '_check_extension_enabled', return_value=True)
691
658
  def test_allocate_vip_when_no_port_provided(self, mock_check_ext):
692
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
693
- port_create_dict['port']['device_owner'] = (
659
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
660
+ port_create_dict['device_owner'] = (
694
661
  allowed_address_pairs.OCTAVIA_OWNER)
695
- port_create_dict['port']['device_id'] = 'lb-1'
696
- create_port = self.driver.neutron_client.create_port
662
+ port_create_dict['device_id'] = 'lb-1'
663
+ create_port = self.driver.network_proxy.create_port
697
664
  create_port.return_value = port_create_dict
698
- show_subnet = self.driver.neutron_client.show_subnet
699
- show_subnet.return_value = {'subnet': {
665
+ show_subnet = self.driver.network_proxy.get_subnet
666
+ show_subnet.return_value = {
700
667
  'id': t_constants.MOCK_SUBNET_ID,
701
668
  'network_id': t_constants.MOCK_NETWORK_ID
702
- }}
669
+ }
703
670
  fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
704
671
  network_id=t_constants.MOCK_NETWORK_ID,
705
672
  ip_address=t_constants.MOCK_IP_ADDRESS)
@@ -707,18 +674,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
707
674
  project_id='test-project')
708
675
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
709
676
  exp_create_port_call = {
710
- 'port': {
711
- 'name': 'octavia-lb-1',
712
- 'network_id': t_constants.MOCK_NETWORK_ID,
713
- 'device_id': 'lb-1',
714
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
715
- 'admin_state_up': False,
716
- 'project_id': 'test-project',
717
- 'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
718
- 'subnet_id': t_constants.MOCK_SUBNET_ID}]
719
- }
677
+ 'name': 'octavia-lb-1',
678
+ 'network_id': t_constants.MOCK_NETWORK_ID,
679
+ 'device_id': 'lb-1',
680
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
681
+ 'admin_state_up': False,
682
+ 'project_id': 'test-project',
683
+ 'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
684
+ 'subnet_id': t_constants.MOCK_SUBNET_ID}]
720
685
  }
721
- create_port.assert_called_once_with(exp_create_port_call)
686
+ create_port.assert_called_once_with(**exp_create_port_call)
722
687
  self.assertIsInstance(vip, data_models.Vip)
723
688
  self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
724
689
  self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
@@ -729,17 +694,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
729
694
  @mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
730
695
  '_check_extension_enabled', return_value=True)
731
696
  def test_allocate_vip_when_no_port_fixed_ip(self, mock_check_ext):
732
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
733
- port_create_dict['port']['device_owner'] = (
697
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
698
+ port_create_dict['device_owner'] = (
734
699
  allowed_address_pairs.OCTAVIA_OWNER)
735
- port_create_dict['port']['device_id'] = 'lb-1'
736
- create_port = self.driver.neutron_client.create_port
700
+ port_create_dict['device_id'] = 'lb-1'
701
+ create_port = self.driver.network_proxy.create_port
737
702
  create_port.return_value = port_create_dict
738
- show_subnet = self.driver.neutron_client.show_subnet
739
- show_subnet.return_value = {'subnet': {
703
+ show_subnet = self.driver.network_proxy.get_subnet
704
+ show_subnet.return_value = Subnet(**{
740
705
  'id': t_constants.MOCK_SUBNET_ID,
741
706
  'network_id': t_constants.MOCK_NETWORK_ID
742
- }}
707
+ })
743
708
  fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
744
709
  network_id=t_constants.MOCK_NETWORK_ID,
745
710
  ip_address=t_constants.MOCK_IP_ADDRESS)
@@ -747,18 +712,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
747
712
  project_id='test-project')
748
713
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
749
714
  exp_create_port_call = {
750
- 'port': {
751
- 'name': 'octavia-lb-1',
752
- 'network_id': t_constants.MOCK_NETWORK_ID,
753
- 'device_id': 'lb-1',
754
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
755
- 'admin_state_up': False,
756
- 'project_id': 'test-project',
757
- 'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID,
758
- 'ip_address': t_constants.MOCK_IP_ADDRESS}]
759
- }
715
+ 'name': 'octavia-lb-1',
716
+ 'network_id': t_constants.MOCK_NETWORK_ID,
717
+ 'device_id': 'lb-1',
718
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
719
+ 'admin_state_up': False,
720
+ 'project_id': 'test-project',
721
+ 'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID,
722
+ 'ip_address': t_constants.MOCK_IP_ADDRESS}]
760
723
  }
761
- create_port.assert_called_once_with(exp_create_port_call)
724
+ create_port.assert_called_once_with(**exp_create_port_call)
762
725
  self.assertIsInstance(vip, data_models.Vip)
763
726
  self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
764
727
  self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
@@ -769,31 +732,29 @@ class TestAllowedAddressPairsDriver(base.TestCase):
769
732
  @mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
770
733
  '_check_extension_enabled', return_value=True)
771
734
  def test_allocate_vip_when_no_port_no_fixed_ip(self, mock_check_ext):
772
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
773
- port_create_dict['port']['device_owner'] = (
735
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
736
+ port_create_dict['device_owner'] = (
774
737
  allowed_address_pairs.OCTAVIA_OWNER)
775
- port_create_dict['port']['device_id'] = 'lb-1'
776
- create_port = self.driver.neutron_client.create_port
738
+ port_create_dict['device_id'] = 'lb-1'
739
+ create_port = self.driver.network_proxy.create_port
777
740
  create_port.return_value = port_create_dict
778
- show_subnet = self.driver.neutron_client.show_subnet
779
- show_subnet.return_value = {'subnet': {
741
+ show_subnet = self.driver.network_proxy.get_subnet
742
+ show_subnet.return_value = {
780
743
  'id': t_constants.MOCK_SUBNET_ID,
781
744
  'network_id': t_constants.MOCK_NETWORK_ID
782
- }}
745
+ }
783
746
  fake_lb_vip = data_models.Vip(network_id=t_constants.MOCK_NETWORK_ID)
784
747
  fake_lb = data_models.LoadBalancer(id='1', vip=fake_lb_vip,
785
748
  project_id='test-project')
786
749
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
787
750
  exp_create_port_call = {
788
- 'port': {
789
- 'name': 'octavia-lb-1',
790
- 'network_id': t_constants.MOCK_NETWORK_ID,
791
- 'device_id': 'lb-1',
792
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
793
- 'admin_state_up': False,
794
- 'project_id': 'test-project'}
795
- }
796
- create_port.assert_called_once_with(exp_create_port_call)
751
+ 'name': 'octavia-lb-1',
752
+ 'network_id': t_constants.MOCK_NETWORK_ID,
753
+ 'device_id': 'lb-1',
754
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
755
+ 'admin_state_up': False,
756
+ 'project_id': 'test-project'}
757
+ create_port.assert_called_once_with(**exp_create_port_call)
797
758
  self.assertIsInstance(vip, data_models.Vip)
798
759
  self.assertEqual(t_constants.MOCK_PORT_ID, vip.port_id)
799
760
  self.assertEqual(fake_lb.id, vip.load_balancer_id)
@@ -802,17 +763,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
802
763
  @mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
803
764
  '_check_extension_enabled', return_value=False)
804
765
  def test_allocate_vip_when_no_port_provided_tenant(self, mock_check_ext):
805
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
806
- port_create_dict['port']['device_owner'] = (
766
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
767
+ port_create_dict['device_owner'] = (
807
768
  allowed_address_pairs.OCTAVIA_OWNER)
808
- port_create_dict['port']['device_id'] = 'lb-1'
809
- create_port = self.driver.neutron_client.create_port
769
+ port_create_dict['device_id'] = 'lb-1'
770
+ create_port = self.driver.network_proxy.create_port
810
771
  create_port.return_value = port_create_dict
811
- show_subnet = self.driver.neutron_client.show_subnet
812
- show_subnet.return_value = {'subnet': {
772
+ show_subnet = self.driver.network_proxy.get_subnet
773
+ show_subnet.return_value = {
813
774
  'id': t_constants.MOCK_SUBNET_ID,
814
775
  'network_id': t_constants.MOCK_NETWORK_ID
815
- }}
776
+ }
816
777
  fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
817
778
  network_id=t_constants.MOCK_NETWORK_ID,
818
779
  ip_address=t_constants.MOCK_IP_ADDRESS)
@@ -820,18 +781,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
820
781
  project_id='test-project')
821
782
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
822
783
  exp_create_port_call = {
823
- 'port': {
824
- 'name': 'octavia-lb-1',
825
- 'network_id': t_constants.MOCK_NETWORK_ID,
826
- 'device_id': 'lb-1',
827
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
828
- 'admin_state_up': False,
829
- 'tenant_id': 'test-project',
830
- 'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
831
- 'subnet_id': t_constants.MOCK_SUBNET_ID}]
832
- }
784
+ 'name': 'octavia-lb-1',
785
+ 'network_id': t_constants.MOCK_NETWORK_ID,
786
+ 'device_id': 'lb-1',
787
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
788
+ 'admin_state_up': False,
789
+ 'tenant_id': 'test-project',
790
+ 'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
791
+ 'subnet_id': t_constants.MOCK_SUBNET_ID}]
833
792
  }
834
- create_port.assert_called_once_with(exp_create_port_call)
793
+ create_port.assert_called_once_with(**exp_create_port_call)
835
794
  self.assertIsInstance(vip, data_models.Vip)
836
795
  self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
837
796
  self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
@@ -842,17 +801,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
842
801
  @mock.patch('octavia.network.drivers.neutron.base.BaseNeutronDriver.'
843
802
  '_check_extension_enabled', return_value=False)
844
803
  def test_allocate_vip_with_additional_vips(self, mock_check_ext):
845
- port_create_dict = copy.deepcopy(t_constants.MOCK_NEUTRON_PORT)
846
- port_create_dict['port']['device_owner'] = (
804
+ port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
805
+ port_create_dict['device_owner'] = (
847
806
  allowed_address_pairs.OCTAVIA_OWNER)
848
- port_create_dict['port']['device_id'] = 'lb-1'
849
- create_port = self.driver.neutron_client.create_port
807
+ port_create_dict['device_id'] = 'lb-1'
808
+ create_port = self.driver.network_proxy.create_port
850
809
  create_port.return_value = port_create_dict
851
- show_subnet = self.driver.neutron_client.show_subnet
852
- show_subnet.return_value = {'subnet': {
810
+ show_subnet = self.driver.network_proxy.get_subnet
811
+ show_subnet.return_value = {
853
812
  'id': t_constants.MOCK_SUBNET_ID,
854
813
  'network_id': t_constants.MOCK_NETWORK_ID
855
- }}
814
+ }
856
815
  fake_lb_vip = data_models.Vip(subnet_id=t_constants.MOCK_SUBNET_ID,
857
816
  network_id=t_constants.MOCK_NETWORK_ID,
858
817
  ip_address=t_constants.MOCK_IP_ADDRESS)
@@ -865,21 +824,19 @@ class TestAllowedAddressPairsDriver(base.TestCase):
865
824
  project_id='test-project')
866
825
  vip, additional_vips = self.driver.allocate_vip(fake_lb)
867
826
  exp_create_port_call = {
868
- 'port': {
869
- 'name': 'octavia-lb-1',
870
- 'network_id': t_constants.MOCK_NETWORK_ID,
871
- 'device_id': 'lb-1',
872
- 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
873
- 'admin_state_up': False,
874
- 'tenant_id': 'test-project',
875
- 'fixed_ips': [
876
- {'ip_address': t_constants.MOCK_IP_ADDRESS,
877
- 'subnet_id': t_constants.MOCK_SUBNET_ID},
878
- {'ip_address': t_constants.MOCK_IP_ADDRESS2},
879
- {'subnet_id': t_constants.MOCK_SUBNET_ID3}]
880
- }
827
+ 'name': 'octavia-lb-1',
828
+ 'network_id': t_constants.MOCK_NETWORK_ID,
829
+ 'device_id': 'lb-1',
830
+ 'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
831
+ 'admin_state_up': False,
832
+ 'tenant_id': 'test-project',
833
+ 'fixed_ips': [
834
+ {'ip_address': t_constants.MOCK_IP_ADDRESS,
835
+ 'subnet_id': t_constants.MOCK_SUBNET_ID},
836
+ {'ip_address': t_constants.MOCK_IP_ADDRESS2},
837
+ {'subnet_id': t_constants.MOCK_SUBNET_ID3}]
881
838
  }
882
- create_port.assert_called_once_with(exp_create_port_call)
839
+ create_port.assert_called_once_with(**exp_create_port_call)
883
840
  self.assertIsInstance(vip, data_models.Vip)
884
841
  self.assertEqual(t_constants.MOCK_IP_ADDRESS, vip.ip_address)
885
842
  self.assertEqual(t_constants.MOCK_SUBNET_ID, vip.subnet_id)
@@ -892,23 +849,22 @@ class TestAllowedAddressPairsDriver(base.TestCase):
892
849
  def test_unplug_aap_port_errors_when_update_port_cant_find_port(
893
850
  self, mock_time_sleep, mock_time_time):
894
851
  lb = dmh.generate_load_balancer_tree()
895
- list_ports = self.driver.neutron_client.list_ports
896
- port1 = t_constants.MOCK_NEUTRON_PORT['port']
852
+ list_ports = self.driver.network_proxy.ports
853
+ port1 = t_constants.MOCK_NEUTRON_PORT
897
854
  port2 = {
898
855
  'id': '4', 'network_id': '3', 'fixed_ips':
899
- [{'ip_address': '10.0.0.2'}]
856
+ [{'ip_address': '10.0.0.2'}]
900
857
  }
901
858
  subnet = network_models.Subnet(
902
859
  id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
903
860
  network_id='3')
904
861
  list_ports.side_effect = [
905
- {'ports': [port1, port2]},
906
- {'ports': [port1, port2]},
907
- {'ports': [port1]}
862
+ iter([port1, port2]),
863
+ iter([port1, port2]),
864
+ iter([port1]),
908
865
  ]
909
- mock_time_time.side_effect = [1, 1, 2]
910
- update_port = self.driver.neutron_client.update_port
911
- update_port.side_effect = neutron_exceptions.PortNotFoundClient
866
+ update_port = self.driver.network_proxy.update_port
867
+ update_port.side_effect = os_exceptions.ResourceNotFound
912
868
  self.assertRaises(network_base.UnplugVIPException,
913
869
  self.driver.unplug_aap_port, lb.vip, lb.amphorae[0],
914
870
  subnet)
@@ -918,25 +874,25 @@ class TestAllowedAddressPairsDriver(base.TestCase):
918
874
  def test_unplug_aap_errors_when_update_port_fails(
919
875
  self, mock_time_sleep, mock_time_time):
920
876
  lb = dmh.generate_load_balancer_tree()
921
- port1 = t_constants.MOCK_NEUTRON_PORT['port']
877
+ port1 = t_constants.MOCK_NEUTRON_PORT
922
878
  port2 = {
923
879
  'id': '4', 'network_id': '3', 'fixed_ips':
924
- [{'ip_address': '10.0.0.2'}]
880
+ [{'ip_address': '10.0.0.2'}]
925
881
  }
926
882
 
927
883
  subnet = network_models.Subnet(
928
884
  id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
929
885
  network_id='3')
930
886
 
931
- list_ports = self.driver.neutron_client.list_ports
887
+ list_ports = self.driver.network_proxy.ports
932
888
  list_ports.side_effect = [
933
- {'ports': [port1, port2]},
934
- {'ports': [port1, port2]},
935
- {'ports': [port1]}
889
+ iter([port1, port2]),
890
+ iter([port1, port2]),
891
+ iter([port1]),
936
892
  ]
937
893
  mock_time_time.side_effect = [1, 1, 2]
938
894
 
939
- update_port = self.driver.neutron_client.update_port
895
+ update_port = self.driver.network_proxy.update_port
940
896
  update_port.side_effect = TypeError
941
897
  self.assertRaises(network_base.UnplugVIPException,
942
898
  self.driver.unplug_aap_port, lb.vip,
@@ -944,8 +900,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
944
900
 
945
901
  def test_unplug_vip_errors_when_vip_subnet_not_found(self):
946
902
  lb = dmh.generate_load_balancer_tree()
947
- show_subnet = self.driver.neutron_client.show_subnet
948
- show_subnet.side_effect = neutron_exceptions.NotFound
903
+ show_subnet = self.driver.network_proxy.get_subnet
904
+ show_subnet.side_effect = os_exceptions.ResourceNotFound
949
905
  self.assertRaises(network_base.PluggedVIPNotFound,
950
906
  self.driver.unplug_vip, lb, lb.vip)
951
907
 
@@ -953,7 +909,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
953
909
  'AllowedAddressPairsDriver.unplug_aap_port')
954
910
  def test_unplug_vip(self, mock):
955
911
  lb = dmh.generate_load_balancer_tree()
956
- show_subnet = self.driver.neutron_client.show_subnet
912
+ show_subnet = self.driver.network_proxy.get_subnet
957
913
  show_subnet.return_value = t_constants.MOCK_SUBNET
958
914
  self.driver.unplug_vip(lb, lb.vip)
959
915
  self.assertEqual(len(lb.amphorae), mock.call_count)
@@ -965,27 +921,27 @@ class TestAllowedAddressPairsDriver(base.TestCase):
965
921
  def test_unplug_aap_port(self, mock_unplug_network,
966
922
  mock_time_sleep, mock_time_time):
967
923
  lb = dmh.generate_load_balancer_tree()
968
- update_port = self.driver.neutron_client.update_port
969
- port1 = t_constants.MOCK_NEUTRON_PORT['port']
924
+ update_port = self.driver.network_proxy.update_port
925
+ port1 = t_constants.MOCK_NEUTRON_PORT
970
926
  port2 = {
971
927
  'id': '4', 'network_id': '3', 'fixed_ips':
972
- [{'ip_address': '10.0.0.2'}]
928
+ [{'ip_address': '10.0.0.2'}]
973
929
  }
974
930
  subnet = network_models.Subnet(
975
931
  id=t_constants.MOCK_MANAGEMENT_SUBNET_ID,
976
932
  network_id='3')
977
- list_ports = self.driver.neutron_client.list_ports
933
+ list_ports = self.driver.network_proxy.ports
978
934
  list_ports.side_effect = [
979
- {'ports': [port1, port2]},
980
- {'ports': [port1, port2]},
981
- {'ports': [port1]}
935
+ iter([port1, port2]),
936
+ iter([port1, port2]),
937
+ iter([port1]),
982
938
  ]
983
939
  mock_time_time.side_effect = [1, 1, 2]
984
- get_port = self.driver.neutron_client.get_port
985
- get_port.side_effect = neutron_exceptions.NotFound
940
+ get_port = self.driver.network_proxy.get_port
941
+ get_port.side_effect = os_exceptions.ResourceNotFound
986
942
  self.driver.unplug_aap_port(lb.vip, lb.amphorae[0], subnet)
987
- clear_aap = {'port': {'allowed_address_pairs': []}}
988
- update_port.assert_called_once_with(port2.get('id'), clear_aap)
943
+ clear_aap = {'allowed_address_pairs': []}
944
+ update_port.assert_called_once_with(port2.get('id'), **clear_aap)
989
945
  mock_unplug_network.assert_called_once_with(
990
946
  lb.amphorae[0].compute_id, subnet.network_id)
991
947
 
@@ -1032,15 +988,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1032
988
 
1033
989
  def test_unplug_network_when_compute_port_cant_be_found(self):
1034
990
  net_id = t_constants.MOCK_NOVA_INTERFACE.net_id
1035
- list_ports = self.driver.neutron_client.list_ports
1036
- list_ports.return_value = {'ports': []}
991
+ list_ports = self.driver.network_proxy.ports
992
+ list_ports.return_value = iter([])
1037
993
  self.assertRaises(network_base.NetworkNotFound,
1038
994
  self.driver.unplug_network,
1039
995
  t_constants.MOCK_COMPUTE_ID, net_id)
1040
996
 
1041
997
  def test_unplug_network_when_list_ports_fails(self):
1042
998
  net_id = t_constants.MOCK_NOVA_INTERFACE.net_id
1043
- list_ports = self.driver.neutron_client.list_ports
999
+ list_ports = self.driver.network_proxy.ports
1044
1000
  list_ports.side_effect = Exception
1045
1001
  self.assertRaises(network_base.NetworkException,
1046
1002
  self.driver.unplug_network,
@@ -1049,16 +1005,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1049
1005
  @mock.patch("time.time")
1050
1006
  @mock.patch("time.sleep")
1051
1007
  def test_unplug_network(self, mock_time_sleep, mock_time_time):
1052
- list_ports = self.driver.neutron_client.list_ports
1053
- port1 = t_constants.MOCK_NEUTRON_PORT['port']
1008
+ list_ports = self.driver.network_proxy.ports
1009
+ port1 = t_constants.MOCK_NEUTRON_PORT
1054
1010
  port2 = {
1055
1011
  'id': '4', 'network_id': '3', 'fixed_ips':
1056
- [{'ip_address': '10.0.0.2'}]
1012
+ [{'ip_address': '10.0.0.2'}]
1057
1013
  }
1058
1014
  list_ports.side_effect = [
1059
- {'ports': [port1, port2]},
1060
- {'ports': [port1, port2]},
1061
- {'ports': [port1]}
1015
+ iter([port1, port2]),
1016
+ iter([port1, port2]),
1017
+ iter([port1]),
1062
1018
  ]
1063
1019
  port_detach = self.driver.compute.detach_port
1064
1020
 
@@ -1076,13 +1032,14 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1076
1032
  @mock.patch("octavia.network.drivers.neutron.allowed_address_pairs.LOG")
1077
1033
  def test_unplug_network_timeout(self, mock_log,
1078
1034
  mock_time_sleep, mock_time_time):
1079
- list_ports = self.driver.neutron_client.list_ports
1080
- port1 = t_constants.MOCK_NEUTRON_PORT['port']
1081
- port2 = {
1035
+ list_ports = self.driver.network_proxy.ports
1036
+ port1 = t_constants.MOCK_NEUTRON_PORT
1037
+ port2 = Port(**{
1082
1038
  'id': '4', 'network_id': '3', 'fixed_ips':
1083
- [{'ip_address': '10.0.0.2'}]
1084
- }
1085
- list_ports.return_value = {'ports': [port1, port2]}
1039
+ [{'ip_address': '10.0.0.2'}]
1040
+ })
1041
+
1042
+ list_ports.side_effect = [iter([port1, port2]) for _ in range(7)]
1086
1043
  port_detach = self.driver.compute.detach_port
1087
1044
 
1088
1045
  mock_time_time.side_effect = [0, 0, 1, 2, 10, 20, 100, 300]
@@ -1099,12 +1056,13 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1099
1056
  lc_1 = data_models.ListenerCidr('l1', '10.0.101.0/24')
1100
1057
  lc_2 = data_models.ListenerCidr('l2', '10.0.102.0/24')
1101
1058
  lc_3 = data_models.ListenerCidr('l2', '10.0.103.0/24')
1059
+ lc_4 = data_models.ListenerCidr('l2', '2001:0DB8::/32')
1102
1060
  listeners = [data_models.Listener(protocol_port=80, peer_port=1024,
1103
1061
  protocol=constants.PROTOCOL_TCP,
1104
1062
  allowed_cidrs=[lc_1]),
1105
1063
  data_models.Listener(protocol_port=443, peer_port=1025,
1106
1064
  protocol=constants.PROTOCOL_TCP,
1107
- allowed_cidrs=[lc_2, lc_3]),
1065
+ allowed_cidrs=[lc_2, lc_3, lc_4]),
1108
1066
  data_models.Listener(protocol_port=50, peer_port=1026,
1109
1067
  protocol=constants.PROTOCOL_UDP)]
1110
1068
  vip = data_models.Vip(ip_address='10.0.0.2')
@@ -1113,94 +1071,101 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1113
1071
  ip_address=self.IPV6_ADDRESS_1)
1114
1072
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip,
1115
1073
  additional_vips=[additional_vip])
1116
- list_sec_grps = self.driver.neutron_client.list_security_groups
1117
- list_sec_grps.return_value = {'security_groups': [{'id': 'secgrp-1'}]}
1118
- fake_rules = {
1119
- 'security_group_rules': [
1120
- {'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp',
1121
- 'remote_ip_prefix': '10.0.101.0/24'},
1122
- {'id': 'rule-22', 'port_range_max': 22, 'protocol': 'tcp'}
1123
- ]
1124
- }
1125
- list_rules = self.driver.neutron_client.list_security_group_rules
1074
+ list_sec_grps = self.driver.network_proxy.find_security_group
1075
+ list_sec_grps.return_value = {'id': 'secgrp-1'}
1076
+ fake_rules = [
1077
+ {'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp',
1078
+ 'remote_ip_prefix': '10.0.101.0/24'},
1079
+ {'id': 'rule-22', 'port_range_max': 22, 'protocol': 'tcp'}
1080
+ ]
1081
+ list_rules = self.driver.network_proxy.security_group_rules
1126
1082
  list_rules.return_value = fake_rules
1127
- delete_rule = self.driver.neutron_client.delete_security_group_rule
1128
- create_rule = self.driver.neutron_client.create_security_group_rule
1083
+ delete_rule = self.driver.network_proxy.delete_security_group_rule
1084
+ create_rule = self.driver.network_proxy.create_security_group_rule
1129
1085
  self.driver.update_vip(lb)
1130
1086
  delete_rule.assert_called_once_with('rule-22')
1131
1087
  expected_create_rule_1 = {
1132
- 'security_group_rule': {
1133
- 'security_group_id': 'secgrp-1',
1134
- 'direction': 'ingress',
1135
- 'protocol': 'tcp',
1136
- 'port_range_min': 1024,
1137
- 'port_range_max': 1024,
1138
- 'ethertype': 'IPv4',
1139
- 'remote_ip_prefix': None
1140
- }
1088
+ 'security_group_id': 'secgrp-1',
1089
+ 'direction': 'ingress',
1090
+ 'protocol': 'tcp',
1091
+ 'port_range_min': 1024,
1092
+ 'port_range_max': 1024,
1093
+ 'ethertype': 'IPv4',
1094
+ 'remote_ip_prefix': None
1141
1095
  }
1142
1096
  expected_create_rule_udp_peer = {
1143
- 'security_group_rule': {
1144
- 'security_group_id': 'secgrp-1',
1145
- 'direction': 'ingress',
1146
- 'protocol': 'tcp',
1147
- 'port_range_min': 1026,
1148
- 'port_range_max': 1026,
1149
- 'ethertype': 'IPv4',
1150
- 'remote_ip_prefix': None
1151
- }
1097
+ 'security_group_id': 'secgrp-1',
1098
+ 'direction': 'ingress',
1099
+ 'protocol': 'tcp',
1100
+ 'port_range_min': 1026,
1101
+ 'port_range_max': 1026,
1102
+ 'ethertype': 'IPv4',
1103
+ 'remote_ip_prefix': None
1152
1104
  }
1153
1105
  expected_create_rule_2 = {
1154
- 'security_group_rule': {
1155
- 'security_group_id': 'secgrp-1',
1156
- 'direction': 'ingress',
1157
- 'protocol': 'tcp',
1158
- 'port_range_min': 1025,
1159
- 'port_range_max': 1025,
1160
- 'ethertype': 'IPv4',
1161
- 'remote_ip_prefix': None
1162
- }
1106
+ 'security_group_id': 'secgrp-1',
1107
+ 'direction': 'ingress',
1108
+ 'protocol': 'tcp',
1109
+ 'port_range_min': 1025,
1110
+ 'port_range_max': 1025,
1111
+ 'ethertype': 'IPv4',
1112
+ 'remote_ip_prefix': None
1163
1113
  }
1164
1114
  expected_create_rule_3 = {
1165
- 'security_group_rule': {
1166
- 'security_group_id': 'secgrp-1',
1167
- 'direction': 'ingress',
1168
- 'protocol': 'tcp',
1169
- 'port_range_min': 443,
1170
- 'port_range_max': 443,
1171
- 'ethertype': 'IPv4',
1172
- 'remote_ip_prefix': '10.0.102.0/24'
1173
- }
1115
+ 'security_group_id': 'secgrp-1',
1116
+ 'direction': 'ingress',
1117
+ 'protocol': 'tcp',
1118
+ 'port_range_min': 443,
1119
+ 'port_range_max': 443,
1120
+ 'ethertype': 'IPv4',
1121
+ 'remote_ip_prefix': '10.0.102.0/24'
1174
1122
  }
1175
1123
  expected_create_rule_4 = {
1176
- 'security_group_rule': {
1177
- 'security_group_id': 'secgrp-1',
1178
- 'direction': 'ingress',
1179
- 'protocol': 'tcp',
1180
- 'port_range_min': 443,
1181
- 'port_range_max': 443,
1182
- 'ethertype': 'IPv4',
1183
- 'remote_ip_prefix': '10.0.103.0/24'
1184
- }
1124
+ 'security_group_id': 'secgrp-1',
1125
+ 'direction': 'ingress',
1126
+ 'protocol': 'tcp',
1127
+ 'port_range_min': 443,
1128
+ 'port_range_max': 443,
1129
+ 'ethertype': 'IPv4',
1130
+ 'remote_ip_prefix': '10.0.103.0/24'
1131
+ }
1132
+ expected_create_rule_5 = {
1133
+ 'security_group_id': 'secgrp-1',
1134
+ 'direction': 'ingress',
1135
+ 'protocol': 'tcp',
1136
+ 'port_range_min': 443,
1137
+ 'port_range_max': 443,
1138
+ 'ethertype': 'IPv6',
1139
+ 'remote_ip_prefix': '2001:0DB8::/32'
1185
1140
  }
1186
- expected_create_rule_udp = {
1187
- 'security_group_rule': {
1188
- 'security_group_id': 'secgrp-1',
1189
- 'direction': 'ingress',
1190
- 'protocol': 'udp',
1191
- 'port_range_min': 50,
1192
- 'port_range_max': 50,
1193
- 'ethertype': 'IPv4',
1194
- 'remote_ip_prefix': None
1195
- }
1141
+ expected_create_rule_udp_1 = {
1142
+ 'security_group_id': 'secgrp-1',
1143
+ 'direction': 'ingress',
1144
+ 'protocol': 'udp',
1145
+ 'port_range_min': 50,
1146
+ 'port_range_max': 50,
1147
+ 'ethertype': 'IPv4',
1148
+ 'remote_ip_prefix': None
1149
+ }
1150
+ expected_create_rule_udp_2 = {
1151
+ 'security_group_id': 'secgrp-1',
1152
+ 'direction': 'ingress',
1153
+ 'protocol': 'udp',
1154
+ 'port_range_min': 50,
1155
+ 'port_range_max': 50,
1156
+ 'ethertype': 'IPv6',
1157
+ 'remote_ip_prefix': None
1196
1158
  }
1197
1159
 
1198
- create_rule.assert_has_calls([mock.call(expected_create_rule_1),
1199
- mock.call(expected_create_rule_udp_peer),
1200
- mock.call(expected_create_rule_2),
1201
- mock.call(expected_create_rule_3),
1202
- mock.call(expected_create_rule_4),
1203
- mock.call(expected_create_rule_udp)],
1160
+ create_rule.assert_has_calls([mock.call(**expected_create_rule_1),
1161
+ mock.call(
1162
+ **expected_create_rule_udp_peer),
1163
+ mock.call(**expected_create_rule_2),
1164
+ mock.call(**expected_create_rule_3),
1165
+ mock.call(**expected_create_rule_4),
1166
+ mock.call(**expected_create_rule_5),
1167
+ mock.call(**expected_create_rule_udp_1),
1168
+ mock.call(**expected_create_rule_udp_2)],
1204
1169
  any_order=True)
1205
1170
 
1206
1171
  def test_update_vip_when_protocol_and_peer_ports_overlap(self):
@@ -1214,18 +1179,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1214
1179
  allowed_cidrs=[lc_1])]
1215
1180
  vip = data_models.Vip(ip_address='10.0.0.2')
1216
1181
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
1217
- list_sec_grps = self.driver.neutron_client.list_security_groups
1218
- list_sec_grps.return_value = {'security_groups': [{'id': 'secgrp-1'}]}
1219
- fake_rules = {
1220
- 'security_group_rules': [
1221
- {'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp'},
1222
- {'id': 'rule-22', 'port_range_max': 22, 'protocol': 'tcp'}
1223
- ]
1224
- }
1225
- list_rules = self.driver.neutron_client.list_security_group_rules
1182
+ list_sec_grps = self.driver.network_proxy.find_security_group
1183
+ list_sec_grps.return_value = {'id': 'secgrp-1'}
1184
+ fake_rules = [
1185
+ {'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp'},
1186
+ {'id': 'rule-22', 'port_range_max': 22, 'protocol': 'tcp'}
1187
+ ]
1188
+ list_rules = self.driver.network_proxy.security_group_rules
1226
1189
  list_rules.return_value = fake_rules
1227
- delete_rule = self.driver.neutron_client.delete_security_group_rule
1228
- create_rule = self.driver.neutron_client.create_security_group_rule
1190
+ delete_rule = self.driver.network_proxy.delete_security_group_rule
1191
+ create_rule = self.driver.network_proxy.create_security_group_rule
1229
1192
  self.driver.update_vip(lb)
1230
1193
  delete_rule.assert_called_once_with('rule-22')
1231
1194
 
@@ -1245,19 +1208,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1245
1208
  provisioning_status=constants.PENDING_DELETE)]
1246
1209
  vip = data_models.Vip(ip_address='10.0.0.2')
1247
1210
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
1248
- list_sec_grps = self.driver.neutron_client.list_security_groups
1249
- list_sec_grps.return_value = {'security_groups': [{'id': 'secgrp-1'}]}
1250
- fake_rules = {
1251
- 'security_group_rules': [
1252
- {'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp'},
1253
- {'id': 'rule-22', 'port_range_max': 443, 'protocol': 'tcp'},
1254
- {'id': 'rule-udp-50', 'port_range_max': 50, 'protocol': 'tcp'}
1255
- ]
1256
- }
1257
- list_rules = self.driver.neutron_client.list_security_group_rules
1211
+ list_sec_grps = self.driver.network_proxy.find_security_group
1212
+ list_sec_grps.return_value = {'id': 'secgrp-1'}
1213
+ fake_rules = [
1214
+ {'id': 'rule-80', 'port_range_max': 80, 'protocol': 'tcp'},
1215
+ {'id': 'rule-22', 'port_range_max': 443, 'protocol': 'tcp'},
1216
+ {'id': 'rule-udp-50', 'port_range_max': 50, 'protocol': 'tcp'}
1217
+ ]
1218
+ list_rules = self.driver.network_proxy.security_group_rules
1258
1219
  list_rules.return_value = fake_rules
1259
- delete_rule = self.driver.neutron_client.delete_security_group_rule
1260
- create_rule = self.driver.neutron_client.create_security_group_rule
1220
+ delete_rule = self.driver.network_proxy.delete_security_group_rule
1221
+ create_rule = self.driver.network_proxy.create_security_group_rule
1261
1222
  self.driver.update_vip(lb)
1262
1223
  delete_rule.assert_has_calls(
1263
1224
  [mock.call('rule-22'), mock.call('rule-udp-50')])
@@ -1267,17 +1228,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1267
1228
  listeners = []
1268
1229
  vip = data_models.Vip(ip_address='10.0.0.2')
1269
1230
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
1270
- list_sec_grps = self.driver.neutron_client.list_security_groups
1271
- list_sec_grps.return_value = {'security_groups': [{'id': 'secgrp-1'}]}
1272
- fake_rules = {
1273
- 'security_group_rules': [
1274
- {'id': 'all-egress', 'protocol': None, 'direction': 'egress'},
1275
- {'id': 'ssh-rule', 'protocol': 'tcp', 'port_range_max': 22}
1276
- ]
1277
- }
1278
- list_rules = self.driver.neutron_client.list_security_group_rules
1231
+ list_sec_grps = self.driver.network_proxy.find_security_group
1232
+ list_sec_grps.return_value = {'id': 'secgrp-1'}
1233
+ fake_rules = [
1234
+ {'id': 'all-egress', 'protocol': None, 'direction': 'egress'},
1235
+ {'id': 'ssh-rule', 'protocol': 'tcp', 'port_range_max': 22}
1236
+ ]
1237
+ list_rules = self.driver.network_proxy.security_group_rules
1279
1238
  list_rules.return_value = fake_rules
1280
- delete_rule = self.driver.neutron_client.delete_security_group_rule
1239
+ delete_rule = self.driver.network_proxy.delete_security_group_rule
1281
1240
  self.driver.update_vip(lb)
1282
1241
  delete_rule.assert_called_once_with('ssh-rule')
1283
1242
 
@@ -1285,18 +1244,16 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1285
1244
  listeners = []
1286
1245
  vip = data_models.Vip(ip_address='10.0.0.2')
1287
1246
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
1288
- list_sec_grps = self.driver.neutron_client.list_security_groups
1289
- list_sec_grps.return_value = {'security_groups': [{'id': 'secgrp-1'}]}
1290
- fake_rules = {
1291
- 'security_group_rules': [
1292
- {'id': 'all-egress', 'protocol': None, 'direction': 'egress'},
1293
- {'id': 'ssh-rule', 'protocol': 'tcp', 'port_range_max': 22}
1294
- ]
1295
- }
1296
- list_rules = self.driver.neutron_client.list_security_group_rules
1247
+ list_sec_grps = self.driver.network_proxy.find_security_group
1248
+ list_sec_grps.return_value = {'id': 'secgrp-1'}
1249
+ fake_rules = [
1250
+ {'id': 'all-egress', 'protocol': None, 'direction': 'egress'},
1251
+ {'id': 'ssh-rule', 'protocol': 'tcp', 'port_range_max': 22}
1252
+ ]
1253
+ list_rules = self.driver.network_proxy.security_group_rules
1297
1254
  list_rules.return_value = fake_rules
1298
- delete_rule = self.driver.neutron_client.delete_security_group_rule
1299
- delete_rule.side_effect = neutron_exceptions.NotFound
1255
+ delete_rule = self.driver.network_proxy.delete_security_group_rule
1256
+ delete_rule.side_effect = os_exceptions.ResourceNotFound
1300
1257
  self.driver.update_vip(lb)
1301
1258
  delete_rule.assert_called_once_with('ssh-rule')
1302
1259
 
@@ -1304,8 +1261,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1304
1261
  listeners = []
1305
1262
  vip = data_models.Vip(ip_address='10.0.0.2')
1306
1263
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
1307
- list_sec_grps = self.driver.neutron_client.list_security_groups
1308
- list_sec_grps.return_value = {'security_groups': []}
1264
+ list_sec_grps = self.driver.network_proxy.find_security_group
1265
+ list_sec_grps.return_value = None
1309
1266
  self.assertRaises(exceptions.MissingVIPSecurityGroup,
1310
1267
  self.driver.update_vip,
1311
1268
  lb)
@@ -1317,25 +1274,27 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1317
1274
  listeners = []
1318
1275
  vip = data_models.Vip(ip_address='10.0.0.2')
1319
1276
  lb = data_models.LoadBalancer(id='1', listeners=listeners, vip=vip)
1320
- list_sec_grps = self.driver.neutron_client.list_security_groups
1321
- list_sec_grps.return_value = {'security_groups': []}
1277
+ list_sec_grps = self.driver.network_proxy.find_security_group
1278
+ list_sec_grps.return_value = None
1322
1279
  self.driver.update_vip(lb, for_delete=True)
1323
1280
  update_rules.assert_not_called()
1324
1281
 
1325
1282
  def test_failover_preparation(self):
1326
1283
  original_dns_integration_state = self.driver.dns_integration_enabled
1327
1284
  self.driver.dns_integration_enabled = False
1328
- ports = {"ports": [
1329
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1330
- "ip_address": self.IP_ADDRESS_1}],
1331
- "id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1},
1332
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1333
- "ip_address": self.IP_ADDRESS_2}],
1334
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}]}
1335
- self.driver.neutron_client.list_ports.return_value = ports
1336
- self.driver.neutron_client.show_port = mock.Mock(
1285
+ ports = [
1286
+ Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1287
+ "ip_address": self.IP_ADDRESS_1}],
1288
+ "id": self.FIXED_IP_ID_1,
1289
+ "network_id": self.NETWORK_ID_1}),
1290
+ Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1291
+ "ip_address": self.IP_ADDRESS_2}],
1292
+ "id": self.FIXED_IP_ID_2,
1293
+ "network_id": self.NETWORK_ID_2})]
1294
+ self.driver.network_proxy.ports.return_value = ports
1295
+ self.driver.network_proxy.get_port = mock.Mock(
1337
1296
  side_effect=self._failover_show_port_side_effect)
1338
- port_update = self.driver.neutron_client.update_port
1297
+ port_update = self.driver.network_proxy.update_port
1339
1298
  amphora = data_models.Amphora(
1340
1299
  id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
1341
1300
  compute_id=self.COMPUTE_ID, status=self.ACTIVE,
@@ -1346,38 +1305,42 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1346
1305
  self.driver.dns_integration_enabled = original_dns_integration_state
1347
1306
 
1348
1307
  def test_failover_preparation_dns_integration(self):
1349
- ports = {"ports": [
1350
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1351
- "ip_address": self.IP_ADDRESS_1}],
1352
- "id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1},
1353
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1354
- "ip_address": self.IP_ADDRESS_2}],
1355
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}]}
1308
+ ports = [
1309
+ Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1310
+ "ip_address": self.IP_ADDRESS_1}],
1311
+ "id": self.FIXED_IP_ID_1,
1312
+ "network_id": self.NETWORK_ID_1}),
1313
+ Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1314
+ "ip_address": self.IP_ADDRESS_2}],
1315
+ "id": self.FIXED_IP_ID_2,
1316
+ "network_id": self.NETWORK_ID_2})]
1356
1317
  original_dns_integration_state = self.driver.dns_integration_enabled
1357
1318
  self.driver.dns_integration_enabled = True
1358
- self.driver.neutron_client.list_ports.return_value = ports
1359
- self.driver.neutron_client.show_port = mock.Mock(
1319
+ self.driver.network_proxy.ports.return_value = ports
1320
+ self.driver.network_proxy.get_port = mock.Mock(
1360
1321
  side_effect=self._failover_show_port_side_effect)
1361
- port_update = self.driver.neutron_client.update_port
1322
+ port_update = self.driver.network_proxy.update_port
1362
1323
  amphora = data_models.Amphora(
1363
1324
  id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
1364
1325
  compute_id=self.COMPUTE_ID, status=self.ACTIVE,
1365
1326
  lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
1366
1327
  ha_ip=self.HA_IP)
1367
1328
  self.driver.failover_preparation(amphora)
1368
- port_update.assert_called_once_with(ports['ports'][1].get('id'),
1369
- {'port': {'dns_name': ''}})
1329
+ port_update.assert_called_once_with(ports[1].get('id'),
1330
+ dns_name='')
1370
1331
  self.driver.dns_integration_enabled = original_dns_integration_state
1371
1332
 
1372
1333
  def _failover_show_port_side_effect(self, port_id):
1373
1334
  if port_id == self.LB_NET_PORT_ID:
1374
- return {"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1375
- "ip_address": self.IP_ADDRESS_1}],
1376
- "id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1}
1335
+ return Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1336
+ "ip_address": self.IP_ADDRESS_1}],
1337
+ "id": self.FIXED_IP_ID_1,
1338
+ "network_id": self.NETWORK_ID_1})
1377
1339
  if port_id == self.HA_PORT_ID:
1378
- return {"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1379
- "ip_address": self.IP_ADDRESS_2}],
1380
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}
1340
+ return Port(**{"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1341
+ "ip_address": self.IP_ADDRESS_2}],
1342
+ "id": self.FIXED_IP_ID_2,
1343
+ "network_id": self.NETWORK_ID_2})
1381
1344
 
1382
1345
  def test_plug_port(self):
1383
1346
  port = mock.MagicMock()
@@ -1434,7 +1397,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1434
1397
  vip_mock = mock.MagicMock()
1435
1398
  amphora_mock.status = constants.DELETED
1436
1399
  load_balancer_mock.amphorae = [amphora_mock]
1437
- show_port = self.driver.neutron_client.show_port
1400
+ show_port = self.driver.network_proxy.get_port
1438
1401
  show_port.side_effect = [
1439
1402
  t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
1440
1403
  t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
@@ -1444,15 +1407,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1444
1407
  t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
1445
1408
  t_constants.MOCK_NEUTRON_PORT, t_constants.MOCK_NEUTRON_PORT,
1446
1409
  Exception('boom')]
1447
- fake_subnet = {'subnet': {
1410
+ fake_subnet = Subnet(**{
1448
1411
  'id': t_constants.MOCK_SUBNET_ID,
1449
1412
  'gateway_ip': t_constants.MOCK_IP_ADDRESS,
1450
- 'cidr': t_constants.MOCK_CIDR}}
1451
- fake_subnet2 = {'subnet': {
1413
+ 'cidr': t_constants.MOCK_CIDR})
1414
+ fake_subnet2 = Subnet(**{
1452
1415
  'id': t_constants.MOCK_SUBNET_ID2,
1453
1416
  'gateway_ip': t_constants.MOCK_IP_ADDRESS2,
1454
- 'cidr': t_constants.MOCK_CIDR}}
1455
- show_subnet = self.driver.neutron_client.show_subnet
1417
+ 'cidr': t_constants.MOCK_CIDR})
1418
+ show_subnet = self.driver.network_proxy.get_subnet
1456
1419
  show_subnet.return_value = fake_subnet
1457
1420
  configs = self.driver.get_network_configs(load_balancer_mock)
1458
1421
  self.assertEqual({}, configs)
@@ -1479,10 +1442,10 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1479
1442
  # will return the same values if a method happens to call it
1480
1443
  # multiple times for different subnets. We should be able to verify
1481
1444
  # different requests get different expected data.
1482
- expected_port_id = t_constants.MOCK_NEUTRON_PORT['port']['id']
1445
+ expected_port_id = t_constants.MOCK_NEUTRON_PORT['id']
1483
1446
  self.assertEqual(expected_port_id, config.ha_port.id)
1484
1447
  self.assertEqual(expected_port_id, config.vrrp_port.id)
1485
- expected_subnet_id = fake_subnet['subnet']['id']
1448
+ expected_subnet_id = fake_subnet['id']
1486
1449
  self.assertEqual(expected_subnet_id, config.ha_subnet.id)
1487
1450
  self.assertEqual(expected_subnet_id, config.vrrp_subnet.id)
1488
1451
 
@@ -1520,10 +1483,10 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1520
1483
  # will return the same values if a method happens to call it
1521
1484
  # multiple times for different subnets. We should be able to verify
1522
1485
  # different requests get different expected data.
1523
- expected_port_id = t_constants.MOCK_NEUTRON_PORT['port']['id']
1486
+ expected_port_id = t_constants.MOCK_NEUTRON_PORT['id']
1524
1487
  self.assertEqual(expected_port_id, config.ha_port.id)
1525
1488
  self.assertEqual(expected_port_id, config.vrrp_port.id)
1526
- expected_subnet_id = fake_subnet['subnet']['id']
1489
+ expected_subnet_id = fake_subnet['id']
1527
1490
  self.assertEqual(expected_subnet_id, config.ha_subnet.id)
1528
1491
  self.assertEqual(expected_subnet_id, config.vrrp_subnet.id)
1529
1492
 
@@ -1533,84 +1496,17 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1533
1496
  configs = self.driver.get_network_configs(load_balancer_mock)
1534
1497
  self.assertEqual(1, len(configs))
1535
1498
 
1536
- @mock.patch('time.sleep')
1537
- def test_wait_for_port_detach(self, mock_sleep):
1538
- amphora = data_models.Amphora(
1539
- id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
1540
- compute_id=self.COMPUTE_ID, status=self.ACTIVE,
1541
- lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
1542
- ha_ip=self.HA_IP)
1543
- ports = {"ports": [
1544
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1545
- "ip_address": self.IP_ADDRESS_1}],
1546
- "id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1},
1547
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1548
- "ip_address": self.IP_ADDRESS_2}],
1549
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}]}
1550
- show_port_1_without_device_id = {"fixed_ips": [
1551
- {"subnet_id": self.SUBNET_ID_1, "ip_address": self.IP_ADDRESS_1}],
1552
- "id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1,
1553
- "device_id": ''}
1554
- show_port_2_with_device_id = {"fixed_ips": [
1555
- {"subnet_id": self.SUBNET_ID_2, "ip_address": self.IP_ADDRESS_2}],
1556
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2,
1557
- "device_id": self.DEVICE_ID}
1558
- show_port_2_without_device_id = {"fixed_ips": [
1559
- {"subnet_id": self.SUBNET_ID_2, "ip_address": self.IP_ADDRESS_2}],
1560
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2,
1561
- "device_id": None}
1562
- self.driver.neutron_client.list_ports.return_value = ports
1563
- port_mock = mock.MagicMock()
1564
- port_mock.get = mock.Mock(
1565
- side_effect=[show_port_1_without_device_id,
1566
- show_port_2_with_device_id,
1567
- show_port_2_with_device_id,
1568
- show_port_2_without_device_id])
1569
- self.driver.neutron_client.show_port.return_value = port_mock
1570
- self.driver.wait_for_port_detach(amphora)
1571
- self.assertEqual(1, mock_sleep.call_count)
1572
-
1573
- @mock.patch('time.time')
1574
- @mock.patch('time.sleep')
1575
- def test_wait_for_port_detach_timeout(self, mock_sleep, mock_time):
1576
- mock_time.side_effect = [1, 2, 6]
1577
- conf = oslo_fixture.Config(cfg.CONF)
1578
- conf.config(group="networking", port_detach_timeout=5)
1579
- amphora = data_models.Amphora(
1580
- id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
1581
- compute_id=self.COMPUTE_ID, status=self.ACTIVE,
1582
- lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
1583
- ha_ip=self.HA_IP)
1584
- ports = {"ports": [
1585
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_1,
1586
- "ip_address": self.IP_ADDRESS_1}],
1587
- "id": self.FIXED_IP_ID_1, "network_id": self.NETWORK_ID_1},
1588
- {"fixed_ips": [{"subnet_id": self.SUBNET_ID_2,
1589
- "ip_address": self.IP_ADDRESS_2}],
1590
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2}]}
1591
- show_port_1_with_device_id = {"fixed_ips": [
1592
- {"subnet_id": self.SUBNET_ID_2, "ip_address": self.IP_ADDRESS_2}],
1593
- "id": self.FIXED_IP_ID_2, "network_id": self.NETWORK_ID_2,
1594
- "device_id": self.DEVICE_ID}
1595
- self.driver.neutron_client.list_ports.return_value = ports
1596
- port_mock = mock.MagicMock()
1597
- port_mock.get = mock.Mock(
1598
- return_value=show_port_1_with_device_id)
1599
- self.driver.neutron_client.show_port.return_value = port_mock
1600
- self.assertRaises(network_base.TimeoutException,
1601
- self.driver.wait_for_port_detach,
1602
- amphora)
1603
-
1604
1499
  def test_delete_port(self):
1605
1500
  PORT_ID = uuidutils.generate_uuid()
1606
1501
 
1607
- self.driver.neutron_client.delete_port.side_effect = [
1608
- mock.DEFAULT, neutron_exceptions.NotFound, Exception('boom')]
1502
+ self.driver.network_proxy.delete_port.side_effect = [
1503
+ mock.DEFAULT, os_exceptions.ResourceNotFound,
1504
+ Exception('boom')]
1609
1505
 
1610
1506
  # Test successful delete
1611
1507
  self.driver.delete_port(PORT_ID)
1612
1508
 
1613
- self.driver.neutron_client.delete_port.assert_called_once_with(PORT_ID)
1509
+ self.driver.network_proxy.delete_port.assert_called_once_with(PORT_ID)
1614
1510
 
1615
1511
  # Test port NotFound (does not raise)
1616
1512
  self.driver.delete_port(PORT_ID)
@@ -1623,24 +1519,24 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1623
1519
  PORT_ID = uuidutils.generate_uuid()
1624
1520
  TEST_STATE = 'test state'
1625
1521
 
1626
- self.driver.neutron_client.update_port.side_effect = [
1627
- mock.DEFAULT, neutron_exceptions.NotFound, Exception('boom')]
1522
+ self.driver.network_proxy.update_port.side_effect = [
1523
+ mock.DEFAULT, os_exceptions.ResourceNotFound, Exception('boom')]
1628
1524
 
1629
1525
  # Test successful state set
1630
1526
  self.driver.set_port_admin_state_up(PORT_ID, TEST_STATE)
1631
1527
 
1632
- self.driver.neutron_client.update_port.assert_called_once_with(
1633
- PORT_ID, {'port': {'admin_state_up': TEST_STATE}})
1528
+ self.driver.network_proxy.update_port.assert_called_once_with(
1529
+ PORT_ID, admin_state_up=TEST_STATE)
1634
1530
 
1635
1531
  # Test port NotFound
1636
1532
  self.assertRaises(network_base.PortNotFound,
1637
1533
  self.driver.set_port_admin_state_up,
1638
- PORT_ID, {'port': {'admin_state_up': TEST_STATE}})
1534
+ PORT_ID, TEST_STATE)
1639
1535
 
1640
1536
  # Test unknown exception
1641
1537
  self.assertRaises(exceptions.NetworkServiceError,
1642
1538
  self.driver.set_port_admin_state_up, PORT_ID,
1643
- {'port': {'admin_state_up': TEST_STATE}})
1539
+ TEST_STATE)
1644
1540
 
1645
1541
  def test_create_port(self):
1646
1542
  ADMIN_STATE_UP = False
@@ -1655,7 +1551,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1655
1551
  SUBNET1_ID = uuidutils.generate_uuid()
1656
1552
  FIXED_IPS = [{'subnet_id': SUBNET1_ID, 'ip_address': IP_ADDRESS1}]
1657
1553
 
1658
- MOCK_NEUTRON_PORT = {'port': {
1554
+ MOCK_NEUTRON_PORT = Port(**{
1659
1555
  'network_id': NETWORK_ID, 'device_id': t_constants.MOCK_DEVICE_ID,
1660
1556
  'device_owner': t_constants.MOCK_DEVICE_OWNER,
1661
1557
  'id': t_constants.MOCK_PORT_ID, 'name': FAKE_NAME,
@@ -1666,7 +1562,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1666
1562
  'fixed_ips': [{'ip_address': IP_ADDRESS1,
1667
1563
  'subnet_id': SUBNET1_ID}],
1668
1564
  'security_groups': [],
1669
- 'qos_policy_id': QOS_POLICY_ID}}
1565
+ 'qos_policy_id': QOS_POLICY_ID})
1670
1566
 
1671
1567
  reference_port_dict = {'admin_state_up': ADMIN_STATE_UP,
1672
1568
  'device_id': t_constants.MOCK_DEVICE_ID,
@@ -1682,7 +1578,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1682
1578
  'security_group_ids': [],
1683
1579
  'status': t_constants.MOCK_STATUS}
1684
1580
 
1685
- self.driver.neutron_client.create_port.side_effect = [
1581
+ self.driver.network_proxy.create_port.side_effect = [
1686
1582
  MOCK_NEUTRON_PORT, MOCK_NEUTRON_PORT, Exception('boom')]
1687
1583
 
1688
1584
  # Test successful path
@@ -1693,8 +1589,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1693
1589
  qos_policy_id=QOS_POLICY_ID)
1694
1590
 
1695
1591
  self.assertEqual(reference_port_dict, result.to_dict())
1696
- self.driver.neutron_client.create_port.assert_called_once_with(
1697
- {'port': {
1592
+ self.driver.network_proxy.create_port.assert_called_once_with(
1593
+ **{
1698
1594
  'network_id': NETWORK_ID, 'admin_state_up': ADMIN_STATE_UP,
1699
1595
  'device_owner': allowed_address_pairs.OCTAVIA_OWNER,
1700
1596
  'allowed_address_pairs': [
@@ -1702,7 +1598,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1702
1598
  'fixed_ips': [{
1703
1599
  'subnet_id': SUBNET1_ID, 'ip_address': IP_ADDRESS1}],
1704
1600
  'name': FAKE_NAME, 'qos_policy_id': QOS_POLICY_ID,
1705
- 'security_groups': [SECURITY_GROUP_ID]}})
1601
+ 'security_groups': [SECURITY_GROUP_ID]})
1706
1602
 
1707
1603
  # Test minimal successful path
1708
1604
  result = self.driver.create_port(NETWORK_ID)
@@ -1720,8 +1616,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1720
1616
 
1721
1617
  # Test the case of security groups disabled in neutron
1722
1618
  FAKE_SG_NAME = 'Fake_SG_name'
1723
- FAKE_NEUTRON_SECURITY_GROUPS = {'security_groups': [
1724
- t_constants.MOCK_SECURITY_GROUP]}
1619
+ FAKE_NEUTRON_SECURITY_GROUPS = iter([t_constants.MOCK_SECURITY_GROUP])
1725
1620
  reference_sg_dict = {'id': t_constants.MOCK_SECURITY_GROUP_ID,
1726
1621
  'name': t_constants.MOCK_SECURITY_GROUP_NAME,
1727
1622
  'description': '', 'tags': [],
@@ -1729,15 +1624,15 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1729
1624
  'stateful': None,
1730
1625
  'project_id': t_constants.MOCK_PROJECT_ID}
1731
1626
 
1732
- neutron_client = self.driver.neutron_client
1733
- neutron_client.list_security_groups.side_effect = [
1734
- FAKE_NEUTRON_SECURITY_GROUPS, None, Exception('boom')]
1627
+ network_proxy = self.driver.network_proxy
1628
+ network_proxy.security_groups.side_effect = [
1629
+ FAKE_NEUTRON_SECURITY_GROUPS, iter([]), Exception('boom')]
1735
1630
 
1736
1631
  self.driver.sec_grp_enabled = False
1737
1632
  result = self.driver.get_security_group(FAKE_SG_NAME)
1738
1633
 
1739
1634
  self.assertIsNone(result)
1740
- neutron_client.list_security_groups.assert_not_called()
1635
+ network_proxy.security_groups.assert_not_called()
1741
1636
 
1742
1637
  # Test successful get of the security group
1743
1638
  self.driver.sec_grp_enabled = True
@@ -1745,7 +1640,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
1745
1640
  result = self.driver.get_security_group(FAKE_SG_NAME)
1746
1641
 
1747
1642
  self.assertEqual(reference_sg_dict, result.to_dict())
1748
- neutron_client.list_security_groups.assert_called_once_with(
1643
+ network_proxy.security_groups.assert_called_once_with(
1749
1644
  name=FAKE_SG_NAME)
1750
1645
 
1751
1646
  # Test no security groups returned