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
@@ -12,6 +12,12 @@
12
12
  # License for the specific language governing permissions and limitations
13
13
  # under the License.
14
14
  from octavia_lib.common import constants as lib_constants
15
+ from openstack.network.v2.floating_ip import FloatingIP
16
+ from openstack.network.v2.network import Network
17
+ from openstack.network.v2.network_ip_availability import NetworkIPAvailability
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
15
21
 
16
22
  from octavia.common import constants
17
23
 
@@ -43,16 +49,16 @@ MOCK_MAC_ADDR = 'fe:16:3e:00:95:5c'
43
49
  MOCK_MAC_ADDR2 = 'fe:16:3e:00:95:5d'
44
50
  MOCK_PROJECT_ID = 'mock-project-1'
45
51
  MOCK_HOST_ROUTES = []
46
- MOCK_SUBNET = {'subnet': {'id': MOCK_SUBNET_ID,
47
- 'network_id': MOCK_NETWORK_ID,
48
- 'name': MOCK_SUBNET_NAME,
49
- 'tenant_id': MOCK_PROJECT_ID,
50
- 'gateway_ip': MOCK_GATEWAY_IP,
51
- 'cidr': MOCK_CIDR,
52
- 'ip_version': MOCK_IP_VERSION,
53
- 'host_routes': MOCK_HOST_ROUTES}}
54
- MOCK_SUBNET2 = {'subnet': {'id': MOCK_SUBNET_ID2,
55
- 'network_id': MOCK_NETWORK_ID2}}
52
+ MOCK_SUBNET = Subnet(**{'id': MOCK_SUBNET_ID,
53
+ 'network_id': MOCK_NETWORK_ID,
54
+ 'name': MOCK_SUBNET_NAME,
55
+ 'tenant_id': MOCK_PROJECT_ID,
56
+ 'gateway_ip': MOCK_GATEWAY_IP,
57
+ 'cidr': MOCK_CIDR,
58
+ 'ip_version': MOCK_IP_VERSION,
59
+ 'host_routes': MOCK_HOST_ROUTES})
60
+ MOCK_SUBNET2 = Subnet(**{'id': MOCK_SUBNET_ID2,
61
+ 'network_id': MOCK_NETWORK_ID2})
56
62
  MOCK_HOST_ROUTES = []
57
63
 
58
64
  MOCK_NOVA_INTERFACE = MockNovaInterface()
@@ -69,7 +75,7 @@ MOCK_DEVICE_ID2 = 'Moctavia124'
69
75
  MOCK_SECURITY_GROUP_ID = 'security-group-1'
70
76
  MOCK_SECURITY_GROUP_NAME = 'SecurityGroup1'
71
77
 
