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.
- octavia/amphorae/backends/agent/api_server/osutils.py +1 -0
- octavia/amphorae/backends/agent/api_server/plug.py +21 -7
- octavia/amphorae/backends/agent/api_server/templates/amphora-netns.systemd.j2 +2 -2
- octavia/amphorae/backends/agent/api_server/util.py +21 -0
- octavia/amphorae/backends/health_daemon/health_daemon.py +9 -3
- octavia/amphorae/backends/health_daemon/health_sender.py +2 -0
- octavia/amphorae/backends/utils/interface.py +14 -6
- octavia/amphorae/backends/utils/interface_file.py +6 -3
- octavia/amphorae/backends/utils/keepalivedlvs_query.py +8 -9
- octavia/amphorae/drivers/driver_base.py +1 -2
- octavia/amphorae/drivers/haproxy/rest_api_driver.py +11 -25
- octavia/amphorae/drivers/health/heartbeat_udp.py +34 -24
- octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +3 -12
- octavia/amphorae/drivers/noop_driver/driver.py +3 -5
- octavia/api/common/pagination.py +4 -4
- octavia/api/drivers/amphora_driver/v2/driver.py +11 -5
- octavia/api/drivers/driver_agent/driver_get.py +22 -14
- octavia/api/drivers/driver_agent/driver_updater.py +8 -4
- octavia/api/drivers/utils.py +4 -2
- octavia/api/healthcheck/healthcheck_plugins.py +4 -2
- octavia/api/root_controller.py +4 -1
- octavia/api/v2/controllers/amphora.py +35 -38
- octavia/api/v2/controllers/availability_zone_profiles.py +43 -33
- octavia/api/v2/controllers/availability_zones.py +22 -18
- octavia/api/v2/controllers/flavor_profiles.py +37 -28
- octavia/api/v2/controllers/flavors.py +19 -15
- octavia/api/v2/controllers/health_monitor.py +44 -33
- octavia/api/v2/controllers/l7policy.py +52 -40
- octavia/api/v2/controllers/l7rule.py +68 -55
- octavia/api/v2/controllers/listener.py +88 -61
- octavia/api/v2/controllers/load_balancer.py +52 -34
- octavia/api/v2/controllers/member.py +63 -52
- octavia/api/v2/controllers/pool.py +55 -42
- octavia/api/v2/controllers/quotas.py +5 -3
- octavia/api/v2/types/listener.py +15 -0
- octavia/cmd/octavia_worker.py +0 -3
- octavia/cmd/status.py +1 -4
- octavia/common/clients.py +25 -45
- octavia/common/config.py +64 -22
- octavia/common/constants.py +3 -2
- octavia/common/data_models.py +7 -1
- octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +12 -1
- octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +5 -2
- octavia/common/jinja/lvs/jinja_cfg.py +4 -2
- octavia/common/keystone.py +58 -5
- octavia/common/validate.py +35 -0
- octavia/compute/drivers/noop_driver/driver.py +6 -0
- octavia/controller/healthmanager/health_manager.py +3 -6
- octavia/controller/housekeeping/house_keeping.py +36 -37
- octavia/controller/worker/amphora_rate_limit.py +5 -4
- octavia/controller/worker/task_utils.py +57 -41
- octavia/controller/worker/v2/controller_worker.py +160 -103
- octavia/controller/worker/v2/flows/listener_flows.py +3 -0
- octavia/controller/worker/v2/flows/load_balancer_flows.py +9 -14
- octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +152 -91
- octavia/controller/worker/v2/tasks/compute_tasks.py +4 -2
- octavia/controller/worker/v2/tasks/database_tasks.py +542 -400
- octavia/controller/worker/v2/tasks/network_tasks.py +119 -79
- octavia/db/api.py +26 -23
- octavia/db/base_models.py +2 -2
- octavia/db/healthcheck.py +2 -1
- octavia/db/migration/alembic_migrations/versions/632152d2d32e_add_http_strict_transport_security_.py +42 -0
- octavia/db/models.py +12 -2
- octavia/db/prepare.py +2 -0
- octavia/db/repositories.py +462 -482
- octavia/hacking/checks.py +1 -1
- octavia/network/base.py +0 -14
- octavia/network/drivers/neutron/allowed_address_pairs.py +92 -135
- octavia/network/drivers/neutron/base.py +65 -77
- octavia/network/drivers/neutron/utils.py +69 -85
- octavia/network/drivers/noop_driver/driver.py +0 -7
- octavia/statistics/drivers/update_db.py +10 -10
- octavia/tests/common/constants.py +91 -84
- octavia/tests/common/sample_data_models.py +13 -1
- octavia/tests/fixtures.py +32 -0
- octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +9 -10
- octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +260 -15
- octavia/tests/functional/api/test_root_controller.py +3 -28
- octavia/tests/functional/api/v2/base.py +5 -3
- octavia/tests/functional/api/v2/test_amphora.py +18 -5
- octavia/tests/functional/api/v2/test_availability_zone_profiles.py +1 -0
- octavia/tests/functional/api/v2/test_listener.py +51 -19
- octavia/tests/functional/api/v2/test_load_balancer.py +10 -1
- octavia/tests/functional/db/base.py +31 -16
- octavia/tests/functional/db/test_models.py +27 -28
- octavia/tests/functional/db/test_repositories.py +407 -50
- octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +2 -0
- octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +1 -1
- octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +54 -6
- octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +35 -0
- octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +8 -0
- octavia/tests/unit/amphorae/backends/health_daemon/test_health_sender.py +18 -0
- octavia/tests/unit/amphorae/backends/utils/test_interface.py +81 -0
- octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +2 -0
- octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +129 -5
- octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +42 -20
- octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +18 -20
- octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +4 -4
- octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +4 -1
- octavia/tests/unit/api/drivers/driver_agent/test_driver_get.py +3 -3
- octavia/tests/unit/api/drivers/driver_agent/test_driver_updater.py +11 -13
- octavia/tests/unit/base.py +6 -0
- octavia/tests/unit/cmd/test_interface.py +2 -2
- octavia/tests/unit/cmd/test_status.py +2 -2
- octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +152 -1
- octavia/tests/unit/common/sample_configs/sample_configs_combined.py +10 -3
- octavia/tests/unit/common/test_clients.py +0 -39
- octavia/tests/unit/common/test_keystone.py +54 -0
- octavia/tests/unit/common/test_validate.py +67 -0
- octavia/tests/unit/controller/healthmanager/test_health_manager.py +8 -22
- octavia/tests/unit/controller/housekeeping/test_house_keeping.py +3 -64
- octavia/tests/unit/controller/worker/test_amphora_rate_limit.py +1 -1
- octavia/tests/unit/controller/worker/test_task_utils.py +44 -24
- octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +0 -1
- octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +49 -26
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +399 -196
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +37 -64
- octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +3 -14
- octavia/tests/unit/controller/worker/v2/test_controller_worker.py +2 -2
- octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +456 -561
- octavia/tests/unit/network/drivers/neutron/test_base.py +181 -194
- octavia/tests/unit/network/drivers/neutron/test_utils.py +14 -30
- octavia/tests/unit/statistics/drivers/test_update_db.py +7 -5
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/README.rst +1 -1
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/AUTHORS +4 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/METADATA +4 -4
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/RECORD +141 -189
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/entry_points.txt +1 -2
- octavia-13.0.0.0rc1.dist-info/pbr.json +1 -0
- octavia/api/drivers/amphora_driver/v1/__init__.py +0 -11
- octavia/api/drivers/amphora_driver/v1/driver.py +0 -547
- octavia/controller/queue/v1/__init__.py +0 -11
- octavia/controller/queue/v1/consumer.py +0 -64
- octavia/controller/queue/v1/endpoints.py +0 -160
- octavia/controller/worker/v1/__init__.py +0 -11
- octavia/controller/worker/v1/controller_worker.py +0 -1157
- octavia/controller/worker/v1/flows/__init__.py +0 -11
- octavia/controller/worker/v1/flows/amphora_flows.py +0 -610
- octavia/controller/worker/v1/flows/health_monitor_flows.py +0 -105
- octavia/controller/worker/v1/flows/l7policy_flows.py +0 -94
- octavia/controller/worker/v1/flows/l7rule_flows.py +0 -100
- octavia/controller/worker/v1/flows/listener_flows.py +0 -128
- octavia/controller/worker/v1/flows/load_balancer_flows.py +0 -692
- octavia/controller/worker/v1/flows/member_flows.py +0 -230
- octavia/controller/worker/v1/flows/pool_flows.py +0 -127
- octavia/controller/worker/v1/tasks/__init__.py +0 -11
- octavia/controller/worker/v1/tasks/amphora_driver_tasks.py +0 -453
- octavia/controller/worker/v1/tasks/cert_task.py +0 -51
- octavia/controller/worker/v1/tasks/compute_tasks.py +0 -335
- octavia/controller/worker/v1/tasks/database_tasks.py +0 -2756
- octavia/controller/worker/v1/tasks/lifecycle_tasks.py +0 -173
- octavia/controller/worker/v1/tasks/model_tasks.py +0 -41
- octavia/controller/worker/v1/tasks/network_tasks.py +0 -970
- octavia/controller/worker/v1/tasks/retry_tasks.py +0 -74
- octavia/tests/unit/api/drivers/amphora_driver/v1/__init__.py +0 -11
- octavia/tests/unit/api/drivers/amphora_driver/v1/test_driver.py +0 -824
- octavia/tests/unit/controller/queue/v1/__init__.py +0 -11
- octavia/tests/unit/controller/queue/v1/test_consumer.py +0 -61
- octavia/tests/unit/controller/queue/v1/test_endpoints.py +0 -189
- octavia/tests/unit/controller/worker/v1/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/flows/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/flows/test_amphora_flows.py +0 -474
- octavia/tests/unit/controller/worker/v1/flows/test_health_monitor_flows.py +0 -72
- octavia/tests/unit/controller/worker/v1/flows/test_l7policy_flows.py +0 -67
- octavia/tests/unit/controller/worker/v1/flows/test_l7rule_flows.py +0 -67
- octavia/tests/unit/controller/worker/v1/flows/test_listener_flows.py +0 -91
- octavia/tests/unit/controller/worker/v1/flows/test_load_balancer_flows.py +0 -431
- octavia/tests/unit/controller/worker/v1/flows/test_member_flows.py +0 -106
- octavia/tests/unit/controller/worker/v1/flows/test_pool_flows.py +0 -77
- octavia/tests/unit/controller/worker/v1/tasks/__init__.py +0 -11
- octavia/tests/unit/controller/worker/v1/tasks/test_amphora_driver_tasks.py +0 -792
- octavia/tests/unit/controller/worker/v1/tasks/test_cert_task.py +0 -46
- octavia/tests/unit/controller/worker/v1/tasks/test_compute_tasks.py +0 -634
- octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks.py +0 -2615
- octavia/tests/unit/controller/worker/v1/tasks/test_database_tasks_quota.py +0 -415
- octavia/tests/unit/controller/worker/v1/tasks/test_lifecycle_tasks.py +0 -401
- octavia/tests/unit/controller/worker/v1/tasks/test_model_tasks.py +0 -44
- octavia/tests/unit/controller/worker/v1/tasks/test_network_tasks.py +0 -1788
- octavia/tests/unit/controller/worker/v1/tasks/test_retry_tasks.py +0 -47
- octavia/tests/unit/controller/worker/v1/test_controller_worker.py +0 -2096
- octavia-12.0.0.0rc2.dist-info/pbr.json +0 -1
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
- {octavia-12.0.0.0rc2.data → octavia-13.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/LICENSE +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/WHEEL +0 -0
- {octavia-12.0.0.0rc2.dist-info → octavia-13.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -80,20 +80,23 @@ class AmpListenersUpdate(BaseAmphoraTask):
|
|
80
80
|
# health manager fix it.
|
81
81
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
82
82
|
# DB lookups
|
83
|
-
db_amp = self.amphora_repo.get(db_apis.get_session(),
|
84
|
-
id=amphora[constants.ID])
|
85
83
|
try:
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
session = db_apis.get_session()
|
85
|
+
with session.begin():
|
86
|
+
db_amp = self.amphora_repo.get(session,
|
87
|
+
id=amphora[constants.ID])
|
88
|
+
db_lb = self.loadbalancer_repo.get(
|
89
|
+
session,
|
90
|
+
id=loadbalancer[constants.LOADBALANCER_ID])
|
89
91
|
self.amphora_driver.update_amphora_listeners(
|
90
92
|
db_lb, db_amp, timeout_dict)
|
91
93
|
except Exception as e:
|
92
94
|
LOG.error('Failed to update listeners on amphora %s. Skipping '
|
93
95
|
'this amphora as it is failing to update due to: %s',
|
94
96
|
db_amp.id, str(e))
|
95
|
-
|
96
|
-
|
97
|
+
with session.begin():
|
98
|
+
self.amphora_repo.update(session, db_amp.id,
|
99
|
+
status=constants.ERROR)
|
97
100
|
|
98
101
|
|
99
102
|
class AmphoraIndexListenerUpdate(BaseAmphoraTask):
|
@@ -106,12 +109,14 @@ class AmphoraIndexListenerUpdate(BaseAmphoraTask):
|
|
106
109
|
try:
|
107
110
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
108
111
|
# DB lookups
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
112
|
+
session = db_apis.get_session()
|
113
|
+
with session.begin():
|
114
|
+
db_amp = self.amphora_repo.get(
|
115
|
+
session,
|
116
|
+
id=amphorae[amphora_index][constants.ID])
|
117
|
+
db_lb = self.loadbalancer_repo.get(
|
118
|
+
session,
|
119
|
+
id=loadbalancer[constants.LOADBALANCER_ID])
|
115
120
|
self.amphora_driver.update_amphora_listeners(
|
116
121
|
db_lb, db_amp, timeout_dict)
|
117
122
|
except Exception as e:
|
@@ -119,8 +124,10 @@ class AmphoraIndexListenerUpdate(BaseAmphoraTask):
|
|
119
124
|
LOG.error('Failed to update listeners on amphora %s. Skipping '
|
120
125
|
'this amphora as it is failing to update due to: %s',
|
121
126
|
amphora_id, str(e))
|
122
|
-
|
123
|
-
|
127
|
+
session = db_apis.get_session()
|
128
|
+
with session.begin():
|
129
|
+
self.amphora_repo.update(session, amphora_id,
|
130
|
+
status=constants.ERROR)
|
124
131
|
|
125
132
|
|
126
133
|
class ListenersUpdate(BaseAmphoraTask):
|
@@ -128,8 +135,10 @@ class ListenersUpdate(BaseAmphoraTask):
|
|
128
135
|
|
129
136
|
def execute(self, loadbalancer_id):
|
130
137
|
"""Execute updates per listener for an amphora."""
|
131
|
-
|
132
|
-
|
138
|
+
session = db_apis.get_session()
|
139
|
+
with session.begin():
|
140
|
+
loadbalancer = self.loadbalancer_repo.get(session,
|
141
|
+
id=loadbalancer_id)
|
133
142
|
if loadbalancer:
|
134
143
|
self.amphora_driver.update(loadbalancer)
|
135
144
|
else:
|
@@ -140,8 +149,10 @@ class ListenersUpdate(BaseAmphoraTask):
|
|
140
149
|
"""Handle failed listeners updates."""
|
141
150
|
|
142
151
|
LOG.warning("Reverting listeners updates.")
|
143
|
-
|
144
|
-
|
152
|
+
session = db_apis.get_session()
|
153
|
+
with session.begin():
|
154
|
+
loadbalancer = self.loadbalancer_repo.get(session,
|
155
|
+
id=loadbalancer_id)
|
145
156
|
for listener in loadbalancer.listeners:
|
146
157
|
self.task_utils.mark_listener_prov_status_error(
|
147
158
|
listener.id)
|
@@ -152,12 +163,15 @@ class ListenersStart(BaseAmphoraTask):
|
|
152
163
|
|
153
164
|
def execute(self, loadbalancer, amphora=None):
|
154
165
|
"""Execute listener start routines for listeners on an amphora."""
|
155
|
-
|
156
|
-
|
166
|
+
session = db_apis.get_session()
|
167
|
+
with session.begin():
|
168
|
+
db_lb = self.loadbalancer_repo.get(
|
169
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
157
170
|
if db_lb.listeners:
|
158
171
|
if amphora is not None:
|
159
|
-
|
160
|
-
|
172
|
+
with session.begin():
|
173
|
+
db_amp = self.amphora_repo.get(session,
|
174
|
+
id=amphora[constants.ID])
|
161
175
|
else:
|
162
176
|
db_amp = amphora
|
163
177
|
self.amphora_driver.start(db_lb, db_amp)
|
@@ -167,8 +181,10 @@ class ListenersStart(BaseAmphoraTask):
|
|
167
181
|
"""Handle failed listeners starts."""
|
168
182
|
|
169
183
|
LOG.warning("Reverting listeners starts.")
|
170
|
-
|
171
|
-
|
184
|
+
session = db_apis.get_session()
|
185
|
+
with session.begin():
|
186
|
+
db_lb = self.loadbalancer_repo.get(
|
187
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
172
188
|
for listener in db_lb.listeners:
|
173
189
|
self.task_utils.mark_listener_prov_status_error(listener.id)
|
174
190
|
|
@@ -183,11 +199,13 @@ class AmphoraIndexListenersReload(BaseAmphoraTask):
|
|
183
199
|
return
|
184
200
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
185
201
|
# DB lookups
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
202
|
+
session = db_apis.get_session()
|
203
|
+
with session.begin():
|
204
|
+
db_amp = self.amphora_repo.get(
|
205
|
+
session, id=amphorae[amphora_index][constants.ID])
|
206
|
+
db_lb = self.loadbalancer_repo.get(
|
207
|
+
session,
|
208
|
+
id=loadbalancer[constants.LOADBALANCER_ID])
|
191
209
|
if db_lb.listeners:
|
192
210
|
try:
|
193
211
|
self.amphora_driver.reload(db_lb, db_amp, timeout_dict)
|
@@ -196,8 +214,9 @@ class AmphoraIndexListenersReload(BaseAmphoraTask):
|
|
196
214
|
LOG.warning('Failed to reload listeners on amphora %s. '
|
197
215
|
'Skipping this amphora as it is failing to '
|
198
216
|
'reload due to: %s', amphora_id, str(e))
|
199
|
-
|
200
|
-
|
217
|
+
with session.begin():
|
218
|
+
self.amphora_repo.update(session, amphora_id,
|
219
|
+
status=constants.ERROR)
|
201
220
|
|
202
221
|
|
203
222
|
class ListenerDelete(BaseAmphoraTask):
|
@@ -205,8 +224,10 @@ class ListenerDelete(BaseAmphoraTask):
|
|
205
224
|
|
206
225
|
def execute(self, listener):
|
207
226
|
"""Execute listener delete routines for an amphora."""
|
208
|
-
|
209
|
-
|
227
|
+
session = db_apis.get_session()
|
228
|
+
with session.begin():
|
229
|
+
db_listener = self.listener_repo.get(
|
230
|
+
session, id=listener[constants.LISTENER_ID])
|
210
231
|
self.amphora_driver.delete(db_listener)
|
211
232
|
LOG.debug("Deleted the listener on the vip")
|
212
233
|
|
@@ -224,8 +245,10 @@ class AmphoraGetInfo(BaseAmphoraTask):
|
|
224
245
|
|
225
246
|
def execute(self, amphora):
|
226
247
|
"""Execute get_info routine for an amphora."""
|
227
|
-
|
228
|
-
|
248
|
+
session = db_apis.get_session()
|
249
|
+
with session.begin():
|
250
|
+
db_amp = self.amphora_repo.get(session,
|
251
|
+
id=amphora[constants.ID])
|
229
252
|
self.amphora_driver.get_info(db_amp)
|
230
253
|
|
231
254
|
|
@@ -242,8 +265,10 @@ class AmphoraFinalize(BaseAmphoraTask):
|
|
242
265
|
|
243
266
|
def execute(self, amphora):
|
244
267
|
"""Execute finalize_amphora routine."""
|
245
|
-
|
246
|
-
|
268
|
+
session = db_apis.get_session()
|
269
|
+
with session.begin():
|
270
|
+
db_amp = self.amphora_repo.get(session,
|
271
|
+
id=amphora.get(constants.ID))
|
247
272
|
self.amphora_driver.finalize_amphora(db_amp)
|
248
273
|
LOG.debug("Finalized the amphora.")
|
249
274
|
|
@@ -261,8 +286,10 @@ class AmphoraPostNetworkPlug(BaseAmphoraTask):
|
|
261
286
|
|
262
287
|
def execute(self, amphora, ports, amphora_network_config):
|
263
288
|
"""Execute post_network_plug routine."""
|
264
|
-
|
265
|
-
|
289
|
+
session = db_apis.get_session()
|
290
|
+
with session.begin():
|
291
|
+
db_amp = self.amphora_repo.get(session,
|
292
|
+
id=amphora[constants.ID])
|
266
293
|
|
267
294
|
for port in ports:
|
268
295
|
net = data_models.Network(**port.pop(constants.NETWORK))
|
@@ -302,8 +329,10 @@ class AmphoraePostNetworkPlug(BaseAmphoraTask):
|
|
302
329
|
def execute(self, loadbalancer, updated_ports, amphorae_network_config):
|
303
330
|
"""Execute post_network_plug routine."""
|
304
331
|
amp_post_plug = AmphoraPostNetworkPlug()
|
305
|
-
|
306
|
-
|
332
|
+
session = db_apis.get_session()
|
333
|
+
with session.begin():
|
334
|
+
db_lb = self.loadbalancer_repo.get(
|
335
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
307
336
|
for amphora in db_lb.amphorae:
|
308
337
|
if amphora.id in updated_ports:
|
309
338
|
amp_post_plug.execute(amphora.to_dict(),
|
@@ -314,8 +343,10 @@ class AmphoraePostNetworkPlug(BaseAmphoraTask):
|
|
314
343
|
"""Handle a failed post network plug."""
|
315
344
|
if isinstance(result, failure.Failure):
|
316
345
|
return
|
317
|
-
|
318
|
-
|
346
|
+
session = db_apis.get_session()
|
347
|
+
with session.begin():
|
348
|
+
db_lb = self.loadbalancer_repo.get(
|
349
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
319
350
|
LOG.warning("Reverting post network plug.")
|
320
351
|
for amphora in filter(
|
321
352
|
lambda amp: amp.status == constants.AMPHORA_ALLOCATED,
|
@@ -329,10 +360,12 @@ class AmphoraPostVIPPlug(BaseAmphoraTask):
|
|
329
360
|
|
330
361
|
def execute(self, amphora, loadbalancer, amphorae_network_config):
|
331
362
|
"""Execute post_vip_routine."""
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
363
|
+
session = db_apis.get_session()
|
364
|
+
with session.begin():
|
365
|
+
db_amp = self.amphora_repo.get(session,
|
366
|
+
id=amphora.get(constants.ID))
|
367
|
+
db_lb = self.loadbalancer_repo.get(
|
368
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
336
369
|
vrrp_port = data_models.Port(
|
337
370
|
**amphorae_network_config[
|
338
371
|
amphora.get(constants.ID)][constants.VRRP_PORT])
|
@@ -367,8 +400,8 @@ class AmphoraPostVIPPlug(BaseAmphoraTask):
|
|
367
400
|
subnet=subnet))
|
368
401
|
|
369
402
|
self.amphora_driver.post_vip_plug(
|
370
|
-
db_amp, db_lb, amphorae_network_config, vrrp_port
|
371
|
-
vip_subnet
|
403
|
+
db_amp, db_lb, amphorae_network_config, vrrp_port,
|
404
|
+
vip_subnet, additional_vip_data=additional_vip_data)
|
372
405
|
LOG.debug("Notified amphora of vip plug")
|
373
406
|
|
374
407
|
def revert(self, result, amphora, loadbalancer, *args, **kwargs):
|
@@ -385,8 +418,10 @@ class AmphoraePostVIPPlug(BaseAmphoraTask):
|
|
385
418
|
def execute(self, loadbalancer, amphorae_network_config):
|
386
419
|
"""Execute post_vip_plug across the amphorae."""
|
387
420
|
amp_post_vip_plug = AmphoraPostVIPPlug()
|
388
|
-
|
389
|
-
|
421
|
+
session = db_apis.get_session()
|
422
|
+
with session.begin():
|
423
|
+
db_lb = self.loadbalancer_repo.get(
|
424
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
390
425
|
for amphora in db_lb.amphorae:
|
391
426
|
amp_post_vip_plug.execute(amphora.to_dict(),
|
392
427
|
loadbalancer,
|
@@ -401,8 +436,10 @@ class AmphoraCertUpload(BaseAmphoraTask):
|
|
401
436
|
LOG.debug("Upload cert in amphora REST driver")
|
402
437
|
key = utils.get_compatible_server_certs_key_passphrase()
|
403
438
|
fer = fernet.Fernet(key)
|
404
|
-
|
405
|
-
|
439
|
+
session = db_apis.get_session()
|
440
|
+
with session.begin():
|
441
|
+
db_amp = self.amphora_repo.get(session,
|
442
|
+
id=amphora.get(constants.ID))
|
406
443
|
self.amphora_driver.upload_cert_amp(
|
407
444
|
db_amp, fer.decrypt(server_pem.encode('utf-8')))
|
408
445
|
|
@@ -415,8 +452,10 @@ class AmphoraUpdateVRRPInterface(BaseAmphoraTask):
|
|
415
452
|
try:
|
416
453
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
417
454
|
# DB lookups
|
418
|
-
|
419
|
-
|
455
|
+
session = db_apis.get_session()
|
456
|
+
with session.begin():
|
457
|
+
db_amp = self.amphora_repo.get(session,
|
458
|
+
id=amphora[constants.ID])
|
420
459
|
interface = self.amphora_driver.get_interface_from_ip(
|
421
460
|
db_amp, db_amp.vrrp_ip, timeout_dict=timeout_dict)
|
422
461
|
except Exception as e:
|
@@ -424,13 +463,15 @@ class AmphoraUpdateVRRPInterface(BaseAmphoraTask):
|
|
424
463
|
LOG.error('Failed to get amphora VRRP interface on amphora '
|
425
464
|
'%s. Skipping this amphora as it is failing due to: '
|
426
465
|
'%s', amphora.get(constants.ID), str(e))
|
427
|
-
|
428
|
-
|
429
|
-
|
466
|
+
with session.begin():
|
467
|
+
self.amphora_repo.update(session,
|
468
|
+
amphora.get(constants.ID),
|
469
|
+
status=constants.ERROR)
|
430
470
|
return None
|
431
471
|
|
432
|
-
|
433
|
-
|
472
|
+
with session.begin():
|
473
|
+
self.amphora_repo.update(session, amphora[constants.ID],
|
474
|
+
vrrp_interface=interface)
|
434
475
|
return interface
|
435
476
|
|
436
477
|
|
@@ -442,8 +483,10 @@ class AmphoraIndexUpdateVRRPInterface(BaseAmphoraTask):
|
|
442
483
|
try:
|
443
484
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
444
485
|
# DB lookups
|
445
|
-
|
446
|
-
|
486
|
+
session = db_apis.get_session()
|
487
|
+
with session.begin():
|
488
|
+
db_amp = self.amphora_repo.get(session,
|
489
|
+
id=amphora_id)
|
447
490
|
interface = self.amphora_driver.get_interface_from_ip(
|
448
491
|
db_amp, db_amp.vrrp_ip, timeout_dict=timeout_dict)
|
449
492
|
except Exception as e:
|
@@ -451,12 +494,14 @@ class AmphoraIndexUpdateVRRPInterface(BaseAmphoraTask):
|
|
451
494
|
LOG.error('Failed to get amphora VRRP interface on amphora '
|
452
495
|
'%s. Skipping this amphora as it is failing due to: '
|
453
496
|
'%s', amphora_id, str(e))
|
454
|
-
|
455
|
-
|
497
|
+
with session.begin():
|
498
|
+
self.amphora_repo.update(session, amphora_id,
|
499
|
+
status=constants.ERROR)
|
456
500
|
return None
|
457
501
|
|
458
|
-
|
459
|
-
|
502
|
+
with session.begin():
|
503
|
+
self.amphora_repo.update(session, amphora_id,
|
504
|
+
vrrp_interface=interface)
|
460
505
|
return interface
|
461
506
|
|
462
507
|
|
@@ -473,10 +518,12 @@ class AmphoraVRRPUpdate(BaseAmphoraTask):
|
|
473
518
|
try:
|
474
519
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
475
520
|
# DB lookups
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
521
|
+
session = db_apis.get_session()
|
522
|
+
with session.begin():
|
523
|
+
db_amp = self.amphora_repo.get(session,
|
524
|
+
id=amphora_id)
|
525
|
+
loadbalancer = self.loadbalancer_repo.get(session,
|
526
|
+
id=loadbalancer_id)
|
480
527
|
db_amp.vrrp_interface = amp_vrrp_int
|
481
528
|
self.amphora_driver.update_vrrp_conf(
|
482
529
|
loadbalancer, amphorae_network_config, db_amp, timeout_dict)
|
@@ -484,8 +531,9 @@ class AmphoraVRRPUpdate(BaseAmphoraTask):
|
|
484
531
|
LOG.error('Failed to update VRRP configuration amphora %s. '
|
485
532
|
'Skipping this amphora as it is failing to update due '
|
486
533
|
'to: %s', amphora_id, str(e))
|
487
|
-
|
488
|
-
|
534
|
+
with session.begin():
|
535
|
+
self.amphora_repo.update(session, amphora_id,
|
536
|
+
status=constants.ERROR)
|
489
537
|
|
490
538
|
LOG.debug("Uploaded VRRP configuration of amphora %s.", amphora_id)
|
491
539
|
|
@@ -503,10 +551,12 @@ class AmphoraIndexVRRPUpdate(BaseAmphoraTask):
|
|
503
551
|
try:
|
504
552
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
505
553
|
# DB lookups
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
554
|
+
session = db_apis.get_session()
|
555
|
+
with session.begin():
|
556
|
+
db_amp = self.amphora_repo.get(session,
|
557
|
+
id=amphora_id)
|
558
|
+
loadbalancer = self.loadbalancer_repo.get(session,
|
559
|
+
id=loadbalancer_id)
|
510
560
|
db_amp.vrrp_interface = amp_vrrp_int
|
511
561
|
self.amphora_driver.update_vrrp_conf(
|
512
562
|
loadbalancer, amphorae_network_config, db_amp, timeout_dict)
|
@@ -514,8 +564,9 @@ class AmphoraIndexVRRPUpdate(BaseAmphoraTask):
|
|
514
564
|
LOG.error('Failed to update VRRP configuration amphora %s. '
|
515
565
|
'Skipping this amphora as it is failing to update due '
|
516
566
|
'to: %s', amphora_id, str(e))
|
517
|
-
|
518
|
-
|
567
|
+
with session.begin():
|
568
|
+
self.amphora_repo.update(session, amphora_id,
|
569
|
+
status=constants.ERROR)
|
519
570
|
return
|
520
571
|
LOG.debug("Uploaded VRRP configuration of amphora %s.", amphora_id)
|
521
572
|
|
@@ -529,8 +580,10 @@ class AmphoraVRRPStart(BaseAmphoraTask):
|
|
529
580
|
def execute(self, amphora, timeout_dict=None):
|
530
581
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
531
582
|
# DB lookups
|
532
|
-
|
533
|
-
|
583
|
+
session = db_apis.get_session()
|
584
|
+
with session.begin():
|
585
|
+
db_amp = self.amphora_repo.get(
|
586
|
+
session, id=amphora[constants.ID])
|
534
587
|
self.amphora_driver.start_vrrp_service(db_amp, timeout_dict)
|
535
588
|
LOG.debug("Started VRRP on amphora %s.", amphora[constants.ID])
|
536
589
|
|
@@ -545,15 +598,18 @@ class AmphoraIndexVRRPStart(BaseAmphoraTask):
|
|
545
598
|
# TODO(johnsom) Optimize this to use the dicts and not need the
|
546
599
|
# DB lookups
|
547
600
|
amphora_id = amphorae[amphora_index][constants.ID]
|
548
|
-
|
601
|
+
session = db_apis.get_session()
|
602
|
+
with session.begin():
|
603
|
+
db_amp = self.amphora_repo.get(session, id=amphora_id)
|
549
604
|
try:
|
550
605
|
self.amphora_driver.start_vrrp_service(db_amp, timeout_dict)
|
551
606
|
except Exception as e:
|
552
607
|
LOG.error('Failed to start VRRP on amphora %s. '
|
553
608
|
'Skipping this amphora as it is failing to start due '
|
554
609
|
'to: %s', amphora_id, str(e))
|
555
|
-
|
556
|
-
|
610
|
+
with session.begin():
|
611
|
+
self.amphora_repo.update(session, amphora_id,
|
612
|
+
status=constants.ERROR)
|
557
613
|
return
|
558
614
|
LOG.debug("Started VRRP on amphora %s.",
|
559
615
|
amphorae[amphora_index][constants.ID])
|
@@ -565,8 +621,10 @@ class AmphoraComputeConnectivityWait(BaseAmphoraTask):
|
|
565
621
|
def execute(self, amphora, raise_retry_exception=False):
|
566
622
|
"""Execute get_info routine for an amphora until it responds."""
|
567
623
|
try:
|
568
|
-
|
569
|
-
|
624
|
+
session = db_apis.get_session()
|
625
|
+
with session.begin():
|
626
|
+
db_amphora = self.amphora_repo.get(
|
627
|
+
session, id=amphora.get(constants.ID))
|
570
628
|
amp_info = self.amphora_driver.get_info(
|
571
629
|
db_amphora, raise_retry_exception=raise_retry_exception)
|
572
630
|
LOG.debug('Successfuly connected to amphora %s: %s',
|
@@ -576,9 +634,10 @@ class AmphoraComputeConnectivityWait(BaseAmphoraTask):
|
|
576
634
|
"This either means the compute driver failed to fully "
|
577
635
|
"boot the instance inside the timeout interval or the "
|
578
636
|
"instance is not reachable via the lb-mgmt-net.")
|
579
|
-
|
580
|
-
|
581
|
-
|
637
|
+
with session.begin():
|
638
|
+
self.amphora_repo.update(session,
|
639
|
+
amphora.get(constants.ID),
|
640
|
+
status=constants.ERROR)
|
582
641
|
raise
|
583
642
|
|
584
643
|
|
@@ -597,8 +656,10 @@ class AmphoraConfigUpdate(BaseAmphoraTask):
|
|
597
656
|
agent_cfg_tmpl = agent_jinja_cfg.AgentJinjaTemplater()
|
598
657
|
agent_config = agent_cfg_tmpl.build_agent_config(
|
599
658
|
amphora.get(constants.ID), topology)
|
600
|
-
|
601
|
-
|
659
|
+
session = db_apis.get_session()
|
660
|
+
with session.begin():
|
661
|
+
db_amp = self.amphora_repo.get(session,
|
662
|
+
id=amphora[constants.ID])
|
602
663
|
# Push the new configuration to the amphora
|
603
664
|
try:
|
604
665
|
self.amphora_driver.update_amphora_agent_config(db_amp,
|
@@ -210,8 +210,10 @@ class DeleteAmphoraeOnLoadBalancer(BaseComputeTask):
|
|
210
210
|
"""
|
211
211
|
|
212
212
|
def execute(self, loadbalancer):
|
213
|
-
|
214
|
-
|
213
|
+
session = db_apis.get_session()
|
214
|
+
with session.begin():
|
215
|
+
db_lb = self.loadbalancer_repo.get(
|
216
|
+
session, id=loadbalancer[constants.LOADBALANCER_ID])
|
215
217
|
for amp in db_lb.amphorae:
|
216
218
|
# The compute driver will already handle NotFound
|
217
219
|
try:
|