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
@@ -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))