72
- MOCK_SECURITY_GROUP = {
78
+ MOCK_SECURITY_GROUP = SecurityGroup(**{
73
79
  "id": MOCK_SECURITY_GROUP_ID,
74
80
  "name": MOCK_SECURITY_GROUP_NAME,
75
81
  "tenant_id": MOCK_PROJECT_ID,
@@ -113,7 +119,7 @@ MOCK_SECURITY_GROUP = {
113
119
  "created_at": "2020-03-12T20:43:31Z",
114
120
  "updated_at": "2020-03-12T20:44:48Z",
115
121
  "revision_number": 3,
116
- "project_id": MOCK_PROJECT_ID}
122
+ "project_id": MOCK_PROJECT_ID})
117
123
 
118
124
  MOCK_ADMIN_STATE_UP = True
119
125
  MOCK_STATUS = 'ACTIVE'
@@ -122,59 +128,60 @@ MOCK_NETWORK_TYPE = 'flat'
122
128
  MOCK_SEGMENTATION_ID = 1
123
129
  MOCK_ROUTER_EXTERNAL = False
124
130
 
125
- MOCK_NEUTRON_PORT = {'port': {'network_id': MOCK_NETWORK_ID,
126
- 'device_id': MOCK_DEVICE_ID,
127
- 'device_owner': MOCK_DEVICE_OWNER,
128
- 'id': MOCK_PORT_ID,
129
- 'name': MOCK_PORT_NAME,
130
- 'tenant_id': MOCK_PROJECT_ID,
131
- 'admin_state_up': MOCK_ADMIN_STATE_UP,
132
- 'status': MOCK_STATUS,
133
- 'mac_address': MOCK_MAC_ADDR,
134
- 'fixed_ips': [{'ip_address': MOCK_IP_ADDRESS,
135
- 'subnet_id': MOCK_SUBNET_ID}],
136
- 'security_groups': [MOCK_SECURITY_GROUP_ID]}}
131
+ MOCK_NEUTRON_PORT = Port(**{'network_id': MOCK_NETWORK_ID,
132
+ 'device_id': MOCK_DEVICE_ID,
133
+ 'device_owner': MOCK_DEVICE_OWNER,
134
+ 'id': MOCK_PORT_ID,
135
+ 'name': MOCK_PORT_NAME,
136
+ 'tenant_id': MOCK_PROJECT_ID,
137
+ 'admin_state_up': MOCK_ADMIN_STATE_UP,
138
+ 'status': MOCK_STATUS,
139
+ 'mac_address': MOCK_MAC_ADDR,
140
+ 'fixed_ips': [{'ip_address': MOCK_IP_ADDRESS,
141
+ 'subnet_id': MOCK_SUBNET_ID}],
142
+ 'security_groups': [MOCK_SECURITY_GROUP_ID]})
137
143
  MOCK_NEUTRON_QOS_POLICY_ID = 'mock-qos-id'
138
144
  MOCK_QOS_POLICY_ID1 = 'qos1-id'
139
145
  MOCK_QOS_POLICY_ID2 = 'qos2-id'
140
146
 
141
- MOCK_NEUTRON_PORT2 = {'port': {'network_id': MOCK_NETWORK_ID2,
142
- 'device_id': MOCK_DEVICE_ID2,
143
- 'device_owner': MOCK_DEVICE_OWNER,
144
- 'id': MOCK_PORT_ID2,
145
- 'name': MOCK_PORT_NAME2,
146
- 'tenant_id': MOCK_PROJECT_ID,
147
- 'admin_state_up': MOCK_ADMIN_STATE_UP,
148
- 'status': MOCK_STATUS,
149
- 'mac_address': MOCK_MAC_ADDR2,
150
- 'fixed_ips': [{'ip_address': MOCK_IP_ADDRESS2,
151
- 'subnet_id': MOCK_SUBNET_ID2}]}}
147
+ MOCK_NEUTRON_PORT2 = Port(**{'network_id': MOCK_NETWORK_ID2,
148
+ 'device_id': MOCK_DEVICE_ID2,
149
+ 'device_owner': MOCK_DEVICE_OWNER,
150
+ 'id': MOCK_PORT_ID2,
151
+ 'name': MOCK_PORT_NAME2,
152
+ 'tenant_id': MOCK_PROJECT_ID,
153
+ 'admin_state_up': MOCK_ADMIN_STATE_UP,
154
+ 'status': MOCK_STATUS,
155
+ 'mac_address': MOCK_MAC_ADDR2,
156
+ 'fixed_ips': [{'ip_address': MOCK_IP_ADDRESS2,
157
+ 'subnet_id': MOCK_SUBNET_ID2}]})
152
158
 
153
- MOCK_NETWORK = {'network': {'id': MOCK_NETWORK_ID,
154
- 'name': MOCK_NETWORK_NAME,
155
- 'tenant_id': MOCK_PROJECT_ID,
156
- 'admin_state_up': MOCK_ADMIN_STATE_UP,
157
- 'subnets': [MOCK_SUBNET_ID],
158
- 'mtu': MOCK_MTU,
159
- 'provider:network_type': 'flat',
160
- 'provider:physical_network': MOCK_NETWORK_NAME,
161
- 'provider:segmentation_id': MOCK_SEGMENTATION_ID,
162
- 'router:external': MOCK_ROUTER_EXTERNAL}}
163
- MOCK_FIXED_IP = {'fixed_ip': {'subnet_id': MOCK_SUBNET_ID,
164
- 'ip_address': MOCK_IP_ADDRESS}}
159
+ MOCK_NETWORK = Network(**{'id': MOCK_NETWORK_ID,
160
+ 'name': MOCK_NETWORK_NAME,
161
+ 'project_id': MOCK_PROJECT_ID,
162
+ 'admin_state_up': MOCK_ADMIN_STATE_UP,
163
+ 'subnet_ids': [MOCK_SUBNET_ID],
164
+ 'mtu': MOCK_MTU,
165
+ 'provider_network_type': 'flat',
166
+ 'provider_physical_network': MOCK_NETWORK_NAME,
167
+ 'provider_segmentation_id': MOCK_SEGMENTATION_ID,
168
+ 'router_external': MOCK_ROUTER_EXTERNAL,
169
+ 'port_security_enabled': False})
170
+ MOCK_FIXED_IP = {'subnet_id': MOCK_SUBNET_ID,
171
+ 'ip_address': MOCK_IP_ADDRESS}
165
172
  MOCK_FLOATING_IP_ID = 'floating-ip-1'
166
173
  MOCK_FLOATING_IP_DESC = 'TestFloatingIP1'
167
174
  MOCK_ROUTER_ID = 'mock-router-1'
168
- MOCK_FLOATING_IP = {'floatingip': {'id': MOCK_FLOATING_IP_ID,
169
- 'description': MOCK_FLOATING_IP_DESC,
170
- 'tenant_id': MOCK_PROJECT_ID,
171
- 'status': MOCK_STATUS,
172
- 'port_id': MOCK_PORT_ID,
173
- 'router_id': MOCK_ROUTER_ID,
174
- 'floating_network_id': MOCK_NETWORK_ID,
175
- 'floating_ip_address': MOCK_IP_ADDRESS,
176
- 'fixed_ip_address': MOCK_IP_ADDRESS2,
177
- 'fixed_port_id': MOCK_PORT_ID2}}
175
+ MOCK_FLOATING_IP = FloatingIP(**{'id': MOCK_FLOATING_IP_ID,
176
+ 'description': MOCK_FLOATING_IP_DESC,
177
+ 'tenant_id': MOCK_PROJECT_ID,
178
+ 'status': MOCK_STATUS,
179
+ 'port_id': MOCK_PORT_ID,
180
+ 'router_id': MOCK_ROUTER_ID,
181
+ 'floating_network_id': MOCK_NETWORK_ID,
182
+ 'floating_ip_address': MOCK_IP_ADDRESS,
183
+ 'fixed_ip_address': MOCK_IP_ADDRESS2,
184
+ 'fixed_port_id': MOCK_PORT_ID2})
178
185
 
179
186
  MOCK_AMP_ID1 = 'amp1-id'
180
187
  MOCK_AMP_ID2 = 'amp2-id'
@@ -205,17 +212,17 @@ MOCK_MANAGEMENT_INTERFACE2.net_id = MOCK_MANAGEMENT_NET_ID
205
212
  MOCK_MANAGEMENT_INTERFACE2.port_id = MOCK_MANAGEMENT_PORT_ID2
206
213
  MOCK_MANAGEMENT_INTERFACE2.fixed_ips = MOCK_MANAGEMENT_FIXED_IPS2
207
214
 
208
- MOCK_MANAGEMENT_PORT1 = {'port': {'network_id': MOCK_MANAGEMENT_NET_ID,
209
- 'device_id': MOCK_AMP_COMPUTE_ID1,
210
- 'device_owner': MOCK_DEVICE_OWNER,
211
- 'id': MOCK_MANAGEMENT_PORT_ID1,
212
- 'fixed_ips': MOCK_MANAGEMENT_FIXED_IPS1}}
215
+ MOCK_MANAGEMENT_PORT1 = Port(**{'network_id': MOCK_MANAGEMENT_NET_ID,
216
+ 'device_id': MOCK_AMP_COMPUTE_ID1,
217
+ 'device_owner': MOCK_DEVICE_OWNER,
218
+ 'id': MOCK_MANAGEMENT_PORT_ID1,
219
+ 'fixed_ips': MOCK_MANAGEMENT_FIXED_IPS1})
213
220
 
214
- MOCK_MANAGEMENT_PORT2 = {'port': {'network_id': MOCK_MANAGEMENT_NET_ID,
215
- 'device_id': MOCK_AMP_COMPUTE_ID2,
216
- 'device_owner': MOCK_DEVICE_OWNER,
217
- 'id': MOCK_MANAGEMENT_PORT_ID2,
218
- 'fixed_ips': MOCK_MANAGEMENT_FIXED_IPS2}}
221
+ MOCK_MANAGEMENT_PORT2 = Port(**{'network_id': MOCK_MANAGEMENT_NET_ID,
222
+ 'device_id': MOCK_AMP_COMPUTE_ID2,
223
+ 'device_owner': MOCK_DEVICE_OWNER,
224
+ 'id': MOCK_MANAGEMENT_PORT_ID2,
225
+ 'fixed_ips': MOCK_MANAGEMENT_FIXED_IPS2})
219
226
 
220
227
  MOCK_VIP_SUBNET_ID = 'vip-subnet-1'
221
228
  MOCK_VIP_SUBNET_ID2 = 'vip-subnet-2'
@@ -242,17 +249,17 @@ MOCK_VRRP_INTERFACE2.net_id = MOCK_VIP_NET_ID
242
249
  MOCK_VRRP_INTERFACE2.port_id = MOCK_VRRP_PORT_ID2
243
250
  MOCK_VRRP_INTERFACE2.fixed_ips = MOCK_VRRP_FIXED_IPS2
244
251
 
245
- MOCK_VRRP_PORT1 = {'port': {'network_id': MOCK_VIP_NET_ID,
246
- 'device_id': MOCK_AMP_COMPUTE_ID1,
247
- 'device_owner': MOCK_DEVICE_OWNER,
248
- 'id': MOCK_VRRP_PORT_ID1,
249
- 'fixed_ips': MOCK_VRRP_FIXED_IPS1}}
252
+ MOCK_VRRP_PORT1 = Port(**{'network_id': MOCK_VIP_NET_ID,
253
+ 'device_id': MOCK_AMP_COMPUTE_ID1,
254
+ 'device_owner': MOCK_DEVICE_OWNER,
255
+ 'id': MOCK_VRRP_PORT_ID1,
256
+ 'fixed_ips': MOCK_VRRP_FIXED_IPS1})
250
257
 
251
- MOCK_VRRP_PORT2 = {'port': {'network_id': MOCK_VIP_NET_ID,
252
- 'device_id': MOCK_AMP_COMPUTE_ID2,
253
- 'device_owner': MOCK_DEVICE_OWNER,
254
- 'id': MOCK_VRRP_PORT_ID2,
255
- 'fixed_ips': MOCK_VRRP_FIXED_IPS2}}
258
+ MOCK_VRRP_PORT2 = Port(**{'network_id': MOCK_VIP_NET_ID,
259
+ 'device_id': MOCK_AMP_COMPUTE_ID2,
260
+ 'device_owner': MOCK_DEVICE_OWNER,
261
+ 'id': MOCK_VRRP_PORT_ID2,
262
+ 'fixed_ips': MOCK_VRRP_FIXED_IPS2})
256
263
 
257
264
  MOCK_NETWORK_TOTAL_IPS = 254
258
265
  MOCK_NETWORK_USED_IPS = 0
@@ -262,13 +269,13 @@ MOCK_SUBNET_IP_AVAILABILITY = [{'used_ips': MOCK_SUBNET_USED_IPS,
262
269
  'subnet_id': MOCK_SUBNET_ID,
263
270
  'total_ips': MOCK_SUBNET_TOTAL_IPS}]
264
271
 
265
- MOCK_NETWORK_IP_AVAILABILITY = {'network_ip_availability': (
266
- {'network_id': MOCK_NETWORK_ID,
267
- 'tenant_id': MOCK_PROJECT_ID,
268
- 'network_name': MOCK_NETWORK_NAME,
269
- 'total_ips': MOCK_NETWORK_TOTAL_IPS,
270
- 'used_ips': MOCK_NETWORK_USED_IPS,
271
- 'subnet_ip_availability': MOCK_SUBNET_IP_AVAILABILITY})}
272
+ MOCK_NETWORK_IP_AVAILABILITY = NetworkIPAvailability(
273
+ **{'network_id': MOCK_NETWORK_ID,
274
+ 'tenant_id': MOCK_PROJECT_ID,
275
+ 'network_name': MOCK_NETWORK_NAME,
276
+ 'total_ips': MOCK_NETWORK_TOTAL_IPS,
277
+ 'used_ips': MOCK_NETWORK_USED_IPS,
278
+ 'subnet_ip_availability': MOCK_SUBNET_IP_AVAILABILITY})
272
279
 
273
280
  INVALID_LISTENER_POOL_PROTOCOL_MAP = {
274
281
  constants.PROTOCOL_HTTP: [constants.PROTOCOL_HTTPS,
@@ -476,7 +476,10 @@ class SampleDriverDataModels(object):
476
476
  lib_consts.TLS_CIPHERS: constants.CIPHERS_OWASP_SUITE_B,
477
477
  lib_consts.TLS_VERSIONS: constants.TLS_VERSIONS_OWASP_SUITE_B,
478
478
  lib_consts.ALPN_PROTOCOLS:
479
- constants.AMPHORA_SUPPORTED_ALPN_PROTOCOLS
479
+ constants.AMPHORA_SUPPORTED_ALPN_PROTOCOLS,
480
+ lib_consts.HSTS_INCLUDE_SUBDOMAINS: False,
481
+ lib_consts.HSTS_MAX_AGE: None,
482
+ lib_consts.HSTS_PRELOAD: False,
480
483
  }
481
484
 
482
485
  self.test_listener1_dict.update(self._common_test_dict)
@@ -488,6 +491,9 @@ class SampleDriverDataModels(object):
488
491
  self.test_listener2_dict[lib_consts.DEFAULT_POOL_ID] = self.pool2_id
489
492
  self.test_listener2_dict[
490
493
  lib_consts.DEFAULT_POOL] = self.test_pool2_dict
494
+ self.test_listener2_dict[lib_consts.HSTS_INCLUDE_SUBDOMAINS] = True
495
+ self.test_listener2_dict[lib_consts.HSTS_MAX_AGE] = 10
496
+ self.test_listener2_dict[lib_consts.HSTS_PRELOAD] = False
491
497
  del self.test_listener2_dict[lib_consts.L7POLICIES]
492
498
  del self.test_listener2_dict[constants.SNI_CONTAINERS]
493
499
  del self.test_listener2_dict[constants.CLIENT_CA_TLS_CERTIFICATE_ID]
@@ -524,6 +530,9 @@ class SampleDriverDataModels(object):
524
530
  lib_consts.DEFAULT_TLS_CONTAINER_REF:
525
531
  self.default_tls_container_ref,
526
532
  lib_consts.DESCRIPTION: 'Listener 1',
533
+ lib_consts.HSTS_INCLUDE_SUBDOMAINS: False,
534
+ lib_consts.HSTS_MAX_AGE: None,
535
+ lib_consts.HSTS_PRELOAD: False,
527
536
  lib_consts.INSERT_HEADERS: {},
528
537
  lib_consts.L7POLICIES: self.provider_l7policies_dict,
529
538
  lib_consts.LISTENER_ID: self.listener1_id,
@@ -571,6 +580,9 @@ class SampleDriverDataModels(object):
571
580
  self.provider_listener2_dict[
572
581
  lib_consts.CLIENT_CRL_CONTAINER_REF] = None
573
582
  del self.provider_listener2_dict[lib_consts.CLIENT_CRL_CONTAINER_DATA]
583
+ self.provider_listener2_dict[lib_consts.HSTS_INCLUDE_SUBDOMAINS] = True
584
+ self.provider_listener2_dict[lib_consts.HSTS_MAX_AGE] = 10
585
+ self.provider_listener2_dict[lib_consts.HSTS_PRELOAD] = False
574
586
 
575
587
  self.provider_listener1 = driver_dm.Listener(
576
588
  **self.provider_listener1_dict)
@@ -0,0 +1,32 @@
1
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
2
+ # not use this file except in compliance with the License. You may obtain
3
+ # a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10
+ # License for the specific language governing permissions and limitations
11
+ # under the License.
12
+
13
+ import warnings
14
+
15
+ import fixtures
16
+ from sqlalchemy import exc as sqla_exc
17
+
18
+
19
+ class WarningsFixture(fixtures.Fixture):
20
+ """Filters out warnings during test runs."""
21
+
22
+ def setUp(self):
23
+ super().setUp()
24
+ # Make deprecation warnings only happen once to avoid spamming
25
+ warnings.simplefilter('once', DeprecationWarning)
26
+
27
+ # Enable deprecation warnings to capture upcoming SQLAlchemy changes
28
+ warnings.filterwarnings(
29
+ 'error',
30
+ category=sqla_exc.SADeprecationWarning)
31
+
32
+ self.addCleanup(warnings.resetwarnings)
@@ -1008,7 +1008,9 @@ class TestServerTestCase(base.TestCase):
1008
1008
 
1009
1009
  mock_int_exists.return_value = False
1010
1010
  netns_handle = mock_netns.return_value.__enter__.return_value
1011
- netns_handle.get_links.return_value = [0] * test_int_num
1011
+ netns_handle.get_links.return_value = [
1012
+ {'attrs': [['IFLA_IFNAME', f'eth{idx}']]}
1013
+ for idx in range(test_int_num)]
1012
1014
  mock_isfile.return_value = True
1013
1015
 
1014
1016
  mock_check_output.return_value = b"1\n2\n3\n"
@@ -1396,7 +1398,7 @@ class TestServerTestCase(base.TestCase):
1396
1398
 
1397
1399
  netns_handle = mock_netns.return_value.__enter__.return_value
1398
1400
  netns_handle.get_links.return_value = [{
1399
- 'attrs': [['IFLA_IFNAME', consts.NETNS_PRIMARY_INTERFACE]]}]
1401
+ 'attrs': [['IFLA_IFNAME', 'eth2']]}]
1400
1402
 
