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
@@ -1,335 +0,0 @@
|
|
1
|
-
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
4
|
-
# not use this file except in compliance with the License. You may obtain
|
5
|
-
# a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
11
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
|
-
# License for the specific language governing permissions and limitations
|
13
|
-
# under the License.
|
14
|
-
#
|
15
|
-
|
16
|
-
import time
|
17
|
-
|
18
|
-
from cryptography import fernet
|
19
|
-
from oslo_config import cfg
|
20
|
-
from oslo_log import log as logging
|
21
|
-
from stevedore import driver as stevedore_driver
|
22
|
-
from taskflow import task
|
23
|
-
from taskflow.types import failure
|
24
|
-
import tenacity
|
25
|
-
|
26
|
-
from octavia.amphorae.backends.agent import agent_jinja_cfg
|
27
|
-
from octavia.common import constants
|
28
|
-
from octavia.common import exceptions
|
29
|
-
from octavia.common.jinja.logging import logging_jinja_cfg
|
30
|
-
from octavia.common.jinja import user_data_jinja_cfg
|
31
|
-
from octavia.common import utils
|
32
|
-
from octavia.controller.worker import amphora_rate_limit
|
33
|
-
|
34
|
-
CONF = cfg.CONF
|
35
|
-
LOG = logging.getLogger(__name__)
|
36
|
-
|
37
|
-
|
38
|
-
class BaseComputeTask(task.Task):
|
39
|
-
"""Base task to load drivers common to the tasks."""
|
40
|
-
|
41
|
-
def __init__(self, **kwargs):
|
42
|
-
super().__init__(**kwargs)
|
43
|
-
self.compute = stevedore_driver.DriverManager(
|
44
|
-
namespace='octavia.compute.drivers',
|
45
|
-
name=CONF.controller_worker.compute_driver,
|
46
|
-
invoke_on_load=True
|
47
|
-
).driver
|
48
|
-
self.rate_limit = amphora_rate_limit.AmphoraBuildRateLimit()
|
49
|
-
|
50
|
-
|
51
|
-
class ComputeCreate(BaseComputeTask):
|
52
|
-
"""Create the compute instance for a new amphora."""
|
53
|
-
|
54
|
-
def execute(self, amphora_id, server_group_id, config_drive_files=None,
|
55
|
-
build_type_priority=constants.LB_CREATE_NORMAL_PRIORITY,
|
56
|
-
ports=None, flavor=None, availability_zone=None):
|
57
|
-
"""Create an amphora
|
58
|
-
|
59
|
-
:returns: an amphora
|
60
|
-
"""
|
61
|
-
ports = ports or []
|
62
|
-
network_ids = CONF.controller_worker.amp_boot_network_list[:]
|
63
|
-
config_drive_files = config_drive_files or {}
|
64
|
-
user_data = None
|
65
|
-
LOG.debug("Compute create execute for amphora with id %s", amphora_id)
|
66
|
-
|
67
|
-
user_data_config_drive = CONF.controller_worker.user_data_config_drive
|
68
|
-
key_name = CONF.controller_worker.amp_ssh_key_name
|
69
|
-
|
70
|
-
# Apply an Octavia flavor customizations
|
71
|
-
if flavor:
|
72
|
-
topology = flavor.get(constants.LOADBALANCER_TOPOLOGY,
|
73
|
-
CONF.controller_worker.loadbalancer_topology)
|
74
|
-
amp_compute_flavor = flavor.get(
|
75
|
-
constants.COMPUTE_FLAVOR, CONF.controller_worker.amp_flavor_id)
|
76
|
-
amp_image_tag = flavor.get(
|
77
|
-
constants.AMP_IMAGE_TAG, CONF.controller_worker.amp_image_tag)
|
78
|
-
else:
|
79
|
-
topology = CONF.controller_worker.loadbalancer_topology
|
80
|
-
amp_compute_flavor = CONF.controller_worker.amp_flavor_id
|
81
|
-
amp_image_tag = CONF.controller_worker.amp_image_tag
|
82
|
-
|
83
|
-
if availability_zone:
|
84
|
-
amp_availability_zone = availability_zone.get(
|
85
|
-
constants.COMPUTE_ZONE)
|
86
|
-
amp_network = availability_zone.get(constants.MANAGEMENT_NETWORK)
|
87
|
-
if amp_network:
|
88
|
-
network_ids = [amp_network]
|
89
|
-
else:
|
90
|
-
amp_availability_zone = None
|
91
|
-
try:
|
92
|
-
if CONF.haproxy_amphora.build_rate_limit != -1:
|
93
|
-
self.rate_limit.add_to_build_request_queue(
|
94
|
-
amphora_id, build_type_priority)
|
95
|
-
|
96
|
-
agent_cfg = agent_jinja_cfg.AgentJinjaTemplater()
|
97
|
-
config_drive_files['/etc/octavia/amphora-agent.conf'] = (
|
98
|
-
agent_cfg.build_agent_config(amphora_id, topology))
|
99
|
-
|
100
|
-
logging_cfg = logging_jinja_cfg.LoggingJinjaTemplater(
|
101
|
-
CONF.amphora_agent.logging_template_override)
|
102
|
-
config_drive_files['/etc/rsyslog.d/10-rsyslog.conf'] = (
|
103
|
-
logging_cfg.build_logging_config())
|
104
|
-
|
105
|
-
udtemplater = user_data_jinja_cfg.UserDataJinjaCfg()
|
106
|
-
user_data = udtemplater.build_user_data_config(
|
107
|
-
config_drive_files if user_data_config_drive else {})
|
108
|
-
if user_data_config_drive:
|
109
|
-
config_drive_files = None
|
110
|
-
|
111
|
-
compute_id = self.compute.build(
|
112
|
-
name="amphora-" + amphora_id,
|
113
|
-
amphora_flavor=amp_compute_flavor,
|
114
|
-
image_tag=amp_image_tag,
|
115
|
-
image_owner=CONF.controller_worker.amp_image_owner_id,
|
116
|
-
key_name=key_name,
|
117
|
-
sec_groups=CONF.controller_worker.amp_secgroup_list,
|
118
|
-
network_ids=network_ids,
|
119
|
-
port_ids=[port.id for port in ports],
|
120
|
-
config_drive_files=config_drive_files,
|
121
|
-
user_data=user_data,
|
122
|
-
server_group_id=server_group_id,
|
123
|
-
availability_zone=amp_availability_zone)
|
124
|
-
|
125
|
-
LOG.info("Server created with id: %s for amphora id: %s",
|
126
|
-
compute_id, amphora_id)
|
127
|
-
return compute_id
|
128
|
-
|
129
|
-
except Exception:
|
130
|
-
LOG.exception("Compute create for amphora id: %s failed",
|
131
|
-
amphora_id)
|
132
|
-
raise
|
133
|
-
|
134
|
-
def revert(self, result, amphora_id, *args, **kwargs):
|
135
|
-
"""This method will revert the creation of the
|
136
|
-
|
137
|
-
amphora. So it will just delete it in this flow
|
138
|
-
"""
|
139
|
-
if isinstance(result, failure.Failure):
|
140
|
-
return
|
141
|
-
compute_id = result
|
142
|
-
LOG.warning("Reverting compute create for amphora with id "
|
143
|
-
"%(amp)s and compute id: %(comp)s",
|
144
|
-
{'amp': amphora_id, 'comp': compute_id})
|
145
|
-
try:
|
146
|
-
self.compute.delete(compute_id)
|
147
|
-
except Exception:
|
148
|
-
LOG.exception("Reverting compute create failed")
|
149
|
-
|
150
|
-
|
151
|
-
class CertComputeCreate(ComputeCreate):
|
152
|
-
def execute(self, amphora_id, server_pem, server_group_id,
|
153
|
-
build_type_priority=constants.LB_CREATE_NORMAL_PRIORITY,
|
154
|
-
ports=None, flavor=None, availability_zone=None):
|
155
|
-
"""Create an amphora
|
156
|
-
|
157
|
-
:returns: an amphora
|
158
|
-
"""
|
159
|
-
|
160
|
-
# load client certificate
|
161
|
-
with open(CONF.controller_worker.client_ca,
|
162
|
-
'r', encoding='utf-8') as client_ca:
|
163
|
-
ca = client_ca.read()
|
164
|
-
|
165
|
-
key = utils.get_compatible_server_certs_key_passphrase()
|
166
|
-
fer = fernet.Fernet(key)
|
167
|
-
config_drive_files = {
|
168
|
-
'/etc/octavia/certs/server.pem': fer.decrypt(
|
169
|
-
server_pem).decode('utf-8'),
|
170
|
-
'/etc/octavia/certs/client_ca.pem': ca}
|
171
|
-
return super().execute(
|
172
|
-
amphora_id, config_drive_files=config_drive_files,
|
173
|
-
build_type_priority=build_type_priority,
|
174
|
-
server_group_id=server_group_id, ports=ports, flavor=flavor,
|
175
|
-
availability_zone=availability_zone)
|
176
|
-
|
177
|
-
|
178
|
-
class DeleteAmphoraeOnLoadBalancer(BaseComputeTask):
|
179
|
-
"""Delete the amphorae on a load balancer.
|
180
|
-
|
181
|
-
Iterate through amphorae, deleting them
|
182
|
-
"""
|
183
|
-
|
184
|
-
def execute(self, loadbalancer):
|
185
|
-
for amp in loadbalancer.amphorae:
|
186
|
-
# The compute driver will already handle NotFound
|
187
|
-
try:
|
188
|
-
self.compute.delete(amp.compute_id)
|
189
|
-
except Exception:
|
190
|
-
LOG.exception("Compute delete for amphora id: %s failed",
|
191
|
-
amp.id)
|
192
|
-
raise
|
193
|
-
|
194
|
-
|
195
|
-
class ComputeDelete(BaseComputeTask):
|
196
|
-
|
197
|
-
@tenacity.retry(retry=tenacity.retry_if_exception_type(),
|
198
|
-
stop=tenacity.stop_after_attempt(CONF.compute.max_retries),
|
199
|
-
wait=tenacity.wait_exponential(
|
200
|
-
multiplier=CONF.compute.retry_backoff,
|
201
|
-
min=CONF.compute.retry_interval,
|
202
|
-
max=CONF.compute.retry_max), reraise=True)
|
203
|
-
def execute(self, amphora, passive_failure=False):
|
204
|
-
if self.execute.retry.statistics.get(constants.ATTEMPT_NUMBER, 1) == 1:
|
205
|
-
LOG.debug('Compute delete execute for amphora with ID %s and '
|
206
|
-
'compute ID: %s', amphora.id, amphora.compute_id)
|
207
|
-
else:
|
208
|
-
LOG.warning('Retrying compute delete of %s attempt %s of %s.',
|
209
|
-
amphora.compute_id,
|
210
|
-
self.execute.retry.statistics[
|
211
|
-
constants.ATTEMPT_NUMBER],
|
212
|
-
self.execute.retry.stop.max_attempt_number)
|
213
|
-
# Let the Taskflow engine know we are working and alive
|
214
|
-
# Don't use get with a default for 'attempt_number', we need to fail
|
215
|
-
# if that number is missing.
|
216
|
-
self.update_progress(
|
217
|
-
self.execute.retry.statistics[constants.ATTEMPT_NUMBER] /
|
218
|
-
self.execute.retry.stop.max_attempt_number)
|
219
|
-
|
220
|
-
try:
|
221
|
-
self.compute.delete(amphora.compute_id)
|
222
|
-
except Exception:
|
223
|
-
if (self.execute.retry.statistics[constants.ATTEMPT_NUMBER] !=
|
224
|
-
self.execute.retry.stop.max_attempt_number):
|
225
|
-
LOG.warning('Compute delete for amphora id: %s failed. '
|
226
|
-
'Retrying.', amphora.id)
|
227
|
-
raise
|
228
|
-
if passive_failure:
|
229
|
-
LOG.exception('Compute delete for compute ID: %s on amphora '
|
230
|
-
'ID: %s failed. This resource will be abandoned '
|
231
|
-
'and should manually be cleaned up once the '
|
232
|
-
'compute service is functional.',
|
233
|
-
amphora.compute_id, amphora.id)
|
234
|
-
else:
|
235
|
-
LOG.exception('Compute delete for compute ID: %s on amphora '
|
236
|
-
'ID: %s failed. The compute service has failed. '
|
237
|
-
'Aborting and reverting.', amphora.compute_id,
|
238
|
-
amphora.id)
|
239
|
-
raise
|
240
|
-
|
241
|
-
|
242
|
-
class ComputeActiveWait(BaseComputeTask):
|
243
|
-
"""Wait for the compute driver to mark the amphora active."""
|
244
|
-
|
245
|
-
def execute(self, compute_id, amphora_id, availability_zone):
|
246
|
-
"""Wait for the compute driver to mark the amphora active
|
247
|
-
|
248
|
-
:raises: Generic exception if the amphora is not active
|
249
|
-
:returns: An amphora object
|
250
|
-
"""
|
251
|
-
if availability_zone:
|
252
|
-
amp_network = availability_zone.get(constants.MANAGEMENT_NETWORK)
|
253
|
-
else:
|
254
|
-
amp_network = None
|
255
|
-
for i in range(CONF.controller_worker.amp_active_retries):
|
256
|
-
amp, fault = self.compute.get_amphora(compute_id, amp_network)
|
257
|
-
if amp.status == constants.ACTIVE:
|
258
|
-
if CONF.haproxy_amphora.build_rate_limit != -1:
|
259
|
-
self.rate_limit.remove_from_build_req_queue(amphora_id)
|
260
|
-
return amp
|
261
|
-
if amp.status == constants.ERROR:
|
262
|
-
raise exceptions.ComputeBuildException(fault=fault)
|
263
|
-
time.sleep(CONF.controller_worker.amp_active_wait_sec)
|
264
|
-
|
265
|
-
raise exceptions.ComputeWaitTimeoutException(id=compute_id)
|
266
|
-
|
267
|
-
|
268
|
-
class NovaServerGroupCreate(BaseComputeTask):
|
269
|
-
def execute(self, loadbalancer_id):
|
270
|
-
"""Create a server group by nova client api
|
271
|
-
|
272
|
-
:param loadbalancer_id: will be used for server group's name
|
273
|
-
:param policy: will used for server group's policy
|
274
|
-
:raises: Generic exception if the server group is not created
|
275
|
-
:returns: server group's id
|
276
|
-
"""
|
277
|
-
|
278
|
-
name = 'octavia-lb-' + loadbalancer_id
|
279
|
-
server_group = self.compute.create_server_group(
|
280
|
-
name, CONF.nova.anti_affinity_policy)
|
281
|
-
LOG.debug("Server Group created with id: %s for load balancer id: "
|
282
|
-
"%s", server_group.id, loadbalancer_id)
|
283
|
-
return server_group.id
|
284
|
-
|
285
|
-
def revert(self, result, *args, **kwargs):
|
286
|
-
"""This method will revert the creation of the
|
287
|
-
|
288
|
-
:param result: here it refers to server group id
|
289
|
-
"""
|
290
|
-
server_group_id = result
|
291
|
-
LOG.warning("Reverting server group create with id:%s",
|
292
|
-
server_group_id)
|
293
|
-
try:
|
294
|
-
self.compute.delete_server_group(server_group_id)
|
295
|
-
except Exception as e:
|
296
|
-
LOG.error("Failed to delete server group. Resources may "
|
297
|
-
"still be in use for server group: %(sg)s due to "
|
298
|
-
"error: %(except)s",
|
299
|
-
{'sg': server_group_id, 'except': str(e)})
|
300
|
-
|
301
|
-
|
302
|
-
class NovaServerGroupDelete(BaseComputeTask):
|
303
|
-
def execute(self, server_group_id):
|
304
|
-
if server_group_id is not None:
|
305
|
-
self.compute.delete_server_group(server_group_id)
|
306
|
-
else:
|
307
|
-
return
|
308
|
-
|
309
|
-
|
310
|
-
class AttachPort(BaseComputeTask):
|
311
|
-
def execute(self, amphora, port):
|
312
|
-
"""Attach a port to an amphora instance.
|
313
|
-
|
314
|
-
:param amphora: The amphora to attach the port to.
|
315
|
-
:param port: The port to attach to the amphora.
|
316
|
-
:returns: None
|
317
|
-
"""
|
318
|
-
LOG.debug('Attaching port: %s to compute: %s',
|
319
|
-
port.id, amphora.compute_id)
|
320
|
-
self.compute.attach_network_or_port(amphora.compute_id,
|
321
|
-
port_id=port.id)
|
322
|
-
|
323
|
-
def revert(self, amphora, port, *args, **kwargs):
|
324
|
-
"""Revert our port attach.
|
325
|
-
|
326
|
-
:param amphora: The amphora to detach the port from.
|
327
|
-
:param port: The port to attach to the amphora.
|
328
|
-
"""
|
329
|
-
LOG.warning('Reverting port: %s attach to compute: %s',
|
330
|
-
port.id, amphora.compute_id)
|
331
|
-
try:
|
332
|
-
self.compute.detach_port(amphora.compute_id, port.id)
|
333
|
-
except Exception as e:
|
334
|
-
LOG.error('Failed to detach port %s from compute %s for revert '
|
335
|
-
'due to %s.', port.id, amphora.compute_id, str(e))
|