d94e57f17b
With update of ansible-lint to version >=6.0.0 a lot of new linters were added, that enabled by default. In order to comply with linter rules we're applying changes to the role. With that we also update metdata to reflect current state. Change-Id: Id8215882ee528d4c3055479e770c7432616649ba
648 lines
27 KiB
YAML
648 lines
27 KiB
YAML
---
|
|
# Copyright 2017, Rackspace US, 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.
|
|
|
|
## Verbosity Options
|
|
debug: False
|
|
|
|
# Set the host which will execute the shade modules
|
|
# for the service setup. The host must already have
|
|
# clouds.yaml properly configured.
|
|
octavia_service_setup_host: "{{ openstack_service_setup_host | default('localhost') }}"
|
|
octavia_service_setup_host_python_interpreter: >-
|
|
{{
|
|
openstack_service_setup_host_python_interpreter | default(
|
|
(octavia_service_setup_host == 'localhost') | ternary(ansible_playbook_python, ansible_facts['python']['executable']))
|
|
}}
|
|
|
|
# Set installation method.
|
|
octavia_install_method: "{{ service_install_method | default('source') }}"
|
|
octavia_venv_python_executable: "{{ openstack_venv_python_executable | default('python3') }}"
|
|
|
|
## Allow TLS listener
|
|
octavia_tls_listener_enabled: True
|
|
|
|
# Legacy policy disables the requirement for load-balancer service users to
|
|
# have one of the load-balancer:* roles. It provides a similar policy to
|
|
# legacy OpenStack policies where any user or admin has access to load-balancer
|
|
# resources that they own. Users with the admin role has access to all
|
|
# load-balancer resources, whether they own them or not.
|
|
octavia_legacy_policy: False
|
|
|
|
# Set the package install state for distribution packages
|
|
# Options are 'present' and 'latest'
|
|
octavia_package_state: "{{ package_state | default('latest') }}"
|
|
|
|
octavia_git_repo: https://opendev.org/openstack/octavia
|
|
octavia_git_install_branch: master
|
|
octavia_upper_constraints_url: >-
|
|
{{ requirements_git_url | default('https://releases.openstack.org/constraints/upper/' ~ requirements_git_install_branch | default('master')) }}
|
|
octavia_git_constraints:
|
|
- "--constraint {{ octavia_upper_constraints_url }}"
|
|
|
|
octavia_pip_install_args: "{{ pip_install_options | default('') }}"
|
|
|
|
# Name of the virtual env to deploy into
|
|
octavia_venv_tag: "{{ venv_tag | default('untagged') }}"
|
|
octavia_bin: "{{ _octavia_bin }}"
|
|
|
|
octavia_clients_endpoint: internalURL
|
|
|
|
octavia_auth_strategy: keystone
|
|
|
|
## Barbican certificates
|
|
octavia_barbican_enabled: false
|
|
|
|
## Cinder Volume
|
|
octavia_cinder_enabled: False
|
|
cinder_default_availability_zone: "{{ octavia_amp_availability_zone }}"
|
|
octavia_cinder_volume_size: 16
|
|
octavia_cinder_volume_type: "volumes-hdd"
|
|
|
|
## Database info
|
|
octavia_db_setup_host: "{{ openstack_db_setup_host | default('localhost') }}"
|
|
octavia_db_setup_python_interpreter: >-
|
|
{{
|
|
openstack_db_setup_python_interpreter | default(
|
|
(octavia_db_setup_host == 'localhost') | ternary(ansible_playbook_python, ansible_facts['python']['executable']))
|
|
}}
|
|
octavia_galera_address: "{{ galera_address | default('127.0.0.1') }}"
|
|
octavia_galera_user: octavia
|
|
octavia_galera_database: octavia
|
|
octavia_galera_persistence_database: octavia_persistence
|
|
octavia_galera_use_ssl: "{{ galera_use_ssl | default(False) }}"
|
|
octavia_galera_ssl_ca_cert: "{{ galera_ssl_ca_cert | default('') }}"
|
|
octavia_db_max_overflow: "{{ openstack_db_max_overflow | default('50') }}"
|
|
octavia_db_max_pool_size: "{{ openstack_db_max_pool_size | default('5') }}"
|
|
octavia_db_pool_timeout: "{{ openstack_db_pool_timeout | default('30') }}"
|
|
octavia_db_connection_recycle_time: "{{ openstack_db_connection_recycle_time | default('600') }}"
|
|
octavia_galera_port: "{{ galera_port | default('3306') }}"
|
|
|
|
## Coordination info
|
|
# NOTE: Only Zookeeper and Redis are supported for Octavia
|
|
octavia_coordination_driver: "{{ coordination_driver | default('zookeeper') }}"
|
|
octavia_coordination_group: "{{ coordination_host_group | default('zookeeper_all') }}"
|
|
octavia_coordination_enable: "{{ octavia_coordination_group in groups and groups[octavia_coordination_group] | length > 0 }}"
|
|
octavia_coordination_namespace: octavia_jobboard
|
|
octavia_coordination_client_ssl: "{{ coordination_client_ssl | default(True) }}"
|
|
octavia_coordination_verify_cert: "{{ coordination_verify_cert | default(True) }}"
|
|
octavia_coordination_port: "{{ coordination_port | default(octavia_coordination_client_ssl | ternary('2281', '2181')) }}"
|
|
|
|
## Oslo Messaging
|
|
|
|
# RPC
|
|
octavia_oslomsg_rpc_host_group: "{{ oslomsg_rpc_host_group | default('rabbitmq_all') }}"
|
|
octavia_oslomsg_rpc_setup_host: "{{ (octavia_oslomsg_rpc_host_group in groups) | ternary(groups[octavia_oslomsg_rpc_host_group][0], 'localhost') }}"
|
|
octavia_oslomsg_rpc_transport: "{{ oslomsg_rpc_transport | default('rabbit') }}"
|
|
octavia_oslomsg_rpc_servers: "{{ oslomsg_rpc_servers | default('127.0.0.1') }}"
|
|
octavia_oslomsg_rpc_port: "{{ oslomsg_rpc_port | default('5672') }}"
|
|
octavia_oslomsg_rpc_use_ssl: "{{ oslomsg_rpc_use_ssl | default(False) }}"
|
|
octavia_oslomsg_rpc_userid: octavia
|
|
octavia_oslomsg_rpc_vhost: /octavia
|
|
octavia_oslomsg_rpc_ssl_version: "{{ oslomsg_rpc_ssl_version | default('TLSv1_2') }}"
|
|
octavia_oslomsg_rpc_ssl_ca_file: "{{ oslomsg_rpc_ssl_ca_file | default('') }}"
|
|
|
|
# Notify
|
|
octavia_oslomsg_notify_host_group: "{{ oslomsg_notify_host_group | default('rabbitmq_all') }}"
|
|
octavia_oslomsg_notify_setup_host: >-
|
|
{{ (octavia_oslomsg_notify_host_group in groups) | ternary(groups[octavia_oslomsg_notify_host_group][0], 'localhost') }}
|
|
octavia_oslomsg_notify_transport: "{{ oslomsg_notify_transport | default('rabbit') }}"
|
|
octavia_oslomsg_notify_servers: "{{ oslomsg_notify_servers | default('127.0.0.1') }}"
|
|
octavia_oslomsg_notify_port: "{{ oslomsg_notify_port | default('5672') }}"
|
|
octavia_oslomsg_notify_use_ssl: "{{ oslomsg_notify_use_ssl | default(False) }}"
|
|
octavia_oslomsg_notify_userid: "{{ octavia_oslomsg_rpc_userid }}"
|
|
octavia_oslomsg_notify_password: "{{ octavia_oslomsg_rpc_password }}"
|
|
octavia_oslomsg_notify_vhost: "{{ octavia_oslomsg_rpc_vhost }}"
|
|
octavia_oslomsg_notify_ssl_version: "{{ oslomsg_notify_ssl_version | default('TLSv1_2') }}"
|
|
octavia_oslomsg_notify_ssl_ca_file: "{{ oslomsg_notify_ssl_ca_file | default('') }}"
|
|
|
|
## (Qdrouterd) integration
|
|
# TODO(ansmith): Change structure when more backends will be supported
|
|
octavia_oslomsg_amqp1_enabled: "{{ octavia_oslomsg_rpc_transport == 'amqp' }}"
|
|
|
|
octavia_ceilometer_enabled: "{{ (groups['ceilometer_all'] is defined) and (groups['ceilometer_all'] | length > 0) }}"
|
|
|
|
## octavia User / Group
|
|
octavia_system_user_name: octavia
|
|
octavia_system_group_name: octavia
|
|
octavia_system_shell: /bin/false
|
|
octavia_system_comment: octavia system user
|
|
octavia_system_home_folder: "/var/lib/{{ octavia_system_user_name }}"
|
|
octavia_system_slice_name: octavia
|
|
octavia_lock_dir: "{{ openstack_lock_dir | default('/run/lock') }}"
|
|
|
|
## Auth
|
|
octavia_service_region: "{{ service_region | default('RegionOne') }}"
|
|
octavia_service_project_name: "service"
|
|
octavia_service_user_name: "octavia"
|
|
octavia_service_role_names:
|
|
- admin
|
|
- service
|
|
octavia_service_token_roles:
|
|
- service
|
|
octavia_service_token_roles_required: "{{ openstack_service_token_roles_required | default(True) }}"
|
|
octavia_service_project_domain_id: default
|
|
octavia_service_user_domain_id: default
|
|
octavia_keystone_auth_plugin: "{{ octavia_keystone_auth_type }}"
|
|
octavia_keystone_auth_type: password
|
|
|
|
## octavia api service type and data
|
|
octavia_service_name: octavia
|
|
octavia_service_description: "Octavia Load Balancing Service"
|
|
octavia_service_port: 9876
|
|
octavia_service_proto: http
|
|
octavia_service_publicuri_proto: "{{ openstack_service_publicuri_proto | default(octavia_service_proto) }}"
|
|
octavia_service_adminuri_proto: "{{ openstack_service_adminuri_proto | default(octavia_service_proto) }}"
|
|
octavia_service_internaluri_proto: "{{ openstack_service_internaluri_proto | default(octavia_service_proto) }}"
|
|
octavia_service_type: load-balancer
|
|
octavia_service_publicuri: "{{ octavia_service_publicuri_proto }}://{{ external_lb_vip_address }}:{{ octavia_service_port }}"
|
|
octavia_service_adminuri: "{{ octavia_service_adminuri_proto }}://{{ internal_lb_vip_address }}:{{ octavia_service_port }}"
|
|
octavia_service_internaluri: "{{ octavia_service_internaluri_proto }}://{{ internal_lb_vip_address }}:{{ octavia_service_port }}"
|
|
|
|
octavia_service_in_ldap: "{{ service_ldap_backend_enabled | default(False) }}"
|
|
|
|
## RPC
|
|
octavia_rpc_thread_pool_size: 64
|
|
octavia_rpc_conn_pool_size: 30
|
|
|
|
## Timeouts
|
|
octavia_amp_active_retries: 10
|
|
|
|
## Plugin dirs
|
|
octavia_plugin_dirs:
|
|
- /usr/lib/octavia
|
|
- /usr/local/lib/octavia
|
|
|
|
# Common pip packages
|
|
octavia_pip_packages:
|
|
- cryptography
|
|
- keystonemiddleware
|
|
- osprofiler
|
|
- PyMySQL
|
|
- pymemcache
|
|
- python-glanceclient
|
|
- python-keystoneclient
|
|
- python-memcached
|
|
- python-neutronclient
|
|
- python-novaclient
|
|
- python-openstackclient
|
|
- python-octaviaclient
|
|
- "git+{{ octavia_git_repo }}@{{ octavia_git_install_branch }}#egg=octavia"
|
|
- systemd-python
|
|
- "tooz[{{ octavia_coordination_driver }}]"
|
|
|
|
# Memcached override
|
|
octavia_memcached_servers: "{{ memcached_servers }}"
|
|
|
|
# Specific pip packages provided by the user
|
|
octavia_user_pip_packages: []
|
|
|
|
octavia_optional_oslomsg_amqp1_pip_packages:
|
|
- oslo.messaging[amqp1]
|
|
|
|
octavia_api_init_overrides: {}
|
|
octavia_worker_init_overrides: {}
|
|
octavia_housekeeping_init_overrides: {}
|
|
octavia_health_manager_init_overrides: {}
|
|
|
|
## Service Name-Group Mapping
|
|
octavia_services:
|
|
octavia-api:
|
|
group: octavia-api
|
|
service_name: octavia-api
|
|
start_order: 4
|
|
init_config_overrides: "{{ octavia_api_init_overrides }}"
|
|
wsgi_app: True
|
|
wsgi_name: octavia-wsgi
|
|
uwsgi_overrides: "{{ octavia_api_uwsgi_ini_overrides }}"
|
|
uwsgi_port: "{{ octavia_service_port }}"
|
|
uwsgi_bind_address: "{{ octavia_uwsgi_bind_address }}"
|
|
uwsgi_tls: "{{ octavia_backend_ssl | ternary(octavia_uwsgi_tls, {}) }}"
|
|
octavia-worker:
|
|
group: octavia-worker
|
|
service_name: octavia-worker
|
|
start_order: 1
|
|
init_config_overrides: "{{ octavia_worker_init_overrides }}"
|
|
execstarts: "{{ octavia_bin }}/octavia-worker"
|
|
execreloads: "/bin/kill -HUP $MAINPID"
|
|
octavia-housekeeping:
|
|
group: octavia-housekeeping
|
|
service_name: octavia-housekeeping
|
|
start_order: 3
|
|
init_config_overrides: "{{ octavia_housekeeping_init_overrides }}"
|
|
execstarts: "{{ octavia_bin }}/octavia-housekeeping"
|
|
execreloads: "/bin/kill -HUP $MAINPID"
|
|
octavia-health-manager:
|
|
group: octavia-health-manager
|
|
service_name: octavia-health-manager
|
|
start_order: 2
|
|
init_config_overrides: "{{ octavia_health_manager_init_overrides }}"
|
|
execstarts: "{{ octavia_bin }}/octavia-health-manager"
|
|
execreloads: "/bin/kill -HUP $MAINPID"
|
|
|
|
# Required secrets for the role
|
|
octavia_required_secrets:
|
|
- keystone_auth_admin_password
|
|
- octavia_container_mysql_password
|
|
- octavia_oslomsg_rpc_password
|
|
- octavia_oslomsg_notify_password
|
|
- octavia_service_password
|
|
- memcached_encryption_key
|
|
|
|
## Octavia configs
|
|
# Load balancer topology options are SINGLE, ACTIVE_STANDBY
|
|
octavia_loadbalancer_topology: ACTIVE_STANDBY
|
|
|
|
# Image tag for the amphora image in glance
|
|
octavia_glance_image_tag: octavia-amphora-image
|
|
# add here the id of the image owner to avoid faked images being used
|
|
octavia_amp_image_owner_id:
|
|
# download the image from an artefact server
|
|
# Note: The default is the Octavia test image so don't use that in prod
|
|
octavia_download_artefact: True
|
|
# The URL to download from
|
|
octavia_artefact_url: http://tarballs.openstack.org/octavia/test-images/test-only-amphora-x64-haproxy-ubuntu-focal.qcow2
|
|
# Set the directory where the downloaded image will be stored
|
|
# on the octavia_service_setup_host host. If the host is localhost,
|
|
# then the user running the playbook must have access to it.
|
|
octavia_amp_image_path: "{{ lookup('env', 'HOME') }}/openstack-ansible/octavia"
|
|
octavia_amp_image_path_owner: "{{ lookup('env', 'USER') }}"
|
|
# enable uploading image to glance automatically
|
|
octavia_amp_image_upload_enabled: "{{ octavia_download_artefact }}"
|
|
|
|
# Name of the Octavia security group
|
|
octavia_security_group_name: octavia_sec_grp
|
|
# Restrict access to only authorized hosts
|
|
octavia_security_group_rule_cidr: "{{ octavia_management_net_subnet_cidr }}"
|
|
# ssh enabled - switch to True if you need ssh access to the amphora
|
|
octavia_ssh_enabled: False
|
|
octavia_ssh_key_name: octavia_key
|
|
octavia_keypair_setup_host: "{{ openstack_service_setup_host | default('localhost') }}"
|
|
octavia_keypair_setup_host_python_interpreter: >-
|
|
{{
|
|
openstack_service_setup_host_python_interpreter | default((octavia_keypair_setup_host == 'localhost') | ternary(
|
|
ansible_playbook_python, ansible_facts['python']['executable']))
|
|
}}
|
|
# port the agent listens on
|
|
octavia_agent_port: "9443"
|
|
octavia_health_manager_port: 5555
|
|
|
|
# Octavia Nova flavor
|
|
octavia_amp_flavor_name: "m1.amphora"
|
|
octavia_amp_ram: 1024
|
|
octavia_amp_vcpu: 1
|
|
octavia_amp_disk: 20
|
|
# octavia_amp_extra_specs:
|
|
|
|
# only increase when it's a really busy system since this is by deployed host,
|
|
# e.g. 3 hosts, 5 workers (this param) per host, results in 15 worker total
|
|
octavia_task_flow_max_workers: 5
|
|
|
|
# Enable provisioning status sync with neutron db
|
|
octavia_sync_provisioning_status: False
|
|
|
|
# For convenience, we make use of the neutron message vhost
|
|
# for the LBAAS event stream. We could make a completely
|
|
# separate vhost, but the old LBAAS functionality is
|
|
# deprecated so it's a bit pointless unless there is demand
|
|
# for doing it. As such, we provide these defaults here for
|
|
# the template to use.
|
|
neutron_oslomsg_rpc_userid: neutron
|
|
neutron_oslomsg_rpc_vhost: /neutron
|
|
neutron_oslomsg_rpc_transport: "{{ octavia_oslomsg_rpc_transport }}"
|
|
neutron_oslomsg_rpc_port: "{{ octavia_oslomsg_rpc_port }}"
|
|
neutron_oslomsg_rpc_servers: "{{ octavia_oslomsg_rpc_servers }}"
|
|
neutron_oslomsg_rpc_use_ssl: "{{ octavia_oslomsg_rpc_use_ssl }}"
|
|
|
|
# For additional security use a different user on the Neutron queue
|
|
# for Octavia with restricted access to only the event streamer
|
|
# queues
|
|
octavia_neutron_oslomsg_rpc_userid: "{{ neutron_oslomsg_rpc_userid }}"
|
|
octavia_neutron_oslomsg_rpc_password: "{{ neutron_oslomsg_rpc_password }}"
|
|
|
|
# this controls if Octavia should add an anti-affinity hint to make sure
|
|
# two amphora are not placed pn the same host (the most common setup of
|
|
# ant affinity features in Nova).
|
|
octavia_enable_anti_affinity: True
|
|
|
|
# Some installations put hardware more suited for load balancing in special
|
|
# availability zones. This allows to target a specific availability zone
|
|
# for amphora creation
|
|
octavia_amp_availability_zone: nova
|
|
|
|
# List of haproxy template files to copy from deployment host to octavia hosts
|
|
# octavia_user_haproxy_templates:
|
|
# - src: "/etc/openstack_deploy/octavia/haproxy_templates/base.cfg.j2"
|
|
# dest: "/etc/octavia/templates/base.cfg.j2"
|
|
# - src: "/etc/openstack_deploy/octavia/haproxy_templates/haproxy.cfg.j2"
|
|
# dest: "/etc/octavia/templates/haproxy.cfg.j2"
|
|
# - src: "/etc/openstack_deploy/octavia/haproxy_templates/macros.cfg.j2"
|
|
# dest: "/etc/octavia/templates/macros.cfg.j2"
|
|
octavia_user_haproxy_templates: {}
|
|
# Path of custom haproxy template file
|
|
# octavia_haproxy_amphora_template: /etc/octavia/templates/haproxy.cfg.j2
|
|
|
|
# Name of the Octavia management network in Neutron
|
|
octavia_neutron_management_network_name: lbaas-mgmt
|
|
# Name of the Neutron provider net in the system (flat, vlan, ...)
|
|
octavia_provider_network_name: lbaas
|
|
# Network type
|
|
octavia_provider_network_type: flat
|
|
# Network segmentation ID if vlan, gre...
|
|
# octavia_provider_segmentation_id:
|
|
# Network CIDR
|
|
octavia_management_net_subnet_cidr: 172.29.232.0/22
|
|
# Example allocation range:
|
|
# octavia_management_net_subnet_allocation_pools: "172.29.232.10-172.29.235.200"
|
|
octavia_management_net_subnet_allocation_pools: ""
|
|
# Do we require the Neutron DHCP server
|
|
octavia_management_net_dhcp: "True"
|
|
# Should Octavia set up the network and subnet?
|
|
octavia_service_net_setup: True
|
|
# This should match net_name from provider_networks structure in openstack_user_config
|
|
octavia_provider_inventory_net_name: "{{ octavia_provider_network_name }}"
|
|
# This gets container managment network structure based on octavia_provider_inventory_net_name
|
|
octavia_provider_network: >-
|
|
{{ provider_networks | map(attribute='network') | selectattr('net_name', 'defined') | selectattr(
|
|
'net_name', 'equalto', octavia_provider_inventory_net_name) | list | first
|
|
}}
|
|
# The name of the network address pool
|
|
octavia_container_network_name: "{{ octavia_provider_network['ip_from_q'] }}_address"
|
|
octavia_hm_group: "octavia-health-manager"
|
|
# Note: We use some heuristics here but if you do anything special make sure to use the
|
|
# ip addresses on the right network. This will use the container networking to figure out the ip
|
|
octavia_hm_hosts: >-
|
|
{% for host in groups[octavia_hm_group] %}{{ hostvars[host]['container_networks'][octavia_container_network_name]['address'] }}{%
|
|
if not loop.last %},{% endif %}{% endfor %}
|
|
# Set this to the right container port aka the eth you connect to the octavia
|
|
# management network
|
|
octavia_container_interface: "{{ octavia_provider_network.container_interface }}"
|
|
# Set this to true to drop the iptables rules
|
|
octavia_ip_tables_fw: True
|
|
# The iptable rules
|
|
octavia_iptables_rules:
|
|
- # Allow icmp
|
|
chain: INPUT
|
|
protocol: icmp
|
|
ctstate: NEW
|
|
icmp_type: 8
|
|
jump: ACCEPT
|
|
- # Allow existing connections:
|
|
chain: INPUT
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
ctstate: RELATED,ESTABLISHED
|
|
jump: ACCEPT
|
|
- # Allow heartbeat:
|
|
chain: INPUT
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
protocol: udp
|
|
destination_port: "{{ octavia_health_manager_port }}"
|
|
jump: ACCEPT
|
|
- # Reject INPUT:
|
|
chain: INPUT
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
reject_with: icmp-port-unreachable
|
|
- # Reject FORWARD:
|
|
chain: FORWARD
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
reject_with: icmp-port-unreachable
|
|
- # Allow icmp6
|
|
chain: INPUT
|
|
protocol: icmpv6
|
|
jump: ACCEPT
|
|
ip_version: ipv6
|
|
- # Allow existing connections
|
|
chain: INPUT
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
ctstate: RELATED,ESTABLISHED
|
|
jump: ACCEPT
|
|
ip_version: ipv6
|
|
- # Allow heartbeat
|
|
chain: INPUT
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
protocol: udp
|
|
destination_port: "{{ octavia_health_manager_port }}"
|
|
jump: ACCEPT
|
|
ip_version: ipv6
|
|
- # Reject INPUT
|
|
chain: INPUT
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
reject_with: icmp6-port-unreachable
|
|
ip_version: ipv6
|
|
- # Reject FORWARD
|
|
chain: FORWARD
|
|
in_interface: "{{ octavia_container_interface }}"
|
|
reject_with: icmp6-port-unreachable
|
|
ip_version: ipv6
|
|
|
|
# uWSGI Settings
|
|
octavia_wsgi_processes_max: 16
|
|
octavia_wsgi_processes: >-
|
|
{{ [[(ansible_facts['processor_vcpus'] // ansible_facts['processor_threads_per_core']) | default(1), 1] | max * 2, octavia_wsgi_processes_max] | min }}
|
|
octavia_wsgi_threads: 1
|
|
octavia_uwsgi_bind_address: "{{ openstack_service_bind_address | default('0.0.0.0') }}"
|
|
octavia_uwsgi_tls:
|
|
crt: "{{ octavia_api_ssl_cert }}"
|
|
key: "{{ octavia_api_ssl_key }}"
|
|
|
|
# Set up the drivers
|
|
octavia_enabled_provider_drivers:
|
|
- "amphora:'The Octavia Amphora driver.'"
|
|
- "amphorav2:'The Octavia Amphora v2 driver.'"
|
|
- "octavia:'Deprecated name of Amphora driver.'"
|
|
octavia_default_provider_driver: "amphorav2"
|
|
octavia_amphora_driver: amphora_haproxy_rest_driver
|
|
octavia_compute_driver: compute_nova_driver
|
|
octavia_network_driver: allowed_address_pairs_driver
|
|
|
|
#
|
|
# Certificate generation
|
|
#
|
|
|
|
# Set the host which will execute the openssl_* modules
|
|
# for the certificate generation. The host must already
|
|
# have access to pyOpenSSL.
|
|
octavia_cert_setup_host: "{{ openstack_pki_setup_host | default('localhost') }}"
|
|
|
|
# Set the directory where the certificates will be stored
|
|
# on the above host. If the host is localhost, then the user
|
|
# running the playbook must have access to it.
|
|
octavia_cert_dir: "{{ openstack_pki_dir | default(lookup('env', 'HOME') ~ '/openstack-ansible') }}"
|
|
octavia_cert_keys_dir: "{{ octavia_cert_dir }}/certs/private/"
|
|
octavia_cert_certs_dir: "{{ octavia_cert_dir }}/certs/certs/"
|
|
octavia_cert_dir_owner: "{{ lookup('env', 'USER') }}"
|
|
|
|
octavia_cert_client_req_common_name: 'www.example.com' # change this to something more real
|
|
octavia_cert_client_req_country_name: 'US'
|
|
octavia_cert_client_req_state_or_province_name: 'Denial'
|
|
octavia_cert_client_req_locality_name: 'Nowhere'
|
|
octavia_cert_client_req_organization_name: 'Dis'
|
|
octavia_cert_validity_days: 1825 # 5 years
|
|
octavia_generate_certs: True # generate self signed client certs
|
|
octavia_generate_client_cert: True
|
|
octavia_generate_ca: True
|
|
octavia_regenerate_client_cert: ''
|
|
octavia_regenerate_ca: ''
|
|
|
|
octavia_cert_authorities:
|
|
- name: "OctaviaServerRoot"
|
|
country: "{{ octavia_cert_client_req_country_name }}"
|
|
state_or_province_name: "{{ octavia_cert_client_req_state_or_province_name }}"
|
|
organization_name: "{{ octavia_cert_client_req_organization_name }}"
|
|
locality_name: "{{ octavia_cert_client_req_locality_name }}"
|
|
cn: "Octavia Server CA"
|
|
provider: selfsigned
|
|
basic_constraints: "CA:TRUE"
|
|
key_passphrase: "{{ octavia_ca_private_key_passphrase }}"
|
|
key_usage:
|
|
- digitalSignature
|
|
- cRLSign
|
|
- keyCertSign
|
|
not_after: "+{{ octavia_cert_validity_days }}d"
|
|
- name: "OctaviaClientRoot"
|
|
country: "{{ octavia_cert_client_req_country_name }}"
|
|
state_or_province_name: "{{ octavia_cert_client_req_state_or_province_name }}"
|
|
organization_name: "{{ octavia_cert_client_req_organization_name }}"
|
|
locality_name: "{{ octavia_cert_client_req_locality_name }}"
|
|
cn: "Octavia Client CA"
|
|
provider: selfsigned
|
|
basic_constraints: "CA:TRUE"
|
|
key_passphrase: "{{ octavia_cert_client_password }}"
|
|
key_usage:
|
|
- digitalSignature
|
|
- cRLSign
|
|
- keyCertSign
|
|
not_after: "+{{ octavia_cert_validity_days }}d"
|
|
|
|
octavia_cert_certificates:
|
|
# Communication between haproxy and octavia API
|
|
- name: "octavia-api_{{ ansible_facts['hostname'] }}"
|
|
provider: ownca
|
|
cn: "{{ ansible_facts['hostname'] }}"
|
|
san: "{{ octavia_api_cert_san }}"
|
|
signed_by: "{{ octavia_api_intermediate_cert_name }}"
|
|
condition: "{{ octavia_backend_ssl | bool }}"
|
|
# Communication between octavia control plane and amphoras
|
|
- name: "octavia_client"
|
|
provider: ownca
|
|
cn: "{{ octavia_cert_client_req_common_name }}"
|
|
signed_by: "OctaviaClientRoot"
|
|
ownca_key_passphrase: "{{ octavia_cert_client_password }}"
|
|
key_usage:
|
|
- nonRepudiation
|
|
- digitalSignature
|
|
- keyEncipherment
|
|
extended_key_usage:
|
|
- clientAuth
|
|
- emailProtection
|
|
condition: "{{ octavia_generate_certs | bool }}"
|
|
|
|
# Installation details for SSL certificates
|
|
octavia_cert_install_certificates:
|
|
# Communication between haproxy and octavia API
|
|
- src: "{{ octavia_api_user_ssl_cert | default(octavia_cert_certs_dir ~ 'octavia-api_' ~ ansible_facts['hostname'] ~ '-chain.crt') }}"
|
|
dest: "{{ octavia_api_ssl_cert }}"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_user_name }}"
|
|
mode: "0644"
|
|
condition: "{{ octavia_backend_ssl | bool }}"
|
|
- src: "{{ octavia_api_user_ssl_key | default(octavia_cert_keys_dir ~ 'octavia-api_' ~ ansible_facts['hostname'] ~ '.key.pem') }}"
|
|
dest: "{{ octavia_api_ssl_key }}"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_user_name }}"
|
|
mode: "0600"
|
|
condition: "{{ octavia_backend_ssl | bool }}"
|
|
# Server CA
|
|
- src: "{{ octavia_ca_certificate | default(octavia_cert_dir ~ '/roots/OctaviaServerRoot/certs/OctaviaServerRoot.crt') }}"
|
|
dest: "/etc/octavia/certs/server_ca.pem"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_group_name }}"
|
|
mode: "0640"
|
|
condition: "{{ octavia_generate_certs | bool }}"
|
|
- src: "{{ octavia_ca_private_key | default(octavia_cert_dir ~ '/roots/OctaviaServerRoot/private/OctaviaServerRoot.key.pem') }}"
|
|
dest: "/etc/octavia/certs/ca_key.pem"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_group_name }}"
|
|
mode: "0640"
|
|
condition: "{{ octavia_generate_certs | bool }}"
|
|
# Client CA
|
|
- src: "{{ octavia_client_ca | default(octavia_cert_dir ~ '/roots/OctaviaClientRoot/certs/OctaviaClientRoot.crt') }}"
|
|
dest: "/etc/octavia/certs/client_ca.pem"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_group_name }}"
|
|
mode: "0640"
|
|
condition: "{{ octavia_generate_certs | bool }}"
|
|
# Client certificate
|
|
- src: "{{ octavia_client_cert | default(octavia_cert_certs_dir ~ '/octavia_client.crt') }}"
|
|
dest: "/etc/octavia/certs/client.pem.crt"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_group_name }}"
|
|
mode: "0640"
|
|
condition: "{{ octavia_generate_certs | bool }}"
|
|
- src: "{{ octavia_client_key | default(octavia_cert_keys_dir ~ '/octavia_client.key.pem') }}"
|
|
dest: "/etc/octavia/certs/client.pem.key"
|
|
owner: "{{ octavia_system_user_name }}"
|
|
group: "{{ octavia_system_group_name }}"
|
|
mode: "0640"
|
|
condition: "{{ octavia_generate_certs | bool }}"
|
|
|
|
# Custom client CA
|
|
# octavia_client_ca: "{{ octavia_cert_dir }}/ca_01.pem"
|
|
## Custom client certs
|
|
# octavia_client_cert: "{{ octavia_cert_dir }}/client.pem"
|
|
# octavia_client_key: "{{ octavia_cert_dir }}/client.key.pem"
|
|
## server
|
|
# octavia_server_ca: "{{ octavia_ca_certificate }}"
|
|
## ca certs
|
|
# octavia_ca_private_key: "{{ octavia_cert_dir }}/private/cakey.pem"
|
|
octavia_ca_private_key_passphrase: "{{ octavia_cert_client_password }}"
|
|
# octavia_ca_certificate: "{{ octavia_cert_dir }}/ca_server_01.pem"
|
|
|
|
|
|
# Quotas for the Octavia user - assuming active/passive topology
|
|
octavia_num_instances: 10000 # 5000 LB in active/passive
|
|
octavia_ram: "{{ (octavia_num_instances | int) * 1024 }}"
|
|
octavia_num_server_groups: "{{ ((octavia_num_instances | int) * 0.5) | int | abs }}"
|
|
octavia_num_server_group_members: 50
|
|
octavia_num_cores: "{{ octavia_num_instances }}"
|
|
octavia_num_secgroups: "{{ (octavia_num_instances | int) * 1.5 | int | abs }}" # average 3 listener per lb
|
|
octavia_num_ports: "{{ (octavia_num_instances | int) * 10 }}" # at least instances * 10
|
|
octavia_num_security_group_rules: "{{ (octavia_num_secgroups | int) * 100 }}"
|
|
|
|
## Tunable overrides
|
|
octavia_octavia_conf_overrides: {}
|
|
octavia_api_paste_ini_overrides: {}
|
|
octavia_policy_overrides: {}
|
|
octavia_api_uwsgi_ini_overrides: {}
|
|
|
|
###
|
|
### Backend TLS
|
|
###
|
|
|
|
# Define if communication between haproxy and service backends should be
|
|
# encrypted with TLS.
|
|
octavia_backend_ssl: "{{ openstack_service_backend_ssl | default(False) }}"
|
|
|
|
# octavia server certificate
|
|
octavia_api_intermediate_cert_name: "{{ openstack_pki_service_intermediate_cert_name | default('ExampleCorpIntermediate') }}"
|
|
octavia_api_cert_san: "{{ openstack_pki_san | default('DNS:' ~ ansible_facts['hostname'] ~ ',IP:' ~ management_address) }}"
|
|
|
|
# octavia destination files for SSL certificates
|
|
octavia_api_ssl_cert: /etc/octavia/certs/octavia-api.pem
|
|
octavia_api_ssl_key: /etc/octavia/certs/octavia-api.key
|
|
|
|
# Define user-provided SSL certificates
|
|
# octavia_api_user_ssl_cert: <path to cert on ansible deployment host>
|
|
# octavia_api_user_ssl_key: <path to cert on ansible deployment host>
|