James Denton 86172dca82 Implement support for octavia-ovn-provider driver
This patch is the second of two required to implement the
octavia-ovn-provider driver for Octavia. A new var, octavia_ovn_enabled,
can be used to install the driver and configure Octavia accordingly.

This patch has also restructured the driver/plugin mechanism for the
os_octavia role to better mirror that of os_neutron and to make
future additions easier to implement.

It also uses neutron's method of certificate delivery for the ovn certs.

Depends-On: https://review.opendev.org/c/openstack/openstack-ansible/+/919599
Change-Id: Ic5963070f4f2504860ddf0829819ca2f301546b1
Signed-off-by: Matthew Thode <mthode@mthode.org>
2024-05-16 13:14:55 +00:00

104 lines
3.9 KiB
YAML

---
# Copyright 2018, VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
_octavia_is_first_play_host: >-
{{
(octavia_services['octavia-api']['group'] in group_names and
inventory_hostname == (groups[octavia_services['octavia-api']['group']] | intersect(ansible_play_hosts)) | first) | bool
}}
_octavia_oslomsg_rpc_vhost_conf: >-
{{
(octavia_oslomsg_rpc_vhost is string) | ternary(
octavia_oslomsg_rpc_vhost, octavia_oslomsg_rpc_vhost | selectattr('state', 'eq', 'present') | map(attribute='name') | first)
}}
_octavia_oslomsg_notify_vhost_conf: >-
{{
(octavia_oslomsg_notify_vhost is string) | ternary(
octavia_oslomsg_notify_vhost, octavia_oslomsg_notify_vhost | selectattr('state', 'eq', 'present') | map(attribute='name') | first)
}}
_octavia_venv_packages: >-
{%- set pkg_list = octavia_pip_packages | union(octavia_user_pip_packages) +
(octavia_oslomsg_amqp1_enabled | bool) | ternary(octavia_optional_oslomsg_amqp1_pip_packages, []) %}
{%- if octavia_ovn_enabled %}
{%- set _ = pkg_list.extend(octavia_optional_ovn_octavia_provider_pip_packages) %}
{%- endif %}
{{- pkg_list | unique }}
#
# Compile a list of the services on a host based on whether
# the host is in the host group and the service is enabled.
#
filtered_octavia_services: |-
{% set services = [] %}
{% for key, value in octavia_services.items() %}
{% if (value['group'] in group_names) and
(('condition' not in value) or
('condition' in value and value['condition'])) and
not ('wsgi_app' in value and value['wsgi_app']) %}
{% set _ = value.update(
{
'service_key': key,
'enabled': value['enabled'] | default(True),
'state': value['state'] | default('started'),
'config_overrides': value.init_config_overrides
}
)
%}
{% set _ = value.pop('init_config_overrides') %}
{% set _ = services.append(value) %}
{% endif %}
{% endfor %}
{{ services | sort(attribute='start_order') }}
uwsgi_octavia_services: |-
{% set services = {} %}
{% for key, value in octavia_services.items() %}
{% if (value['group'] in group_names) and
(('condition' not in value) or
('condition' in value and value['condition']))
and ('wsgi_app' in value and value['wsgi_app']) %}
{% set _ = value.update(
{
'wsgi_path': octavia_bin ~ '/' ~ value.wsgi_name,
'wsgi_venv': ((octavia_install_method == 'source') | ternary(octavia_bin | dirname, None)),
'uwsgi_uid': octavia_system_user_name,
'uwsgi_guid': octavia_system_group_name,
'uwsgi_processes': octavia_wsgi_processes,
'uwsgi_threads': octavia_wsgi_threads
}
)
%}
{% set _ = services.update({key: value}) %}
{% endif %}
{% endfor %}
{{ services }}
_octavia_legacy_policies:
"context_is_admin": "role:admin or role:load-balancer_admin"
"admin_or_owner": "is_admin:True or project_id:%(project_id)s"
"load-balancer:read": "rule:admin_or_owner"
"load-balancer:read-global": "is_admin:True"
"load-balancer:write": "rule:admin_or_owner"
"load-balancer:read-quota": "rule:admin_or_owner"
"load-balancer:read-quota-global": "is_admin:True"
"load-balancer:write-quota": "is_admin:True"
_octavia_jobboard_driver_map:
zookeeper: zookeeper_taskflow_driver
redis: redis_taskflow_driver