1401
1403
  port_info = {'mac_address': MAC, 'mtu': 1450, 'fixed_ips': [
1402
1404
  {'ip_address': IP, 'subnet_cidr': SUBNET_CIDR,
@@ -1405,8 +1407,7 @@ class TestServerTestCase(base.TestCase):
1405
1407
 
1406
1408
  flags = os.O_WRONLY | os.O_CREAT | os.O_TRUNC
1407
1409
  mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
1408
- file_name = '/etc/octavia/interfaces/{}.json'.format(
1409
- consts.NETNS_PRIMARY_INTERFACE)
1410
+ file_name = '/etc/octavia/interfaces/eth3.json'
1410
1411
 
1411
1412
  m = self.useFixture(test_utils.OpenFixture(file_name)).mock_open
1412
1413
  with mock.patch('os.open') as mock_open, mock.patch.object(
@@ -1436,7 +1437,7 @@ class TestServerTestCase(base.TestCase):
1436
1437
  mock_fdopen.assert_any_call(123, 'r+')
1437
1438
 
1438
1439
  expected_dict = {
1439
- consts.NAME: consts.NETNS_PRIMARY_INTERFACE,
1440
+ consts.NAME: 'eth3',
1440
1441
  consts.MTU: 1450,
1441
1442
  consts.ADDRESSES: [
1442
1443
  {
@@ -1458,13 +1459,12 @@ class TestServerTestCase(base.TestCase):
1458
1459
  consts.SCRIPTS: {
1459
1460
  consts.IFACE_UP: [{
1460
1461
  consts.COMMAND: (
1461
- "/usr/local/bin/lvs-masquerade.sh add ipv4 "
1462
- "{}".format(consts.NETNS_PRIMARY_INTERFACE))
1462
+ "/usr/local/bin/lvs-masquerade.sh add ipv4 eth3")
1463
1463
  }],
1464
1464
  consts.IFACE_DOWN: [{
1465
1465
  consts.COMMAND: (
1466
1466
  "/usr/local/bin/lvs-masquerade.sh delete ipv4 "
1467
- "{}".format(consts.NETNS_PRIMARY_INTERFACE))
1467
+ "eth3")
1468
1468
  }]
1469
1469
  }
1470
1470
  }
@@ -1476,8 +1476,7 @@ class TestServerTestCase(base.TestCase):
1476
1476
 
1477
1477
  mock_check_output.assert_called_with(
1478
1478
  ['ip', 'netns', 'exec', consts.AMPHORA_NAMESPACE,
1479
- 'amphora-interface', 'up',
1480
- consts.NETNS_PRIMARY_INTERFACE], stderr=-2)
1479
+ 'amphora-interface', 'up', 'eth3'], stderr=-2)
1481
1480
 
1482
1481
  def test_ubuntu_plug_VIP4(self):
1483
1482
  self._test_plug_VIP4(consts.UBUNTU)