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
@@ -12,7 +12,9 @@
|
|
12
12
|
# License for the specific language governing permissions and limitations
|
13
13
|
# under the License.
|
14
14
|
|
15
|
-
from
|
15
|
+
from openstack.connection import Connection
|
16
|
+
import openstack.exceptions as os_exceptions
|
17
|
+
from openstack.network.v2._proxy import Proxy
|
16
18
|
from oslo_config import cfg
|
17
19
|
from oslo_log import log as logging
|
18
20
|
|
@@ -23,33 +25,28 @@ from octavia.network import base
|
|
23
25
|
from octavia.network import data_models as network_models
|
24
26
|
from octavia.network.drivers.neutron import utils
|
25
27
|
|
26
|
-
|
27
28
|
LOG = logging.getLogger(__name__)
|
28
29
|
DNS_INT_EXT_ALIAS = 'dns-integration'
|
29
30
|
SEC_GRP_EXT_ALIAS = 'security-group'
|
30
31
|
QOS_EXT_ALIAS = 'qos'
|
32
|
+
CONF_GROUP = 'neutron'
|
31
33
|
|
32
34
|
CONF = cfg.CONF
|
33
35
|
|
34
36
|
|
35
37
|
class BaseNeutronDriver(base.AbstractNetworkDriver):
|
36
|
-
|
37
38
|
def __init__(self):
|
38
|
-
self.
|
39
|
-
endpoint=CONF.neutron.endpoint,
|
40
|
-
region=CONF.neutron.region_name,
|
41
|
-
endpoint_type=CONF.neutron.endpoint_type,
|
42
|
-
service_name=CONF.neutron.service_name,
|
43
|
-
insecure=CONF.neutron.insecure,
|
44
|
-
ca_cert=CONF.neutron.ca_certificates_file
|
45
|
-
)
|
39
|
+
self.network_proxy: Proxy = self.os_connection.network
|
46
40
|
self._check_extension_cache = {}
|
47
41
|
self.sec_grp_enabled = self._check_extension_enabled(SEC_GRP_EXT_ALIAS)
|
48
42
|
self.dns_integration_enabled = self._check_extension_enabled(
|
49
43
|
DNS_INT_EXT_ALIAS)
|
50
44
|
self._qos_enabled = self._check_extension_enabled(QOS_EXT_ALIAS)
|
51
|
-
self.project_id = self.
|
52
|
-
|
45
|
+
self.project_id = self.os_connection.current_project_id
|
46
|
+
|
47
|
+
@property
|
48
|
+
def os_connection(self) -> Connection:
|
49
|
+
return clients.NeutronAuth.get_neutron_client()
|
53
50
|
|
54
51
|
def _check_extension_enabled(self, extension_alias):
|
55
52
|
if extension_alias in self._check_extension_cache:
|
@@ -60,12 +57,11 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
|
|
60
57
|
'status': 'enabled' if status else 'disabled'
|
61
58
|
})
|
62
59
|
else:
|
63
|
-
|
64
|
-
self.neutron_client.show_extension(extension_alias)
|
60
|
+
if self.network_proxy.find_extension(extension_alias):
|
65
61
|
LOG.debug('Neutron extension %(ext)s found enabled',
|
66
62
|
{'ext': extension_alias})
|
67
63
|
self._check_extension_cache[extension_alias] = True
|
68
|
-
|
64
|
+
else:
|
69
65
|
LOG.debug('Neutron extension %(ext)s is not enabled',
|
70
66
|
{'ext': extension_alias})
|
71
67
|
self._check_extension_cache[extension_alias] = False
|
@@ -123,64 +119,51 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
|
|
123
119
|
fixed_ips=fixed_ips)
|
124
120
|
|
125
121
|
def _add_allowed_address_pairs_to_port(self, port_id, ip_address_list):
|
126
|
-
aap = {
|
127
|
-
|
128
|
-
|
129
|
-
{'ip_address': ip} for ip in ip_address_list
|
130
|
-
]
|
131
|
-
}
|
132
|
-
}
|
133
|
-
self.neutron_client.update_port(port_id, aap)
|
122
|
+
aap = [{'ip_address': ip} for ip in ip_address_list]
|
123
|
+
self.network_proxy.update_port(port_id,
|
124
|
+
allowed_address_pairs=aap)
|
134
125
|
|
135
126
|
def _add_security_group_to_port(self, sec_grp_id, port_id):
|
136
|
-
port_update = {'port': {'security_groups': [sec_grp_id]}}
|
137
127
|
# Note: Neutron accepts the SG even if it already exists
|
138
128
|
try:
|
139
|
-
self.
|
140
|
-
|
129
|
+
self.network_proxy.update_port(
|
130
|
+
port_id, security_groups=[sec_grp_id])
|
131
|
+
except os_exceptions.NotFoundException as e:
|
141
132
|
raise base.PortNotFound(str(e))
|
142
133
|
except Exception as e:
|
143
134
|
raise base.NetworkException(str(e))
|
144
135
|
|
145
136
|
def _get_ports_by_security_group(self, sec_grp_id):
|
146
|
-
all_ports = self.
|
147
|
-
filtered_ports = [
|
148
|
-
|
149
|
-
|
150
|
-
filtered_ports.append(port)
|
137
|
+
all_ports = self.network_proxy.ports(project_id=self.project_id)
|
138
|
+
filtered_ports = [
|
139
|
+
p for p in all_ports if (p.security_group_ids and
|
140
|
+
sec_grp_id in p.security_group_ids)]
|
151
141
|
return filtered_ports
|
152
142
|
|
153
143
|
def _create_security_group(self, name):
|
154
|
-
|
155
|
-
sec_grp
|
156
|
-
return sec_grp['security_group']
|
144
|
+
sec_grp = self.network_proxy.create_security_group(name=name)
|
145
|
+
return sec_grp
|
157
146
|
|
158
147
|
def _create_security_group_rule(self, sec_grp_id, protocol,
|
159
148
|
direction='ingress', port_min=None,
|
160
149
|
port_max=None, ethertype='IPv6',
|
161
150
|
cidr=None):
|
162
151
|
rule = {
|
163
|
-
'
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
'remote_ip_prefix': cidr,
|
171
|
-
}
|
152
|
+
'security_group_id': sec_grp_id,
|
153
|
+
'direction': direction,
|
154
|
+
'protocol': protocol,
|
155
|
+
'port_range_min': port_min,
|
156
|
+
'port_range_max': port_max,
|
157
|
+
'ethertype': ethertype,
|
158
|
+
'remote_ip_prefix': cidr,
|
172
159
|
}
|
173
160
|
|
174
|
-
self.
|
161
|
+
self.network_proxy.create_security_group_rule(**rule)
|
175
162
|
|
176
163
|
def apply_qos_on_port(self, qos_id, port_id):
|
177
|
-
body = {
|
178
|
-
'port':
|
179
|
-
{'qos_policy_id': qos_id}
|
180
|
-
}
|
181
164
|
try:
|
182
|
-
self.
|
183
|
-
except
|
165
|
+
self.network_proxy.update_port(port_id, qos_policy_id=qos_id)
|
166
|
+
except os_exceptions.ResourceNotFound as e:
|
184
167
|
raise base.PortNotFound(str(e))
|
185
168
|
except Exception as e:
|
186
169
|
raise base.NetworkException(str(e))
|
@@ -188,26 +171,26 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
|
|
188
171
|
def get_plugged_networks(self, compute_id):
|
189
172
|
# List neutron ports associated with the Amphora
|
190
173
|
try:
|
191
|
-
ports = self.
|
174
|
+
ports = self.network_proxy.ports(device_id=compute_id)
|
192
175
|
except Exception:
|
193
176
|
LOG.debug('Error retrieving plugged networks for compute '
|
194
177
|
'device %s.', compute_id)
|
195
|
-
ports =
|
196
|
-
return [self._port_to_octavia_interface(
|
197
|
-
|
178
|
+
ports = tuple()
|
179
|
+
return [self._port_to_octavia_interface(compute_id, port) for port in
|
180
|
+
ports]
|
198
181
|
|
199
182
|
def _get_resource(self, resource_type, resource_id, context=None):
|
200
|
-
|
183
|
+
network = self.network_proxy
|
201
184
|
if context and not CONF.networking.allow_invisible_resource_usage:
|
202
|
-
|
185
|
+
network = clients.NeutronAuth.get_user_neutron_client(
|
203
186
|
context)
|
204
187
|
|
205
188
|
try:
|
206
|
-
resource = getattr(
|
207
|
-
|
208
|
-
return getattr(utils, 'convert_%
|
189
|
+
resource = getattr(
|
190
|
+
network, f"get_{resource_type}")(resource_id)
|
191
|
+
return getattr(utils, 'convert_%s_to_model' %
|
209
192
|
resource_type)(resource)
|
210
|
-
except
|
193
|
+
except os_exceptions.ResourceNotFound as e:
|
211
194
|
message = _('{resource_type} not found '
|
212
195
|
'({resource_type} id: {resource_id}).').format(
|
213
196
|
resource_type=resource_type, resource_id=resource_id)
|
@@ -228,20 +211,25 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
|
|
228
211
|
If unique_item set to True, only the first resource is returned.
|
229
212
|
"""
|
230
213
|
try:
|
231
|
-
|
232
|
-
|
214
|
+
resources = getattr(
|
215
|
+
self.network_proxy, f"{resource_type}s")(**filters)
|
233
216
|
conversion_function = getattr(
|
234
217
|
utils,
|
235
|
-
'convert_%
|
236
|
-
|
237
|
-
#
|
238
|
-
|
218
|
+
'convert_%s_to_model' % resource_type)
|
219
|
+
try:
|
220
|
+
# get first item to see if there is at least one resource
|
221
|
+
res_list = [conversion_function(next(resources))]
|
222
|
+
except StopIteration:
|
223
|
+
# pylint: disable=raise-missing-from
|
224
|
+
raise os_exceptions.NotFoundException(
|
225
|
+
f'No resource of type {resource_type} found that matches '
|
226
|
+
f'given filter criteria: {filters}.')
|
227
|
+
|
239
228
|
if unique_item:
|
240
|
-
return
|
229
|
+
return res_list[0]
|
230
|
+
return res_list + [conversion_function(r) for r in resources]
|
241
231
|
|
242
|
-
|
243
|
-
resource['%ss' % resource_type]))
|
244
|
-
except neutron_client_exceptions.NotFound as e:
|
232
|
+
except os_exceptions.NotFoundException as e:
|
245
233
|
message = _('{resource_type} not found '
|
246
234
|
'({resource_type} Filters: {filters}.').format(
|
247
235
|
resource_type=resource_type, filters=filters)
|
@@ -300,10 +288,10 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
|
|
300
288
|
|
301
289
|
fixed_ips.append(new_fixed_ip_dict)
|
302
290
|
|
303
|
-
body = {'port': {'fixed_ips': fixed_ips}}
|
304
291
|
try:
|
305
|
-
updated_port = self.
|
306
|
-
|
292
|
+
updated_port = self.network_proxy.update_port(
|
293
|
+
port_id, fixed_ips=fixed_ips)
|
294
|
+
return utils.convert_port_to_model(updated_port)
|
307
295
|
except Exception as e:
|
308
296
|
raise base.NetworkException(str(e))
|
309
297
|
|
@@ -315,9 +303,9 @@ class BaseNeutronDriver(base.AbstractNetworkDriver):
|
|
315
303
|
if fixed_ip.subnet_id != subnet_id
|
316
304
|
]
|
317
305
|
|
318
|
-
body = {'port': {'fixed_ips': fixed_ips}}
|
319
306
|
try:
|
320
|
-
updated_port = self.
|
321
|
-
|
307
|
+
updated_port = self.network_proxy.update_port(
|
308
|
+
port_id, fixed_ips=fixed_ips)
|
309
|
+
return utils.convert_port_to_model(updated_port)
|
322
310
|
except Exception as e:
|
323
311
|
raise base.NetworkException(str(e))
|
@@ -13,113 +13,97 @@
|
|
13
13
|
# under the License.
|
14
14
|
|
15
15
|
|
16
|
-
from
|
16
|
+
from openstack.network.v2.network_ip_availability import NetworkIPAvailability
|
17
|
+
|
17
18
|
from octavia.network import data_models as network_models
|
18
19
|
|
19
20
|
|
20
|
-
def
|
21
|
-
subnet = subnet_dict.get('subnet', subnet_dict)
|
22
|
-
subnet_hrs = subnet.get('host_routes', [])
|
21
|
+
def convert_subnet_to_model(subnet):
|
23
22
|
host_routes = [network_models.HostRoute(nexthop=hr.get('nexthop'),
|
24
23
|
destination=hr.get('destination'))
|
25
|
-
for hr in
|
26
|
-
return network_models.Subnet(
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
24
|
+
for hr in subnet.host_routes] if subnet.host_routes else []
|
25
|
+
return network_models.Subnet(
|
26
|
+
id=subnet.id,
|
27
|
+
name=subnet.name,
|
28
|
+
network_id=subnet.network_id,
|
29
|
+
project_id=subnet.project_id,
|
30
|
+
gateway_ip=subnet.gateway_ip,
|
31
|
+
cidr=subnet.cidr,
|
32
|
+
ip_version=subnet.ip_version,
|
33
|
+
host_routes=host_routes,
|
34
|
+
)
|
35
|
+
|
36
|
+
|
37
|
+
def convert_port_to_model(port):
|
38
|
+
if port.get('fixed_ips'):
|
39
|
+
fixed_ips = [convert_fixed_ip_dict_to_model(fixed_ip)
|
40
|
+
for fixed_ip in port.fixed_ips]
|
41
|
+
else:
|
42
|
+
fixed_ips = []
|
42
43
|
return network_models.Port(
|
43
|
-
id=port.
|
44
|
-
name=port.
|
45
|
-
device_id=port.
|
46
|
-
device_owner=port.
|
47
|
-
mac_address=port.
|
48
|
-
network_id=port.
|
49
|
-
status=port.
|
50
|
-
project_id=port.
|
51
|
-
admin_state_up=port.
|
44
|
+
id=port.id,
|
45
|
+
name=port.name,
|
46
|
+
device_id=port.device_id,
|
47
|
+
device_owner=port.device_owner,
|
48
|
+
mac_address=port.mac_address,
|
49
|
+
network_id=port.network_id,
|
50
|
+
status=port.status,
|
51
|
+
project_id=port.project_id,
|
52
|
+
admin_state_up=port.is_admin_state_up,
|
52
53
|
fixed_ips=fixed_ips,
|
53
|
-
qos_policy_id=port.
|
54
|
-
security_group_ids=port.
|
54
|
+
qos_policy_id=port.qos_policy_id,
|
55
|
+
security_group_ids=port.security_group_ids
|
55
56
|
)
|
56
57
|
|
57
58
|
|
58
|
-
def
|
59
|
-
nw = network_dict.get('network', network_dict)
|
59
|
+
def convert_network_to_model(nw):
|
60
60
|
return network_models.Network(
|
61
|
-
id=nw.
|
62
|
-
name=nw.
|
63
|
-
subnets=nw.
|
64
|
-
project_id=nw.
|
65
|
-
admin_state_up=nw.
|
66
|
-
mtu=nw.
|
67
|
-
provider_network_type=nw.
|
68
|
-
provider_physical_network=nw.
|
69
|
-
provider_segmentation_id=nw.
|
70
|
-
router_external=nw.
|
71
|
-
port_security_enabled=nw.
|
61
|
+
id=nw.id,
|
62
|
+
name=nw.name,
|
63
|
+
subnets=nw.subnet_ids,
|
64
|
+
project_id=nw.project_id,
|
65
|
+
admin_state_up=nw.is_admin_state_up,
|
66
|
+
mtu=nw.mtu,
|
67
|
+
provider_network_type=nw.provider_network_type,
|
68
|
+
provider_physical_network=nw.provider_physical_network,
|
69
|
+
provider_segmentation_id=nw.provider_segmentation_id,
|
70
|
+
router_external=nw.is_router_external,
|
71
|
+
port_security_enabled=nw.is_port_security_enabled,
|
72
72
|
)
|
73
73
|
|
74
74
|
|
75
|
-
def convert_fixed_ip_dict_to_model(
|
76
|
-
fixed_ip = fixed_ip_dict.get('fixed_ip', fixed_ip_dict)
|
75
|
+
def convert_fixed_ip_dict_to_model(fixed_ip: dict):
|
77
76
|
return network_models.FixedIP(subnet_id=fixed_ip.get('subnet_id'),
|
78
77
|
ip_address=fixed_ip.get('ip_address'))
|
79
78
|
|
80
79
|
|
81
|
-
def
|
82
|
-
|
83
|
-
return network_models.QosPolicy(id=qos_policy.get(constants.ID))
|
84
|
-
|
85
|
-
|
86
|
-
# We can't use "floating_ip" because we need to match the neutron client method
|
87
|
-
def convert_floatingip_dict_to_model(floating_ip_dict):
|
88
|
-
floating_ip = floating_ip_dict.get('floatingip', floating_ip_dict)
|
89
|
-
return network_models.FloatingIP(
|
90
|
-
id=floating_ip.get(constants.ID),
|
91
|
-
description=floating_ip.get(constants.DESCRIPTION),
|
92
|
-
project_id=floating_ip.get(constants.PROJECT_ID,
|
93
|
-
floating_ip.get(constants.TENANT_ID)),
|
94
|
-
status=floating_ip.get('status'),
|
95
|
-
router_id=floating_ip.get('router_id'),
|
96
|
-
port_id=floating_ip.get('port_id'),
|
97
|
-
floating_network_id=floating_ip.get('floating_network_id'),
|
98
|
-
floating_ip_address=floating_ip.get('floating_ip_address'),
|
99
|
-
fixed_ip_address=floating_ip.get('fixed_ip_address'),
|
100
|
-
fixed_port_id=floating_ip.get('fixed_port_id')
|
101
|
-
)
|
80
|
+
def convert_qos_policy_to_model(qos_policy):
|
81
|
+
return network_models.QosPolicy(id=qos_policy.id)
|
102
82
|
|
103
83
|
|
104
|
-
def
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
84
|
+
def convert_network_ip_availability_to_model(
|
85
|
+
nw_ip_avail: NetworkIPAvailability):
|
86
|
+
ip_avail = network_models.Network_IP_Availability(
|
87
|
+
network_id=nw_ip_avail.network_id,
|
88
|
+
tenant_id=nw_ip_avail.tenant_id,
|
89
|
+
project_id=nw_ip_avail.project_id,
|
90
|
+
network_name=nw_ip_avail.network_name, total_ips=nw_ip_avail.total_ips,
|
91
|
+
used_ips=nw_ip_avail.used_ips,
|
92
|
+
subnet_ip_availability=nw_ip_avail.subnet_ip_availability)
|
110
93
|
return ip_avail
|
111
94
|
|
112
95
|
|
113
|
-
def
|
114
|
-
|
115
|
-
|
96
|
+
def convert_security_group_to_model(security_group):
|
97
|
+
if security_group.security_group_rules:
|
98
|
+
sg_rule_ids = [rule['id'] for rule in
|
99
|
+
security_group.security_group_rules]
|
100
|
+
else:
|
101
|
+
sg_rule_ids = []
|
116
102
|
return network_models.SecurityGroup(
|
117
|
-
id=
|
118
|
-
project_id=
|
119
|
-
|
120
|
-
|
121
|
-
name=security_group_dict.get(constants.NAME),
|
122
|
-
description=security_group_dict.get(constants.DESCRIPTION),
|
103
|
+
id=security_group.id,
|
104
|
+
project_id=security_group.project_id,
|
105
|
+
name=security_group.name,
|
106
|
+
description=security_group.description,
|
123
107
|
security_group_rule_ids=sg_rule_ids,
|
124
|
-
tags=
|
125
|
-
stateful=
|
108
|
+
tags=security_group.tags,
|
109
|
+
stateful=security_group.stateful)
|
@@ -352,10 +352,6 @@ class NoopManager(object):
|
|
352
352
|
|
353
353
|
return amp_configs
|
354
354
|
|
355
|
-
def wait_for_port_detach(self, amphora):
|
356
|
-
LOG.debug("failover %s no-op, wait_for_port_detach, amphora id %s",
|
357
|
-
self.__class__.__name__, amphora.id)
|
358
|
-
|
359
355
|
def get_qos_policy(self, qos_policy_id):
|
360
356
|
LOG.debug("Qos Policy %s no-op, get_qos_policy qos_policy_id %s",
|
361
357
|
self.__class__.__name__, qos_policy_id)
|
@@ -520,9 +516,6 @@ class NoopNetworkDriver(driver_base.AbstractNetworkDriver):
|
|
520
516
|
def get_network_configs(self, loadbalancer, amphora=None):
|
521
517
|
return self.driver.get_network_configs(loadbalancer, amphora)
|
522
518
|
|
523
|
-
def wait_for_port_detach(self, amphora):
|
524
|
-
self.driver.wait_for_port_detach(amphora)
|
525
|
-
|
526
519
|
def apply_qos_on_port(self, qos_id, port_id):
|
527
520
|
self.driver.apply_qos_on_port(qos_id, port_id)
|
528
521
|
|
@@ -31,13 +31,13 @@ class StatsUpdateDb(stats_base.StatsDriverMixin):
|
|
31
31
|
|
32
32
|
def update_stats(self, listener_stats, deltas=False):
|
33
33
|
"""This function is to update the db with listener stats"""
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
34
|
+
with db_api.session().begin() as session:
|
35
|
+
for stats_object in listener_stats:
|
36
|
+
LOG.debug("Updating listener stats in db for listener `%s` / "
|
37
|
+
"amphora `%s`: %s",
|
38
|
+
stats_object.listener_id, stats_object.amphora_id,
|
39
|
+
stats_object.get_stats())
|
40
|
+
if deltas:
|
41
|
+
self.listener_stats_repo.increment(session, stats_object)
|
42
|
+
else:
|
43
|
+
self.listener_stats_repo.replace(session, stats_object)
|