Add rocky configs

Related-PROD: PROD-26533 (PROD:26533)

Change-Id: Ie65f893ad461dfe17371cf5857c20a63350cadab
diff --git a/octavia/api.sls b/octavia/api.sls
index 45c460f..d02a6cc 100644
--- a/octavia/api.sls
+++ b/octavia/api.sls
@@ -28,11 +28,12 @@
     - sls: octavia.db.offline_sync
 
 {%- if pillar.octavia.manager is not defined %}
-/etc/octavia/certificates/openssl.cnf:
-  file.managed:
-  - source: salt://octavia/files/{{ api.version }}/certificates/openssl.cnf
-  - require:
-    - pkg: octavia_api_packages
+/etc/octavia/dhcp/:
+  file.directory:
+    - name: /etc/octavia/dhcp/
+    - user: octavia
+    - group: octavia
+    - makedirs: true
 
 /etc/octavia/dhcp/dhclient.conf:
   file.managed:
diff --git a/octavia/files/rocky/dhcp/dhclient.conf b/octavia/files/rocky/dhcp/dhclient.conf
new file mode 100644
index 0000000..29e3315
--- /dev/null
+++ b/octavia/files/rocky/dhcp/dhclient.conf
@@ -0,0 +1,2 @@
+request subnet-mask,broadcast-address,interface-mtu;
+do-forward-updates false;
diff --git a/octavia/files/rocky/octavia_api.conf b/octavia/files/rocky/octavia_api.conf
new file mode 100644
index 0000000..c9510e7
--- /dev/null
+++ b/octavia/files/rocky/octavia_api.conf
@@ -0,0 +1,825 @@
+{%- from "octavia/map.jinja" import api with context %}
+[DEFAULT]
+
+#
+# From octavia
+#
+
+# The hostname Octavia is running on (string value)
+#host = example.domain
+
+# Name of the controller plugin to use (string value)
+#octavia_plugins = hot_plug_plugin
+
+{%- if api.logging is defined %}
+{%- set _data = api.logging %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/_log.conf" %}
+{%- endif %}
+debug = {{ api.get('debug', 'False') }}
+
+# A URL representing the messaging driver to use and its full configuration.
+# (string value)
+#transport_url = <None>
+{%- if api.message_queue.members is defined %}
+transport_url = rabbit://{% for member in api.message_queue.members -%}
+                             {{ api.message_queue.user }}:{{ api.message_queue.password }}@{{ member.host }}:{{ member.get('port', 5672) }}
+                             {%- if not loop.last -%},{%- endif -%}
+                         {%- endfor -%}
+                             /{{ api.message_queue.virtual_host }}
+{%- else %}
+transport_url = rabbit://{{ api.message_queue.user }}:{{ api.message_queue.password }}@{{ api.message_queue.host }}:{{ api.message_queue.port }}/{{ api.message_queue.virtual_host }}
+{%- endif %}
+
+# DEPRECATED: The messaging driver to use, defaults to rabbit. Other drivers
+# include amqp and zmq. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#rpc_backend = rabbit
+
+# The default exchange under which topics are scoped. May be overridden by an
+# exchange name specified in the transport_url option. (string value)
+#control_exchange = octavia
+
+#
+# From oslo.service.service
+#
+
+# Enable eventlet backdoor.  Acceptable values are 0, <port>, and
+# <start>:<end>, where 0 results in listening on a random tcp port number;
+# <port> results in listening on the specified port number (and not enabling
+# backdoor if that port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range of port numbers.
+# The chosen port is displayed in the service's log file. (string value)
+#backdoor_port = <None>
+
+# Enable eventlet backdoor, using the provided path as a unix socket that can
+# receive connections. This option is mutually exclusive with 'backdoor_port'
+# in that only one should be provided. If both are provided then the existence
+# of this option overrides the usage of that option. (string value)
+#backdoor_socket = <None>
+
+# Enables or disables logging values of all registered options when starting a
+# service (at DEBUG level). (boolean value)
+#log_options = true
+
+# Specify a timeout after which a gracefully shutdown server will exit. Zero
+# value means endless wait. (integer value)
+#graceful_shutdown_timeout = 60
+
+[api_settings]
+
+#
+# From octavia
+#
+
+# The host IP to bind to (IP address value)
+#bind_host = 127.0.0.1
+bind_host = {{ api.bind.address }}
+
+# The port to bind to (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#bind_port = 9876
+bind_port = {{ api.bind.port }}
+
+# The auth strategy for API requests. (string value)
+# Allowed values: noauth, keystone
+#auth_strategy = keystone
+
+# The handler that the API communicates with (string value)
+#api_handler = queue_producer
+
+# Allow the usage of the pagination (boolean value)
+#allow_pagination = false
+
+# Allow the usage of the sorting (boolean value)
+#allow_sorting = false
+
+# Allow the usage of the filtering (boolean value)
+#allow_filtering = false
+
+# Allow the usage of the field selection (boolean value)
+#allow_field_selection = false
+
+# The maximum number of items returned in a single response.
+# The string 'infinite' or a negative integer value means 'no limit'
+#pagination_max_limit = 'infinite'
+
+# Base URI for the API for use in pagination links.
+# This will be autodetected from the request if not overridden here.
+#api_base_uri = ''
+
+# Enable/disable exposing API endpoints (boolean value)
+# api_v1_enabled = True
+api_v1_enabled = {{ api.get('api_v1_enabled', 'True') }}
+# api_v2_enabled = True
+api_v2_enabled = {{ api.get('api_v2_enabled', 'True') }}
+
+# Enable/disable ability for users to create TLS Terminated listeners
+# allow_tls_terminated_listeners = True
+
+# Enable/disable ability for users to create PING type Health Monitors
+# allow_ping_health_monitors = True
+
+# Enable/disable ability for users to create PING type Health Monitors
+# allow_ping_health_monitors = True
+
+# Dictionary of enabled provider driver names and descriptions
+# enabled_provider_drivers = {'amphora': 'The Octavia Amphora driver.',
+#                             'octavia': 'Deprecated alias of the Octavia '
+#                                        'Amphora driver.'}
+
+# Default provider driver
+# default_provider_driver = amphora
+
+# The minimum health monitor delay interval for UDP-CONNECT Health Monitor type
+# udp_connect_min_interval_health_monitor = 3
+
+[amphora_agent]
+
+#
+# From octavia
+#
+
+# The ca which signed the client certificates (string value)
+#agent_server_ca = /etc/octavia/certs/client_ca.pem
+
+# The server certificate for the agent.py server to use (string value)
+#agent_server_cert = /etc/octavia/certs/server.pem
+
+# The directory where new network interfaces are located (string value)
+#agent_server_network_dir = <None>
+
+# The file where the network interfaces are located. Specifying this will
+# override any value set for agent_server_network_dir. (string value)
+#agent_server_network_file = <None>
+
+# The time in seconds to allow a request from the controller to run before
+# terminating the socket. (integer value)
+#agent_request_read_timeout = 120
+
+# The amphora ID. (string value)
+#amphora_id = <None>
+
+[certificates]
+
+#
+# From octavia
+#
+
+# Name of the cert manager to use (string value)
+#cert_manager = barbican_cert_manager
+
+# Name of the cert generator to use (string value)
+#cert_generator = local_cert_generator
+
+# Name of the Barbican authentication method to use (string value)
+#barbican_auth = barbican_acl_auth
+
+# The name of the certificate service in the keystonecatalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the barbican
+# service. (string value)
+#region_name = <None>
+
+# The endpoint_type to be used for barbican service. (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ api.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+[controller_worker]
+
+#
+# From octavia
+#
+
+# Number of workers for the controller-worker service.
+#workers=1
+
+# Retry attempts to wait for Amphora to become active (integer value)
+#amp_active_retries = 10
+amp_active_retries = 100
+
+# Seconds to wait between checks on whether an Amphora has become active
+# (integer value)
+#amp_active_wait_sec = 10
+amp_active_wait_sec = 2
+
+# Nova instance flavor id for the Amphora (string value)
+#amp_flavor_id =
+
+# Glance image tag for the Amphora image to boot. Use this option to be able to
+# update the image without reconfiguring Octavia. Ignored if amp_image_id is
+# defined. (string value)
+#amp_image_tag =
+
+# DEPRECATED: Glance image id for the Amphora image to boot (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Superseded by amp_image_tag option.
+#amp_image_id =
+
+# Restrict glance image selection to a specific owner ID.  This is a
+# recommended security setting. (string value)
+#amp_image_owner_id =
+
+# SSH key name used to boot the Amphora (string value)
+#amp_ssh_key_name =
+
+# Determines whether or not to allow access to the Amphorae (boolean value)
+#amp_ssh_access_allowed = true
+
+# List of networks to attach to the Amphorae. All networks defined in the list
+# will be attached to each amphora. (list value)
+#amp_boot_network_list =
+
+# DEPRECATED: Network to attach to the Amphorae. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by amp_boot_network_list.
+#amp_network =
+
+# List of security groups to attach to the Amphora. (list value)
+#amp_secgroup_list =
+
+# Client CA for the amphora agent to use (string value)
+#client_ca = /etc/octavia/certs/ca_01.pem
+
+# Name of the amphora driver to use (string value)
+#amphora_driver = amphora_noop_driver
+amphora_driver = amphora_haproxy_rest_driver
+
+# Name of the compute driver to use (string value)
+#compute_driver = compute_noop_driver
+compute_driver = compute_nova_driver
+
+# Name of the network driver to use (string value)
+#network_driver = network_noop_driver
+network_driver = allowed_address_pairs_driver
+
+# Distributor driver options are distributor_noop_driver
+#                                single_VIP_amphora
+#
+# distributor_driver = distributor_noop_driver
+
+# Load balancer topology configuration. SINGLE - One amphora per load balancer.
+# ACTIVE_STANDBY - Two amphora per load balancer. (string value)
+# Allowed values: ACTIVE_STANDBY, SINGLE
+#loadbalancer_topology = SINGLE
+
+# If True, build cloud-init user-data that is passed to the config drive on
+# Amphora boot instead of personality files. If False, utilize personality
+# files. (boolean value)
+#user_data_config_drive = false
+
+[cors]
+
+{%- if api.cors is defined %}
+{%- set _data = api.cors %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/_cors.conf" %}
+{%- endif %}
+
+[database]
+{%- set _data = api.database %}
+{%- if _data.ssl is defined and 'cacert_file' not in _data.ssl.keys() %}{% do _data['ssl'].update({'cacert_file': api.cacert_file}) %}{% endif %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/_database.conf" %}
+
+[glance]
+
+#
+# From octavia
+#
+
+# The name of the glance service in the keystone catalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the
+# OpenStack services. (string value)
+#region_name = <None>
+
+# Endpoint interface in identity service to use (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ api.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+[haproxy_amphora]
+
+#
+# From octavia
+#
+
+# Base directory for amphora files. (string value)
+#base_path = /var/lib/octavia
+base_path = /var/lib/octavia
+
+# Base directory for cert storage. (string value)
+#base_cert_dir = /var/lib/octavia/certs
+base_cert_dir = /var/lib/octavia/certs
+
+# Custom haproxy template. (string value)
+#haproxy_template = <None>
+
+# Retry threshold for connecting to amphorae. (integer value)
+#connection_max_retries = 300
+connection_max_retries = 1500
+
+# Retry timeout between connection attempts in seconds. (integer value)
+#connection_retry_interval = 5
+connection_retry_interval = 1
+
+# Number of amphorae that could be built per controller worker, simultaneously.
+#build_rate_limit=-1
+
+# Retry threshold for waiting for a build slot for an amphorae.
+#build_active_retries=300
+
+# Retry timeout between build attempts in seconds.
+#build_retry_interval=5
+
+# The user group for haproxy to run under inside the amphora. (string value)
+#user_group = nogroup
+
+# Size of the HAProxy stick table. Accepts k, m, g suffixes.  Example: 10k
+# (string value)
+#haproxy_stick_size = 10k
+
+# The host IP to bind to (IP address value)
+#bind_host = ::
+
+# The port to bind to (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#bind_port = 9443
+
+# Network interface through which to reach amphora, only required if using IPv6
+# link local addresses. (string value)
+#lb_network_interface = o-hm0
+
+# The full path to haproxy (string value)
+#haproxy_cmd = /usr/sbin/haproxy
+
+# The respawn count for haproxy's upstart script (integer value)
+#respawn_count = 2
+
+# The respawn interval for haproxy's upstart script (integer value)
+#respawn_interval = 2
+
+# The time in seconds to wait for a REST API to connect. (floating point value)
+#rest_request_conn_timeout = 10
+rest_request_conn_timeout = 10
+
+# The time in seconds to wait for a REST API response. (floating point value)
+#rest_request_read_timeout = 60
+rest_request_read_timeout = 120
+
+# These "active" timeouts are used once the amphora should already
+# be fully up and active. These values are lower than the other values to
+# facilitate "fail fast" scenarios like failovers
+# active_connection_max_retries = 15
+# active_connection_rety_interval = 2
+
+# The client certificate to talk to the agent (string value)
+#client_cert = /etc/octavia/certs/client.pem
+
+# The ca which signed the server certificates (string value)
+#server_ca = /etc/octavia/certs/server_ca.pem
+
+# DEPRECATED: If False, use sysvinit. (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: This is now automatically discovered  and configured.
+#use_upstart = true
+
+[health_manager]
+
+#
+# From octavia
+#
+
+# IP address the controller will listen on for heart beats (IP address value)
+#bind_ip = 127.0.0.1
+
+# Port number the controller will listen on for heart beats (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#bind_port = 5555
+bind_port = 5555
+
+# Number of threads performing amphora failovers. (integer value)
+#failover_threads = 10
+
+# status_update_threads will default to the number of processors on the host
+# status_update_threads =
+
+# key used to validate amphora sending the message (string value)
+#heartbeat_key = <None>
+
+# Interval, in seconds, to wait before failing over an amphora. (integer value)
+#heartbeat_timeout = 60
+
+# Sleep time between health checks in seconds. (integer value)
+#health_check_interval = 3
+
+#  sets the value of the heartbeat recv buffer (integer value)
+#sock_rlimit = 0
+
+# Health/StatsUpdate options are
+#                           *_db
+#                           *_logger
+# health_update_driver = health_db
+# stats_update_driver = stats_db
+
+# List of controller ip and port pairs for the heartbeat receivers. Example
+# 127.0.0.1:5555, 192.168.0.1:5555 (list value)
+#controller_ip_port_list =
+
+# Sleep time between sending heartbeats. (integer value)
+#heartbeat_interval = 10
+
+# Driver for updating amphora health system.
+#health_update_driver=health_db
+
+# Driver for updating amphora statistics.
+#stats_update_driver=stats_db
+
+# Specifies which driver to use for the event_streamer for syncing the octavia
+# and neutron_lbaas dbs. If you don't need to sync the database or are running
+# octavia in stand alone mode use the noop_event_streamer (string value)
+#event_streamer_driver = noop_event_streamer
+
+[house_keeping]
+
+#
+# From octavia
+#
+
+# Spare check interval in seconds (integer value)
+#spare_check_interval = 30
+
+# Number of spare amphorae (integer value)
+#spare_amphora_pool_size = 0
+
+# DB cleanup interval in seconds (integer value)
+#cleanup_interval = 30
+
+# Amphora expiry age in seconds (integer value)
+#amphora_expiry_age = 604800
+amphora_expiry_age = 3600
+
+# Load balancer expiry age in seconds (integer value)
+#load_balancer_expiry_age = 604800
+load_balancer_expiry_age = 3600
+
+# Certificate check interval in seconds (integer value)
+#cert_interval = 3600
+
+# Seconds until certificate expiration (integer value)
+#cert_expiry_buffer = 1209600
+
+# Number of threads performing amphora certificate rotation (integer value)
+#cert_rotate_threads = 10
+
+[keepalived_vrrp]
+
+#
+# From octavia
+#
+
+# Amphora role and priority advertisement interval in seconds. (integer value)
+#vrrp_advert_int = 1
+
+# VRRP health check script run interval in seconds. (integer value)
+#vrrp_check_interval = 5
+
+# Number of successive failures before transition to a fail state. (integer
+# value)
+#vrrp_fail_count = 2
+
+# Number of consecutive successes before transition to a success state.
+# (integer value)
+#vrrp_success_count = 2
+
+# Time in seconds between gratuitous ARP announcements from the MASTER.
+# (integer value)
+#vrrp_garp_refresh_interval = 5
+
+# Number of gratuitous ARP announcements to make on each refresh interval.
+# (integer value)
+#vrrp_garp_refresh_count = 2
+
+[keystone_authtoken]
+
+
+# Complete "public" Identity API endpoint. This endpoint should not be an
+# "admin" endpoint, as it should be accessible by all end users.
+# Unauthenticated clients are redirected to this endpoint to authenticate.
+# Although this endpoint should  ideally be unversioned, client support in the
+# wild varies.  If you're using a versioned v2 endpoint here, then this  should
+# *not* be the same endpoint the service user utilizes  for validating tokens,
+# because normal end users may not be  able to reach that endpoint. (string
+# value)
+# The www_authenticate_uri is the public endpoint and is returned in headers on a 401
+# auth_uri = https://localhost:5000/v3	# www_authenticate_uri
+
+# The auth_url is the admin endpoint actually used for validating tokens
+#auth_url = <None>
+auth_url=http://{{ api.identity.host }}:35357
+
+{%- set _data = api.identity %}
+{%- set auth_type = _data.get('auth_type', 'password') %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/keystonemiddleware/_auth_token.conf" %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/keystoneauth/_type_" + auth_type + ".conf" %}
+
+[matchmaker_redis]
+
+#
+# From oslo.messaging
+#
+
+# DEPRECATED: Host to locate redis. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#host = 127.0.0.1
+
+# DEPRECATED: Use this port to connect to redis host. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#port = 6379
+
+# DEPRECATED: Password for Redis server (optional). (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#password =
+
+# DEPRECATED: List of Redis Sentinel hosts (fault tolerance mode), e.g.,
+# [host:port, host1:port ... ] (list value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#sentinel_hosts =
+
+# Redis replica set name. (string value)
+#sentinel_group_name = oslo-messaging-zeromq
+
+# Time in ms to wait between connection attempts. (integer value)
+#wait_timeout = 2000
+
+# Time in ms to wait before the transaction is killed. (integer value)
+#check_timeout = 20000
+
+# Timeout in ms on blocking socket operations. (integer value)
+#socket_timeout = 10000
+
+[networking]
+# The maximum attempts to retry an action with the networking service.
+# max_retries = 15
+# Seconds to wait before retrying an action with the networking service.
+# retry_interval = 1
+# The maximum time to wait, in seconds, for a port to detach from an amphora
+# port_detach_timeout = 300
+# Allow/disallow specific network object types when creating VIPs.
+# allow_vip_network_id = True
+# allow_vip_subnet_id = True
+# allow_vip_port_id = True
+# List of network_ids that are valid for VIP creation.
+# If this field empty, no validation is performed.
+# valid_vip_networks =
+# List of reserved IP addresses that cannot be used for member addresses
+# The default is the nova metadata service address
+# reserved_ips = ['169.254.169.254']
+
+[neutron]
+
+#
+# From octavia
+#
+
+# The name of the neutron service in the keystone catalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the
+# OpenStack services. (string value)
+#region_name = <None>
+
+# Endpoint interface in identity service to use (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ api.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+[nova]
+
+#
+# From octavia
+#
+
+# The name of the nova service in the keystone catalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the
+# OpenStack services. (string value)
+#region_name = <None>
+
+# Endpoint interface in identity service to use (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ api.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+# Flag to indicate if nova anti-affinity feature is turned on. (boolean value)
+#enable_anti_affinity = false
+
+[oslo_messaging]
+
+#
+# From octavia
+#
+
+# (string value)
+#topic = <None>
+topic = octavia_prov
+
+# topic name for communicating events through a queue (string value)
+#event_stream_topic = neutron_lbaas_event
+
+# Transport URL to use for the neutron-lbaas synchronization event stream
+# when neutron and octavia have separate queues.
+# For Single Host, specify one full transport URL:
+#   event_stream_transport_url = rabbit://<user>:<pass>@127.0.0.1:5672/<vhost>
+# For HA, specify queue nodes in cluster, comma delimited:
+#   event_stream_transport_url = rabbit://<user>:<pass>@server01,<user>:<pass>@server02/<vhost>
+# event_stream_transport_url =
+
+[oslo_messaging_amqp]
+
+{%- set _data = api %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/messaging/_amqp.conf" %}
+
+[oslo_messaging_kafka]
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/messaging/_kafka.conf" %}
+
+
+[oslo_messaging_notifications]
+
+{%- set _data = api.get('notification', {}) %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/messaging/_notifications.conf" %}
+
+[oslo_messaging_rabbit]
+
+{%- set _data = api.message_queue %}
+{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': api.cacert_file}) %}{% endif %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/messaging/_rabbit.conf" %}
+
+[oslo_messaging_zmq]
+
+{%- set _data = api.message_queue %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/messaging/_zmq.conf" %}
+
+[oslo_policy]
+
+{%- set _data = api.get('policy', {}) %}
+{%- include "oslo_templates/files/" ~ api.version ~ "/oslo/_policy.conf" %}
+
+[service_auth]
+
+#
+# From octavia
+#
+
+# Authentication URL (string value)
+#auth_url = <None>
+auth_url=http://{{ api.identity.host }}:35357
+
+# Authentication type to load (string value)
+# Deprecated group/name - [service_auth]/auth_plugin
+#auth_type = <None>
+auth_type = password
+
+# PEM encoded Certificate Authority to use when verifying HTTPs connections.
+# (string value)
+#cafile = <None>
+
+# PEM encoded client certificate cert file (string value)
+#certfile = <None>
+
+# Optional domain ID to use with v3 and v2 parameters. It will be used for both
+# the user and project domain in v3 and ignored in v2 authentication. (string
+# value)
+#default_domain_id = <None>
+
+# Optional domain name to use with v3 API and v2 parameters. It will be used
+# for both the user and project domain in v3 and ignored in v2 authentication.
+# (string value)
+#default_domain_name = <None>
+
+# Domain ID to scope to (string value)
+#domain_id = <None>
+
+# Domain name to scope to (string value)
+#domain_name = <None>
+
+# Verify HTTPS connections. (boolean value)
+#insecure = false
+
+# PEM encoded client certificate key file (string value)
+#keyfile = <None>
+
+# User's password (string value)
+#password = <None>
+password = {{ api.identity.password }}
+
+# Domain ID containing project (string value)
+#project_domain_id = <None>
+project_domain_id = {{ api.identity.get('domain', 'default') }}
+
+# Domain name containing project (string value)
+#project_domain_name = <None>
+
+# Project ID to scope to (string value)
+# Deprecated group/name - [service_auth]/tenant-id
+#project_id = <None>
+
+# Project name to scope to (string value)
+# Deprecated group/name - [service_auth]/tenant-name
+#project_name = <None>
+project_name = {{ api.identity.tenant }}
+
+# Tenant ID (string value)
+#tenant_id = <None>
+
+# Tenant Name (string value)
+#tenant_name = <None>
+
+# Timeout value for http requests (integer value)
+#timeout = <None>
+
+# Trust ID (string value)
+#trust_id = <None>
+
+# User's domain id (string value)
+#user_domain_id = <None>
+user_domain_id = {{ api.identity.get('domain', 'default') }}
+
+# User's domain name (string value)
+#user_domain_name = <None>
+
+# User id (string value)
+#user_id = <None>
+
+# Username (string value)
+# Deprecated group/name - [service_auth]/user-name
+#username = <None>
+username = {{ api.identity.user }}
+
+[task_flow]
+
+#
+# From octavia
+#
+
+# TaskFlow engine to use (string value)
+#engine = serial
+
+# The maximum number of workers (integer value)
+#max_workers = 5
diff --git a/octavia/files/rocky/octavia_manager.conf b/octavia/files/rocky/octavia_manager.conf
new file mode 100644
index 0000000..93f3b40
--- /dev/null
+++ b/octavia/files/rocky/octavia_manager.conf
@@ -0,0 +1,841 @@
+{%- from "octavia/map.jinja" import api with context %}
+{%- from "octavia/map.jinja" import manager with context %}
+[DEFAULT]
+
+#
+# From octavia
+#
+
+# The hostname Octavia is running on (string value)
+#host = example.domain
+
+# Name of the controller plugin to use (string value)
+#octavia_plugins = hot_plug_plugin
+
+
+{%- if manager.logging is defined %}
+{%- set _data = manager.logging %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/_log.conf" %}
+{%- endif %}
+debug = {{ manager.get('debug', 'False') }}
+
+# A URL representing the messaging driver to use and its full configuration.
+# (string value)
+#transport_url = <None>
+{%- if manager.message_queue.members is defined %}
+transport_url = rabbit://{% for member in manager.message_queue.members -%}
+                             {{ manager.message_queue.user }}:{{ manager.message_queue.password }}@{{ member.host }}:{{ member.get('port', 5672) }}
+                             {%- if not loop.last -%},{%- endif -%}
+                         {%- endfor -%}
+                             /{{ manager.message_queue.virtual_host }}
+{%- else %}
+transport_url = rabbit://{{ manager.message_queue.user }}:{{ manager.message_queue.password }}@{{ manager.message_queue.host }}:{{ manager.message_queue.port }}/{{ manager.message_queue.virtual_host }}
+{%- endif %}
+
+
+#
+# From oslo.service.service
+#
+
+# Enable eventlet backdoor.  Acceptable values are 0, <port>, and
+# <start>:<end>, where 0 results in listening on a random tcp port number;
+# <port> results in listening on the specified port number (and not enabling
+# backdoor if that port is in use); and <start>:<end> results in listening on
+# the smallest unused port number within the specified range of port numbers.
+# The chosen port is displayed in the service's log file. (string value)
+#backdoor_port = <None>
+
+# Enable eventlet backdoor, using the provided path as a unix socket that can
+# receive connections. This option is mutually exclusive with 'backdoor_port'
+# in that only one should be provided. If both are provided then the existence
+# of this option overrides the usage of that option. (string value)
+#backdoor_socket = <None>
+
+# Enables or disables logging values of all registered options when starting a
+# service (at DEBUG level). (boolean value)
+#log_options = true
+
+# Specify a timeout after which a gracefully shutdown server will exit. Zero
+# value means endless wait. (integer value)
+#graceful_shutdown_timeout = 60
+
+
+[api_settings]
+
+#
+# From octavia
+#
+
+# The host IP to bind to (IP address value)
+#bind_host = 127.0.0.1
+{%- if pillar.octavia.api is defined %}
+bind_host = {{ api.bind.address }}
+{% endif %}
+
+# The port to bind to (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#bind_port = 9876
+{%- if pillar.octavia.api is defined %}
+bind_port = {{ api.bind.port }}
+{% endif %}
+
+# The auth strategy for API requests. (string value)
+# Allowed values: noauth, keystone
+#auth_strategy = keystone
+
+# The handler that the API communicates with (string value)
+#api_handler = queue_producer
+
+# Allow the usage of the pagination (boolean value)
+#allow_pagination = false
+
+# Allow the usage of the sorting (boolean value)
+#allow_sorting = false
+
+# Allow the usage of the filtering (boolean value)
+#allow_filtering = false
+
+# Allow the usage of the field selection (boolean value)
+#allow_field_selection = false
+
+# The maximum number of items returned in a single response.
+# The string 'infinite' or a negative integer value means 'no limit'
+#pagination_max_limit = 'infinite'
+
+# Base URI for the API for use in pagination links.
+# This will be autodetected from the request if not overridden here.
+#api_base_uri = ''
+
+# Enable/disable exposing API endpoints (boolean value)
+# api_v1_enabled = True
+# api_v2_enabled = True
+
+{%- if pillar.octavia.api is defined %}
+api_v1_enabled = {{ api.get('api_v1_enabled', 'True') }}
+api_v2_enabled = {{ api.get('api_v2_enabled', 'True') }}
+{% endif %}
+
+# Allow users to create TLS Terminated listeners
+#allow_tls_terminated_listeners = True
+
+[amphora_agent]
+
+#
+# From octavia
+#
+
+# The ca which signed the client certificates (string value)
+#agent_server_ca = /etc/octavia/certs/client_ca.pem
+
+# The server certificate for the agent.py server to use (string value)
+#agent_server_cert = /etc/octavia/certs/server.pem
+
+# The directory where new network interfaces are located (string value)
+#agent_server_network_dir = <None>
+
+# The file where the network interfaces are located. Specifying this will
+# override any value set for agent_server_network_dir. (string value)
+#agent_server_network_file = <None>
+
+# The time in seconds to allow a request from the controller to run before
+# terminating the socket. (integer value)
+#agent_request_read_timeout = 120
+
+# The amphora ID. (string value)
+#amphora_id = <None>
+
+[certificates]
+
+#
+# From octavia
+#
+
+# Absolute path to the CA Certificate for signing. Defaults
+# to env[OS_OCTAVIA_TLS_CA_CERT].
+# ca_certificate = /etc/ssl/certs/ssl-cert-snakeoil.pem
+ca_certificate = {{ manager.certificates.ca_certificate }}
+
+# Absolute path to the Private Key for signing. Defaults
+# to env[OS_OCTAVIA_TLS_CA_KEY].
+# ca_private_key = /etc/ssl/private/ssl-cert-snakeoil.key
+ca_private_key = {{ manager.certificates.ca_private_key }}
+
+# Passphrase for the Private Key. Defaults
+# to env[OS_OCTAVIA_CA_KEY_PASS] or None.
+# ca_private_key_passphrase =
+
+# Certificate signing digest. Defaults
+# to env[OS_OCTAVIA_CA_SIGNING_DIGEST] or "sha256".
+# signing_digest = sha256
+
+# Absolute path to the certificate storage directory.
+# Defaults to env[OS_OCTAVIA_TLS_STORAGE].
+# storage_path = /var/lib/octavia/certificates/
+
+# Name of the cert manager to use (string value)
+#cert_manager = barbican_cert_manager
+
+# Name of the cert generator to use (string value)
+#cert_generator = local_cert_generator
+
+# Name of the Barbican authentication method to use (string value)
+#barbican_auth = barbican_acl_auth
+
+# The name of the certificate service in the keystonecatalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the barbican
+# service. (string value)
+#region_name = <None>
+
+# The endpoint_type to be used for barbican service. (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ manager.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+[controller_worker]
+
+#
+# From octavia
+#
+
+# Retry attempts to wait for Amphora to become active (integer value)
+#amp_active_retries = 10
+amp_active_retries = 100
+
+# Seconds to wait between checks on whether an Amphora has become active
+# (integer value)
+#amp_active_wait_sec = 10
+amp_active_wait_sec = 2
+
+# Nova instance flavor id for the Amphora (string value)
+#amp_flavor_id =
+amp_flavor_id = {{ manager.controller_worker.amp_flavor_id }}
+
+# Glance image tag for the Amphora image to boot. Use this option to be able to
+# update the image without reconfiguring Octavia. Ignored if amp_image_id is
+# defined. (string value)
+#amp_image_tag =
+amp_image_tag = {{ manager.controller_worker.amp_image_tag }}
+
+# Restrict glance image selection to a specific owner ID.  This is a
+# recommended security setting. (string value)
+#amp_image_owner_id =
+amp_image_owner_id = {{ amp_image_owner_id }}
+
+# SSH key name used to boot the Amphora (string value)
+#amp_ssh_key_name =
+amp_ssh_key_name = {{ manager.controller_worker.amp_ssh_key_name }}
+
+# Determines whether or not to allow access to the Amphorae (boolean value)
+#amp_ssh_access_allowed = true
+
+# List of networks to attach to the Amphorae. All networks defined in the list
+# will be attached to each amphora. (list value)
+#amp_boot_network_list =
+amp_boot_network_list = {{ amp_boot_network_list }}
+
+# List of security groups to attach to the Amphora. (list value)
+#amp_secgroup_list =
+amp_secgroup_list = {{ amp_secgroup_list }}
+
+# Client CA for the amphora agent to use (string value)
+#client_ca = /etc/octavia/certs/ca_01.pem
+client_ca = {{ manager.haproxy_amphora.server_ca }}
+
+# Name of the amphora driver to use (string value)
+#amphora_driver = amphora_noop_driver
+amphora_driver = amphora_haproxy_rest_driver
+
+# Name of the compute driver to use (string value)
+#compute_driver = compute_noop_driver
+compute_driver = compute_nova_driver
+
+# Name of the network driver to use (string value)
+#network_driver = network_noop_driver
+network_driver = allowed_address_pairs_driver
+
+# Distributor driver options are distributor_noop_driver
+#                                single_VIP_amphora
+#
+# distributor_driver = distributor_noop_driver
+
+# Load balancer topology configuration. SINGLE - One amphora per load balancer.
+# ACTIVE_STANDBY - Two amphora per load balancer. (string value)
+# Allowed values: ACTIVE_STANDBY, SINGLE
+#loadbalancer_topology = SINGLE
+loadbalancer_topology = {{ manager.controller_worker.loadbalancer_topology }}
+
+# If True, build cloud-init user-data that is passed to the config drive on
+# Amphora boot instead of personality files. If False, utilize personality
+# files. (boolean value)
+#user_data_config_drive = false
+
+[cors]
+{%- if pillar.octavia.api is defined %}
+{%- if api.cors is defined %}
+{%- set _data = api.cors %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/_cors.conf" %}
+{%- endif %}
+{%- endif %}
+
+[database]
+
+{%- set _data = manager.database %}
+{%- if _data.ssl is defined and 'cacert_file' not in _data.ssl.keys() %}{% do _data['ssl'].update({'cacert_file': api.cacert_file}) %}{% endif %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/_database.conf" %}
+
+[glance]
+
+#
+# From octavia
+#
+
+# The name of the glance service in the keystone catalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the
+# OpenStack services. (string value)
+#region_name = <None>
+
+# Endpoint interface in identity service to use (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ manager.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+[haproxy_amphora]
+
+#
+# From octavia
+#
+
+# Base directory for amphora files. (string value)
+#base_path = /var/lib/octavia
+base_path = /var/lib/octavia
+
+# Base directory for cert storage. (string value)
+#base_cert_dir = /var/lib/octavia/certs
+base_cert_dir = /var/lib/octavia/certs
+
+# Custom haproxy template. (string value)
+#haproxy_template = <None>
+# connection_logging = True
+
+# Retry threshold for connecting to amphorae. (integer value)
+#connection_max_retries = 300
+connection_max_retries = 1500
+
+# Retry timeout between connection attempts in seconds. (integer value)
+#connection_retry_interval = 5
+connection_retry_interval = 1
+
+# Number of amphorae that could be built per controller worker, simultaneously.
+#build_rate_limit=-1
+
+# Retry threshold for waiting for a build slot for an amphorae.
+#build_active_retries=300
+
+# Retry timeout between build attempts in seconds.
+#build_retry_interval=5
+
+# The user group for haproxy to run under inside the amphora. (string value)
+#user_group = nogroup
+
+# Size of the HAProxy stick table. Accepts k, m, g suffixes.  Example: 10k
+# (string value)
+#haproxy_stick_size = 10k
+
+# The host IP to bind to (IP address value)
+#bind_host = ::
+
+# The port to bind to (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#bind_port = 9443
+
+# Network interface through which to reach amphora, only required if using IPv6
+# link local addresses. (string value)
+#lb_network_interface = o-hm0
+
+# The full path to haproxy (string value)
+#haproxy_cmd = /usr/sbin/haproxy
+
+# The respawn count for haproxy's upstart script (integer value)
+#respawn_count = 2
+
+# The respawn interval for haproxy's upstart script (integer value)
+#respawn_interval = 2
+
+# The time in seconds to wait for a REST API to connect. (floating point value)
+#rest_request_conn_timeout = 10
+rest_request_conn_timeout = 10
+
+# The time in seconds to wait for a REST API response. (floating point value)
+#rest_request_read_timeout = 60
+rest_request_read_timeout = 120
+
+# These "active" timeouts are used once the amphora should already
+# be fully up and active. These values are lower than the other values to
+# facilitate "fail fast" scenarios like failovers
+# active_connection_max_retries = 15
+# active_connection_rety_interval = 2
+
+# The client certificate to talk to the agent (string value)
+#client_cert = /etc/octavia/certs/client.pem
+client_cert = {{ manager.haproxy_amphora.client_cert_all }}
+
+# The ca which signed the server certificates (string value)
+#server_ca = /etc/octavia/certs/server_ca.pem
+server_ca = {{ manager.haproxy_amphora.server_ca }}
+
+
+[health_manager]
+
+#
+# From octavia
+#
+
+# IP address the controller will listen on for heart beats (IP address value)
+#bind_ip = 127.0.0.1
+bind_ip = {{ manager.health_manager.bind_ip }}
+
+# Port number the controller will listen on for heart beats (port value)
+# Minimum value: 0
+# Maximum value: 65535
+#bind_port = 5555
+bind_port = {{ manager.health_manager.get('bind_port', 5555) }}
+
+# Number of threads performing amphora failovers. (integer value)
+#failover_threads = 10
+
+# status_update_threads will default to the number of processors on the host
+# status_update_threads =
+
+# key used to validate amphora sending the message (string value)
+#heartbeat_key = <None>
+heartbeat_key = {{ manager.health_manager.heartbeat_key }}
+
+# Interval, in seconds, to wait before failing over an amphora. (integer value)
+#heartbeat_timeout = 60
+
+# Sleep time between health checks in seconds. (integer value)
+#health_check_interval = 3
+
+#  sets the value of the heartbeat recv buffer (integer value)
+#sock_rlimit = 0
+
+# Health/StatsUpdate options are
+#                           *_db
+#                           *_logger
+# health_update_driver = health_db
+# stats_update_driver = stats_db
+
+# List of controller ip and port pairs for the heartbeat receivers. Example
+# 127.0.0.1:5555, 192.168.0.1:5555 (list value)
+#controller_ip_port_list =
+{%- if manager.health_manager.controller_ip_port_list is defined %}
+controller_ip_port_list = {{ manager.health_manager.controller_ip_port_list }}
+{%- else %}
+controller_ip_port_list = {{ manager.health_manager.bind_ip }}:{{ manager.health_manager.get('bind_port', 5555) }}
+{%- endif %}
+
+# Sleep time between sending heartbeats. (integer value)
+#heartbeat_interval = 10
+
+# Specifies which driver to use for the event_streamer for syncing the octavia
+# and neutron_lbaas dbs. If you don't need to sync the database or are running
+# octavia in stand alone mode use the noop_event_streamer (string value)
+#event_streamer_driver = noop_event_streamer
+# Enable provisioning status sync with neutron db
+# sync_provisioning_status = False
+
+[house_keeping]
+
+#
+# From octavia
+#
+
+# Spare check interval in seconds (integer value)
+#spare_check_interval = 30
+
+# Number of spare amphorae (integer value)
+#spare_amphora_pool_size = 0
+spare_amphora_pool_size = {{ manager.house_keeping.spare_amphora_pool_size }}
+
+# DB cleanup interval in seconds (integer value)
+#cleanup_interval = 30
+
+# Amphora expiry age in seconds (integer value)
+#amphora_expiry_age = 604800
+amphora_expiry_age = 3600
+
+# Load balancer expiry age in seconds (integer value)
+#load_balancer_expiry_age = 604800
+load_balancer_expiry_age = 3600
+
+# Certificate check interval in seconds (integer value)
+#cert_interval = 3600
+
+# Seconds until certificate expiration (integer value)
+#cert_expiry_buffer = 1209600
+
+# Number of threads performing amphora certificate rotation (integer value)
+#cert_rotate_threads = 10
+
+[keepalived_vrrp]
+
+#
+# From octavia
+#
+
+# Amphora role and priority advertisement interval in seconds. (integer value)
+#vrrp_advert_int = 1
+
+# VRRP check script run interval in seconds. (integer value)
+#vrrp_check_interval = 5
+
+# Number of successive failures before transition to a fail state. (integer
+# value)
+#vrrp_fail_count = 2
+
+# Number of consecutive successes before transition to a success state.
+# (integer value)
+#vrrp_success_count = 2
+
+# Time in seconds between gratuitous ARP announcements from the MASTER.
+# (integer value)
+#vrrp_garp_refresh_interval = 5
+
+# Number of gratuitous ARP announcements to make on each refresh interval.
+# (integer value)
+#vrrp_garp_refresh_count = 2
+
+[keystone_authtoken]
+
+#
+# From keystonemiddleware.auth_token
+#
+
+# Complete "public" Identity API endpoint. This endpoint should not be an
+# "admin" endpoint, as it should be accessible by all end users.
+# Unauthenticated clients are redirected to this endpoint to authenticate.
+# Although this endpoint should  ideally be unversioned, client support in the
+# wild varies.  If you're using a versioned v2 endpoint here, then this  should
+# *not* be the same endpoint the service user utilizes  for validating tokens,
+# because normal end users may not be  able to reach that endpoint. (string
+# value)
+# The www_authenticate_uri is the public endpoint and is returned in headers on a 401
+# auth_uri = https://localhost:5000/v3	# www_authenticate_uri
+auth_uri=http://{{ manager.identity.host }}:5000/v3
+
+# The auth_url is the admin endpoint actually used for validating tokens
+#auth_url = <None>
+auth_url=http://{{ manager.identity.host }}:35357
+
+{%- set _data = manager.identity %}
+{%- set auth_type = _data.get('auth_type', 'password') %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/keystonemiddleware/_auth_token.conf" %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/keystoneauth/_type_" + auth_type + ".conf" %}
+
+
+[matchmaker_redis]
+
+#
+# From oslo.messaging
+#
+
+# DEPRECATED: Host to locate redis. (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#host = 127.0.0.1
+
+# DEPRECATED: Use this port to connect to redis host. (port value)
+# Minimum value: 0
+# Maximum value: 65535
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#port = 6379
+
+# DEPRECATED: Password for Redis server (optional). (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#password =
+
+# DEPRECATED: List of Redis Sentinel hosts (fault tolerance mode), e.g.,
+# [host:port, host1:port ... ] (list value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by [DEFAULT]/transport_url
+#sentinel_hosts =
+
+# Redis replica set name. (string value)
+#sentinel_group_name = oslo-messaging-zeromq
+
+# Time in ms to wait between connection attempts. (integer value)
+#wait_timeout = 2000
+
+# Time in ms to wait before the transaction is killed. (integer value)
+#check_timeout = 20000
+
+# Timeout in ms on blocking socket operations. (integer value)
+#socket_timeout = 10000
+
+[networking]
+
+#
+# From octavia
+#
+
+# The maximum attempts to retry an action with the networking service. (integer
+# value)
+#max_retries = 15
+
+# Seconds to wait before retrying an action with the networking service.
+# (integer value)
+#retry_interval = 1
+
+# Seconds to wait for a port to detach from an amphora. (integer value)
+#port_detach_timeout = 300
+
+# Can users supply a network_id for their VIP ? (boolean value)
+#allow_vip_network_id = True
+
+# Can users supply a subnet_id for their VIP ? (boolean value)
+#allow_vip_port_id = True
+
+# List of network_ids that are valid for VIP creation.
+# If this field is empty, no validation is performed.
+#valid_vip_networks = <None>
+
+[neutron]
+
+#
+# From octavia
+#
+
+# The name of the neutron service in the keystone catalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the
+# OpenStack services. (string value)
+#region_name = <None>
+
+# Endpoint interface in identity service to use (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ manager.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+[nova]
+
+#
+# From octavia
+#
+
+# The name of the nova service in the keystone catalog (string value)
+#service_name = <None>
+
+# A new endpoint to override the endpoint in the keystone catalog. (string
+# value)
+#endpoint = <None>
+
+# Region in Identity service catalog to use for communication with the
+# OpenStack services. (string value)
+#region_name = <None>
+
+# Endpoint interface in identity service to use (string value)
+#endpoint_type = publicURL
+endpoint_type = {{ manager.identity.get('endpoint_type', 'public') }}
+
+# CA certificates file path (string value)
+#ca_certificates_file = <None>
+
+# Disable certificate validation on SSL connections  (boolean value)
+#insecure = false
+
+# Flag to indicate if nova anti-affinity feature is turned on. (boolean value)
+#enable_anti_affinity = false
+
+[oslo_messaging]
+
+#
+# From octavia
+#
+
+# (string value)
+#topic = <None>
+topic = octavia_prov
+
+# topic name for communicating events through a queue (string value)
+#event_stream_topic = neutron_lbaas_event
+
+# Transport URL to use for the neutron-lbaas synchronization event stream
+# when neutron and octavia have separate queues.
+# For Single Host, specify one full transport URL:
+#   event_stream_transport_url = rabbit://<user>:<pass>@127.0.0.1:5672/<vhost>
+# For HA, specify queue nodes in cluster, comma delimited:
+#   event_stream_transport_url = rabbit://<user>:<pass>@server01,<user>:<pass>@server02/<vhost>
+# event_stream_transport_url =
+
+[oslo_messaging_amqp]
+
+{%- set _data = manager %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/messaging/_amqp.conf" %}
+
+[oslo_messaging_kafka]
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/messaging/_kafka.conf" %}
+
+
+[oslo_messaging_notifications]
+
+{%- set _data = manager.get('notification', {}) %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/messaging/_notifications.conf" %}
+
+[oslo_messaging_rabbit]
+
+{%- set _data = manager.message_queue %}
+{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': manager.cacert_file}) %}{% endif %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/messaging/_rabbit.conf" %}
+
+[oslo_messaging_zmq]
+
+{%- set _data = manager.message_queue %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/messaging/_zmq.conf" %}
+
+[oslo_policy]
+
+{%- set _data = manager.get('policy', {}) %}
+{%- include "oslo_templates/files/" ~ manager.version ~ "/oslo/_policy.conf" %}
+
+[service_auth]
+
+#
+# From octavia
+#
+
+# Authentication URL (string value)
+#auth_url = <None>
+auth_url=http://{{ manager.identity.host }}:35357
+
+# Authentication type to load (string value)
+# Deprecated group/name - [service_auth]/auth_plugin
+#auth_type = <None>
+auth_type = password
+
+# PEM encoded Certificate Authority to use when verifying HTTPs connections.
+# (string value)
+#cafile = <None>
+
+# PEM encoded client certificate cert file (string value)
+#certfile = <None>
+
+# Optional domain ID to use with v3 and v2 parameters. It will be used for both
+# the user and project domain in v3 and ignored in v2 authentication. (string
+# value)
+#default_domain_id = <None>
+
+# Optional domain name to use with v3 API and v2 parameters. It will be used
+# for both the user and project domain in v3 and ignored in v2 authentication.
+# (string value)
+#default_domain_name = <None>
+
+# Domain ID to scope to (string value)
+#domain_id = <None>
+
+# Domain name to scope to (string value)
+#domain_name = <None>
+
+# Verify HTTPS connections. (boolean value)
+#insecure = false
+
+# PEM encoded client certificate key file (string value)
+#keyfile = <None>
+
+# User's password (string value)
+#password = <None>
+password = {{ manager.identity.password }}
+
+# Domain ID containing project (string value)
+#project_domain_id = <None>
+project_domain_id = {{ manager.identity.get('domain', 'default') }}
+
+# Domain name containing project (string value)
+#project_domain_name = <None>
+
+# Project ID to scope to (string value)
+# Deprecated group/name - [service_auth]/tenant-id
+#project_id = <None>
+
+# Project name to scope to (string value)
+# Deprecated group/name - [service_auth]/tenant-name
+#project_name = <None>
+project_name = {{ manager.identity.tenant }}
+
+# Tenant ID (string value)
+#tenant_id = <None>
+
+# Tenant Name (string value)
+#tenant_name = <None>
+
+# Timeout value for http requests (integer value)
+#timeout = <None>
+
+# Trust ID (string value)
+#trust_id = <None>
+
+# User's domain id (string value)
+#user_domain_id = <None>
+user_domain_id = {{ manager.identity.get('domain', 'default') }}
+
+# User's domain name (string value)
+#user_domain_name = <None>
+
+# User id (string value)
+#user_id = <None>
+
+# Username (string value)
+# Deprecated group/name - [service_auth]/user-name
+#username = <None>
+username = {{ manager.identity.user }}
+
+[task_flow]
+
+#
+# From octavia
+#
+
+# TaskFlow engine to use (string value)
+#engine = serial
+
+# The maximum number of workers (integer value)
+#max_workers = 5
diff --git a/octavia/manager.sls b/octavia/manager.sls
index 8676f58..415dc25 100644
--- a/octavia/manager.sls
+++ b/octavia/manager.sls
@@ -34,14 +34,15 @@
     amp_secgroup_list: {{ (secgroup_mine_data|first)['lb-mgmt-sec-grp']['id'] }}
 {%- endif %}
 
-/etc/octavia/certificates/openssl.cnf:
-  file.managed:
-  - source: salt://octavia/files/{{ manager.version }}/certificates/openssl.cnf
-  - require:
-    - pkg: octavia_manager_packages
-
 {% set dhclient_conf_path = '/etc/octavia/dhcp/dhclient.conf' %}
 
+/etc/octavia/dhcp/:
+  file.directory:
+    - name: /etc/octavia/dhcp/
+    - user: octavia
+    - group: octavia
+    - makedirs: true
+
 {{ dhclient_conf_path }}:
   file.managed:
   - source: salt://octavia/files/{{ manager.version }}/dhcp/dhclient.conf
diff --git a/tests/pillar/repo_openstack_pike.sls b/tests/pillar/repo_openstack_pike.sls
index 43f930e..03d0184 100644
--- a/tests/pillar/repo_openstack_pike.sls
+++ b/tests/pillar/repo_openstack_pike.sls
@@ -3,6 +3,6 @@
     enabled: true
     repo:
       mirantis_openstack:
-        source: "deb https://mirror.mirantis.com/nightly/openstack-pike/xenial xenial main"
+        source: "deb http://mirror.mirantis.com/nightly/openstack-pike/xenial xenial main"
         architectures: amd64
-        key_url: "https://mirror.mirantis.com/nightly/openstack-pike/xenial/archive-pike.key"
+        key_url: "http://mirror.mirantis.com/nightly/openstack-pike/xenial/archive-pike.key"
diff --git a/tests/pillar/repo_openstack_queens.sls b/tests/pillar/repo_openstack_queens.sls
index c140618..7b96d6e 100644
--- a/tests/pillar/repo_openstack_queens.sls
+++ b/tests/pillar/repo_openstack_queens.sls
@@ -3,6 +3,6 @@
     enabled: true
     repo:
       mirantis_openstack:
-        source: "deb https://mirror.mirantis.com/nightly/openstack-queens/xenial/ xenial main"
+        source: "deb http://mirror.mirantis.com/nightly/openstack-queens/xenial/ xenial main"
         architectures: amd64
-        key_url: "https://mirror.mirantis.com/nightly/openstack-queens/xenial/archive-queens.key"
+        key_url: "http://mirror.mirantis.com/nightly/openstack-queens/xenial/archive-queens.key"
diff --git a/tests/pillar/repo_openstack_rocky.sls b/tests/pillar/repo_openstack_rocky.sls
new file mode 100644
index 0000000..37ddce1
--- /dev/null
+++ b/tests/pillar/repo_openstack_rocky.sls
@@ -0,0 +1,8 @@
+linux:
+  system:
+    enabled: true
+    repo:
+      mirantis_openstack:
+        source: "deb http://mirror.mirantis.com/nightly/openstack-rocky/xenial/ xenial main"
+        architectures: amd64
+        key_url: "http://mirror.mirantis.com/nightly/openstack-rocky/xenial/archive-rocky.key"