Merge "Add Salt 2018.3 tests"
diff --git a/designate/files/queens/api-paste.ini b/designate/files/queens/api-paste.ini
new file mode 100644
index 0000000..41e840d
--- /dev/null
+++ b/designate/files/queens/api-paste.ini
@@ -0,0 +1,61 @@
+[composite:osapi_dns]
+use = egg:Paste#urlmap
+/: osapi_dns_versions
+/v2: osapi_dns_v2
+/admin: osapi_dns_admin
+
+[composite:osapi_dns_versions]
+use = call:designate.api.middleware:auth_pipeline_factory
+noauth = http_proxy_to_wsgi cors maintenance faultwrapper osapi_dns_app_versions
+keystone = http_proxy_to_wsgi cors maintenance faultwrapper osapi_dns_app_versions
+
+[app:osapi_dns_app_versions]
+paste.app_factory = designate.api.versions:factory
+
+
+[composite:osapi_dns_v2]
+use = call:designate.api.middleware:auth_pipeline_factory
+noauth = http_proxy_to_wsgi cors request_id faultwrapper validation_API_v2 noauthcontext maintenance normalizeuri osapi_dns_app_v2
+keystone = http_proxy_to_wsgi cors request_id faultwrapper validation_API_v2 authtoken keystonecontext maintenance normalizeuri osapi_dns_app_v2
+
+[app:osapi_dns_app_v2]
+paste.app_factory = designate.api.v2:factory
+
+[composite:osapi_dns_admin]
+use = call:designate.api.middleware:auth_pipeline_factory
+noauth = http_proxy_to_wsgi cors request_id faultwrapper noauthcontext maintenance normalizeuri osapi_dns_app_admin
+keystone = http_proxy_to_wsgi cors request_id faultwrapper authtoken keystonecontext maintenance normalizeuri osapi_dns_app_admin
+
+[app:osapi_dns_app_admin]
+paste.app_factory = designate.api.admin:factory
+
+[filter:cors]
+paste.filter_factory = oslo_middleware.cors:filter_factory
+oslo_config_project = designate
+
+[filter:request_id]
+paste.filter_factory = oslo_middleware:RequestId.factory
+
+[filter:http_proxy_to_wsgi]
+paste.filter_factory = oslo_middleware:HTTPProxyToWSGI.factory
+
+[filter:noauthcontext]
+paste.filter_factory = designate.api.middleware:NoAuthContextMiddleware.factory
+
+[filter:authtoken]
+paste.filter_factory = keystonemiddleware.auth_token:filter_factory
+
+[filter:keystonecontext]
+paste.filter_factory = designate.api.middleware:KeystoneContextMiddleware.factory
+
+[filter:maintenance]
+paste.filter_factory = designate.api.middleware:MaintenanceMiddleware.factory
+
+[filter:normalizeuri]
+paste.filter_factory = designate.api.middleware:NormalizeURIMiddleware.factory
+
+[filter:faultwrapper]
+paste.filter_factory = designate.api.middleware:FaultWrapperMiddleware.factory
+
+[filter:validation_API_v2]
+paste.filter_factory = designate.api.middleware:APIv2ValidationErrorMiddleware.factory
diff --git a/designate/files/queens/designate.conf.Debian b/designate/files/queens/designate.conf.Debian
new file mode 100644
index 0000000..af0342e
--- /dev/null
+++ b/designate/files/queens/designate.conf.Debian
@@ -0,0 +1,1079 @@
+{%- from "designate/map.jinja" import server, pool_manager with context %}
+
+[DEFAULT]
+
+#
+# From designate.opts
+#
+
+# Name of this node (string value)
+#host = current_hostname
+
+# Directory where the designate python module is installed (string value)
+#pybasedir = <Path>
+
+# Top-level directory for maintaining designate's state (string value)
+#state_path = /var/lib/designate
+
+# Central Topic (string value)
+#central_topic = central
+
+# mDNS Topic (string value)
+#mdns_topic = mdns
+
+# Pool Manager Topic (string value)
+#pool_manager_topic = pool_manager
+
+# Worker Topic (string value)
+#worker_topic = worker
+
+# TTL Value (integer value)
+#default_ttl = 3600
+
+# SOA refresh-min value (integer value)
+# Deprecated group/name - [DEFAULT]/default_soa_refresh
+#default_soa_refresh_min = 3500
+
+# SOA max value (integer value)
+#default_soa_refresh_max = 3600
+
+# SOA retry (integer value)
+#default_soa_retry = 600
+
+# SOA expire (integer value)
+#default_soa_expire = 86400
+
+# SOA minimum value (integer value)
+#default_soa_minimum = 3600
+
+# Supported record types (list value)
+#supported_record_type = A,AAAA,CNAME,MX,SRV,TXT,SPF,NS,PTR,SSHFP,SOA
+
+# Which API to use. (string value)
+#network_api = neutron
+
+# Send notifications if there's a failure in the API. (boolean value)
+#notify_api_faults = false
+
+# The notification plugin to use (string value)
+#notification_plugin = default
+
+# Quota driver to use (string value)
+#quota_driver = storage
+
+# Number of zones allowed per tenant (integer value)
+#quota_zones = 10
+{%- if server.get('quota', {}).zones is defined %}
+quota_zones = {{ server.quota.zones }}
+{%- endif %}
+
+# Number of recordsets allowed per zone (integer value)
+#quota_zone_recordsets = 500
+
+# Number of records allowed per zone (integer value)
+#quota_zone_records = 500
+
+# Number of records allowed per recordset (integer value)
+#quota_recordset_records = 20
+
+# Number of recordsets allowed in a zone export (integer value)
+#quota_api_export_size = 1000
+
+# Timeout in seconds for XFR's. (integer value)
+#xfr_timeout = 10
+
+# designate-rootwrap configuration (string value)
+#root_helper = sudo designate-rootwrap /etc/designate/rootwrap.conf
+
+# Number of backlog requests to configure the socket with (integer value)
+#backlog = 4096
+
+# Sets the value of TCP_KEEPIDLE in seconds for each server socket. Not
+# supported on OS X. (integer value)
+#tcp_keepidle = 600
+
+{%- if server.logging is defined %}
+{%- set _data = server.logging %}
+{%- include "oslo_templates/files/queens/oslo/_log.conf" %}
+{%- endif %}
+
+{%- set _data = server.message_queue %}
+{%- include "oslo_templates/files/queens/oslo/messaging/_default.conf" %}
+
+#
+# From oslo.service.periodic_task
+#
+
+# Some periodic tasks can be run in a separate process. Should we run them here?
+# (boolean value)
+#run_external_periodic_tasks = true
+
+#
+# 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
+
+
+[backend:agent:bind9]
+
+#
+# From designate.agent
+#
+
+# RNDC Host (string value)
+#rndc_host = 127.0.0.1
+
+# RNDC Port (integer value)
+#rndc_port = 953
+
+# RNDC Config File (string value)
+#rndc_config_file = <None>
+
+# RNDC Key File (string value)
+#rndc_key_file = <None>
+
+# Path where zone files are stored (string value)
+#zone_file_path = $state_path/zones
+
+# Host to query when finding zones (string value)
+#query_destination = 127.0.0.1
+
+
+[backend:agent:denominator]
+
+#
+# From designate.agent
+#
+
+# Name of the affected provider (string value)
+#name = fake
+
+# Path to Denominator configuration file (string value)
+#config_file = /etc/denominator.conf
+
+
+[backend:agent:djbdns]
+
+#
+# From designate.agent
+#
+
+# tcpclient executable path or rootwrap command name (string value)
+#tcpclient_cmd_name = tcpclient
+
+# axfr-get executable path or rootwrap command name (string value)
+#axfr_get_cmd_name = axfr-get
+
+# tinydns-data executable path or rootwrap command name (string value)
+#tinydns_data_cmd_name = tinydns-data
+
+# TinyDNS data directory (string value)
+#tinydns_datadir = /var/lib/djbdns
+
+# Host to query when finding zones (string value)
+#query_destination = 127.0.0.1
+
+
+[backend:agent:gdnsd]
+
+#
+# From designate.agent
+#
+
+# gdnsd executable path or rootwrap command name (string value)
+#gdnsd_cmd_name = gdnsd
+
+# gdnsd configuration directory path (string value)
+#confdir_path = /etc/gdnsd
+
+# Host to query when finding zones (string value)
+#query_destination = 127.0.0.1
+
+
+[backend:agent:knot2]
+
+#
+# From designate.agent
+#
+
+# knotc executable path or rootwrap command name (string value)
+#knotc_cmd_name = knotc
+
+# Host to query when finding zones (string value)
+#query_destination = 127.0.0.1
+
+
+[coordination]
+
+#
+# From designate.opts
+#
+
+# The backend URL to use for distributed coordination. If unset services that
+# need coordination will function as a standalone service. This is a `tooz` url
+# - see https://docs.openstack.org/tooz/latest/user/compatibility.html (string
+# value)
+#backend_url = <None>
+
+# Number of seconds between heartbeats for distributed coordination. (floating
+# point value)
+#heartbeat_interval = 1.0
+
+# Number of seconds between checks to see if group membership has changed
+# (floating point value)
+#run_watchers_interval = 10.0
+
+
+[cors]
+{%- if server.cors is defined %}
+{%- set _data = server.cors %}
+{%- include "oslo_templates/files/queens/oslo/_cors.conf" %}
+{%- endif %}
+
+
+[handler:neutron_floatingip]
+
+#
+# From designate.opts
+#
+
+# notification any events from neutron (list value)
+#notification_topics = notifications
+
+# control-exchange for neutron notification (string value)
+#control_exchange = neutron
+
+# Zone ID with each notification (string value)
+#zone_id = <None>
+zone_id = {{ server.domain_id }}
+
+# IPv4 format (multi valued)
+#formatv4 =
+formatv4 = '%(hostname)s.%(zone)s'
+
+# DEPRECATED: format which replaced by formatv4/formatv6 (multi valued)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by 'formatv4/formatv6'
+#format =
+
+# IPv6 format (multi valued)
+#formatv6 =
+formatv6 = '%(hostname)s.%(zone)s'
+
+
+[handler:nova_fixed]
+
+#
+# From designate.opts
+#
+
+# notification any events from nova (list value)
+#notification_topics = notifications
+
+# control-exchange for nova notification (string value)
+#control_exchange = nova
+
+# Zone ID with each notification (string value)
+#zone_id = <None>
+zone_id = {{ server.domain_id }}
+
+# IPv4 format (multi valued)
+#formatv4 =
+
+# DEPRECATED: format which replaced by formatv4/formatv6 (multi valued)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by 'formatv4/formatv6'
+#format =
+formatv4 = '%(hostname)s.%(zone)s'
+
+# IPv6 format (multi valued)
+#formatv6 =
+formatv6 = '%(hostname)s.%(zone)s'
+
+
+[healthcheck]
+{%- if server.healthcheck is defined %}
+{%- set _data = server.healthcheck %}
+{%- include "oslo_templates/files/queens/oslo/_healthcheck.conf" %}
+{%- endif %}
+
+[heartbeat_emitter]
+
+#
+# From designate.opts
+#
+
+# Number of seconds between heartbeats for reporting state (floating point
+# value)
+#heartbeat_interval = 5.0
+
+# Emitter to use (string value)
+#emitter_type = rpc
+
+
+[keystone_authtoken]
+{%- set _data = server.identity %}
+{%- set auth_type = _data.get('auth_type', 'password') %}
+{%- include "oslo_templates/files/queens/keystonemiddleware/_auth_token.conf" %}
+{%- include "oslo_templates/files/queens/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
+
+
+[monasca:statsd]
+
+#
+# From designate.opts
+#
+
+# enable (boolean value)
+#enabled = false
+
+# UDP port (integer value)
+#port = 8125
+
+# hostname (string value)
+#hostname = 127.0.0.1
+
+
+[network_api:neutron]
+
+#
+# From designate.opts
+#
+
+# URL to use if None in the ServiceCatalog that is passed by the request
+# context. Format: <region>|<url> (list value)
+#endpoints = <None>
+
+# Endpoint type to use (string value)
+#endpoint_type = publicURL
+
+# timeout value for connecting to neutron in seconds (integer value)
+#timeout = 30
+
+# username for connecting to neutron in admin context (string value)
+#admin_username = <None>
+
+# password for connecting to neutron in admin context (string value)
+#admin_password = <None>
+
+# tenant name for connecting to neutron in admin context (string value)
+#admin_tenant_name = <None>
+
+# auth url for connecting to neutron in admin context (string value)
+#auth_url = <None>
+
+# if set, ignore any SSL validation issues (boolean value)
+#insecure = false
+
+# auth strategy for connecting to neutron in admin context (string value)
+#auth_strategy = keystone
+
+# Location of ca certificates file to use for neutron client requests. (string
+# value)
+#ca_certificates_file = <None>
+
+
+[oslo_concurrency]
+{%- set _data = server.get('concurrency', {}) %}
+{%- include "oslo_templates/files/queens/oslo/_concurrency.conf" %}
+
+
+[oslo_messaging_notifications]
+{%- set _data = server.get('notification', {}) %}
+{%- include "oslo_templates/files/queens/oslo/messaging/_notifications.conf" %}
+
+
+{%- if server.message_queue is defined %}
+{%- set _data = server.message_queue %}
+{%- if _data.engine == 'rabbitmq' %}
+    {%- set messaging_engine = 'rabbit' %}
+{%- else %}
+    {%- set messaging_engine = _data.engine %}
+{%- endif %}
+[oslo_messaging_{{ messaging_engine }}]
+{%- include "oslo_templates/files/queens/oslo/messaging/_" + messaging_engine + ".conf" %}
+{%- endif %}
+
+
+[oslo_middleware]
+{%- set _data = server %}
+{%- include "oslo_templates/files/queens/oslo/_middleware.conf" %}
+
+[oslo_policy]
+{%- include "oslo_templates/files/queens/oslo/_policy.conf" %}
+
+[pool_manager_cache:memcache]
+
+#
+# From designate.opts
+#
+
+# Time in seconds to expire cache. (integer value)
+#expiration = 3600
+
+# Memcached servers or None for in process cache. (list value)
+#memcached_servers = <None>
+
+
+[pool_manager_cache:sqlalchemy]
+{%- set _data = {} %}
+{%- do _data.update({'engine': server.database.engine, 'user': server.database.user, 'password': server.database.password, 'host': server.database.host, 'name': server.database.name.pool_manager})%}
+{%- if _data.ssl is defined and 'cacert_file' not in _data.get('ssl', {}).keys() %}{% do _data['ssl'].update({'cacert_file': server.cacert_file}) %}{% endif %}
+{%- include "oslo_templates/files/queens/oslo/_database.conf" %}
+
+[producer_task:delayed_notify]
+
+#
+# From designate.producer
+#
+
+# Run interval in seconds (integer value)
+#interval = 5
+
+# Default amount of results returned per page (integer value)
+#per_page = 100
+
+# How many zones to receive NOTIFY on each run (integer value)
+#batch_size = 100
+
+
+[producer_task:periodic_exists]
+
+#
+# From designate.producer
+#
+
+# Run interval in seconds (integer value)
+#interval = 3600
+
+# Default amount of results returned per page (integer value)
+#per_page = 100
+
+
+[producer_task:periodic_secondary_refresh]
+
+#
+# From designate.producer
+#
+
+# Run interval in seconds (integer value)
+#interval = 3600
+
+# Default amount of results returned per page (integer value)
+#per_page = 100
+
+
+[producer_task:worker_periodic_recovery]
+
+#
+# From designate.producer
+#
+
+# Run interval in seconds (integer value)
+#interval = 120
+
+# Default amount of results returned per page (integer value)
+#per_page = 100
+
+
+[producer_task:zone_purge]
+
+#
+# From designate.producer
+#
+
+# Run interval in seconds (integer value)
+#interval = 3600
+
+# Default amount of results returned per page (integer value)
+#per_page = 100
+
+# How old deleted zones should be (deleted_at) to be purged, in seconds (integer
+# value)
+#time_threshold = 604800
+
+# How many zones to be purged on each run (integer value)
+#batch_size = 100
+
+
+[proxy]
+
+#
+# From designate.opts
+#
+
+# Proxy HTTP requests via this proxy. (string value)
+#http_proxy = <None>
+
+# Proxy HTTPS requests via this proxy (string value)
+#https_proxy = <None>
+
+# These addresses should not be proxied (list value)
+#no_proxy =
+
+
+[service:agent]
+
+#
+# From designate.agent
+#
+
+# Number of agent worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of agent greenthreads to spawn (integer value)
+#threads = 1000
+
+# DEPRECATED: Agent Bind Host (IP address value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by 'listen' option
+#host = <None>
+
+# DEPRECATED: Agent Port Number (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 'listen' option
+#port = <None>
+
+# Agent host:port pairs to listen on (list value)
+#listen = 0.0.0.0:5358
+
+# The Agent TCP Backlog (integer value)
+#tcp_backlog = 100
+
+# Agent TCP Receive Timeout (floating point value)
+#tcp_recv_timeout = 0.5
+
+# List of IP addresses allowed to NOTIFY The Agent (list value)
+#allow_notify =
+
+# List of masters for the Agent, format ip:port (list value)
+#masters =
+
+# The backend driver to use, e.g. bind9, djbdns, knot2 (string value)
+#backend_driver = bind9
+
+# An IP address to be used to fetch zones transferred in (string value)
+#transfer_source = <None>
+
+# Delay after a NOTIFY arrives for a zone that the Agent will pause and drop
+# subsequent NOTIFYs for that zone (floating point value)
+#notify_delay = 0.0
+
+
+[service:api]
+
+#
+# From designate.api
+#
+
+# Number of api worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of api greenthreads to spawn (integer value)
+#threads = 1000
+
+# Enable host request headers (boolean value)
+#enable_host_header = false
+
+# the url used as the base for all API responses,This should consist of the
+# scheme (http/https),the hostname, port, and any paths that are addedto the
+# base of Designate is URLs,For example http://dns.openstack.example.com/dns
+# (string value)
+#api_base_uri = http://127.0.0.1:9001/
+api_base_uri = {{ server.api.base_uri }}
+
+# DEPRECATED: API Bind Host (IP address value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by 'listen' option
+#api_host = <None>
+
+# DEPRECATED: API Port Number (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 'listen' option
+#api_port = <None>
+
+# API host:port pairs to listen on (list value)
+#listen = 0.0.0.0:9001
+listen = {{ server.bind.api.address }}:9001
+
+# File name for the paste.deploy config for designate-api (string value)
+#api_paste_config = api-paste.ini
+
+# The strategy to use for auth. Supports noauth or keystone (string value)
+#auth_strategy = keystone
+
+# enable-api-v2 which enable in a future (boolean value)
+#enable_api_v2 = true
+
+# enable-api-admin (boolean value)
+#enable_api_admin = false
+enable_api_admin = {{ server.get('admin_api', {}).get('enabled', False) }}
+
+# Maximum line size of message headers to be accepted. max_header_line may need
+# to be increased when using large tokens (typically those generated by the
+# Keystone v3 API with big service catalogs). (integer value)
+#max_header_line = 16384
+
+# Enabled API Extensions for the V2 API (list value)
+#enabled_extensions_v2 =
+enabled_extensions_v2 = quotas,reports
+
+# Default per-page limit for the V2 API, a value of None means show all results
+# by default (integer value)
+#default_limit_v2 = 20
+
+# Max per-page limit for the V2 API (integer value)
+#max_limit_v2 = 1000
+
+# Enabled Admin API Extensions (list value)
+#enabled_extensions_admin =
+{%- if server.get('admin_api', {}).get('enabled_extensions_admin', False) %}
+enabled_extensions_admin = {{ server.admin_api.enabled_extensions_admin }}
+{%- endif %}
+
+# Default per-page limit for the Admin API, a value of None means show all
+# results by default (integer value)
+#default_limit_admin = 20
+
+# Max per-page limit for the Admin API (integer value)
+#max_limit_admin = 1000
+
+# Enable API Maintenance Mode (boolean value)
+#maintenance_mode = false
+
+# Role allowed to bypass maintaince mode (string value)
+#maintenance_mode_role = admin
+
+# The HTTP Header that will be used to determine which the original request
+# protocol scheme was, even if it was removed by an SSL terminating proxy.
+# (string value)
+#secure_proxy_ssl_header = X-Forwarded-Proto
+
+# A scheme that will be used to override the request protocol scheme, even if it
+# was set by an SSL terminating proxy. (string value)
+#override_proto = <None>
+
+
+[service:central]
+
+#
+# From designate.central
+#
+
+# Number of central worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of central greenthreads to spawn (integer value)
+#threads = 1000
+
+# The storage driver to use (string value)
+#storage_driver = sqlalchemy
+
+# Enabled Notification Handlers (list value)
+#enabled_notification_handlers =
+enabled_notification_handlers = nova_fixed,neutron_floatingip
+
+# Maximum zone name length (integer value)
+#max_zone_name_len = 255
+
+# Maximum recordset name length (integer value)
+# Deprecated group/name - [service:central]/max_record_name_len
+#max_recordset_name_len = 255
+
+# E-Mail for Managed resources (string value)
+#managed_resource_email = hostmaster@example.com
+
+# The Tenant ID that will own any managed resources. (string value)
+#managed_resource_tenant_id = 00000000-0000-0000-0000-000000000000
+
+# Minimum TTL allowed (integer value)
+#min_ttl = <None>
+
+# The name of the default pool (string value)
+#default_pool_id = 794ccc2c-d751-44fe-b57f-8894c9f5c842
+
+# RPC topic name of central service. (string value)
+#central_topic = central
+
+#
+# From designate.opts
+#
+
+# Enabled Pool Scheduling filters (list value)
+#scheduler_filters = default_pool
+
+
+[service:mdns]
+
+#
+# From designate.mdns
+#
+
+# Number of mdns worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of mdns greenthreads to spawn (integer value)
+#threads = 1000
+
+# DEPRECATED: mDNS Bind Host (IP address value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Replaced by 'listen' option
+#host = <None>
+
+# DEPRECATED: mDNS Port Number (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 'listen' option
+#port = <None>
+
+# mDNS host:port pairs to listen on (list value)
+#listen = 0.0.0.0:5354
+
+
+# mDNS TCP Backlog (integer value)
+#tcp_backlog = 100
+
+# mDNS TCP Receive Timeout (floating point value)
+#tcp_recv_timeout = 0.5
+
+# Send all traffic over TCP (boolean value)
+#all_tcp = false
+
+# Enforce all incoming queries (including AXFR) are TSIG signed (boolean value)
+#query_enforce_tsig = false
+
+# The storage driver to use (string value)
+#storage_driver = sqlalchemy
+
+# Maximum message size to emit (integer value)
+#max_message_size = 65535
+
+# RPC topic name for mini-DNS (string value)
+#mdns_topic = mdns
+
+
+[service:pool_manager]
+
+#
+# From designate.pool_manager
+#
+
+# Number of Pool Manager worker processes to spawn (integer value)
+#workers = <None>
+{%- if pool_manager.workers is defined %}
+workers = {{ pool_manager.workers }}
+{%- endif %}
+
+# Number of Pool Manager greenthreads to spawn (integer value)
+#threads = 1000
+
+# The ID of the pool managed by this instance of the Pool Manager (string value)
+#pool_id = 794ccc2c-d751-44fe-b57f-8894c9f5c842
+{%- if pool_manager.pool_id is defined %}
+pool_id = {{ pool_manager.pool_id }}
+{%- endif %}
+
+# DEPRECATED: The percentage of servers requiring a successful update for a zone
+# change to be considered active (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#threshold_percentage = 100
+
+# DEPRECATED: The time to wait for a response from a server (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#poll_timeout = 30
+
+# DEPRECATED: The time between retrying to send a request and waiting for a
+# response from a server (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#poll_retry_interval = 15
+
+# DEPRECATED: The maximum number of times to retry sending a request and wait
+# for a response from a server (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#poll_max_retries = 10
+
+# DEPRECATED: The time to wait before sending the first request to a server
+# (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#poll_delay = 5
+
+# The flag for the recovery timer (boolean value)
+#enable_recovery_timer = true
+
+# The time between recovering from failures (integer value)
+#periodic_recovery_interval = 120
+
+# The flag for the sync timer (boolean value)
+#enable_sync_timer = true
+{%- if pool_manager.enable_sync_timer is defined %}
+enable_sync_timer = {{ pool_manager.enable_sync_timer }}
+{%- endif %}
+
+# The time between synchronizing the servers with storage (integer value)
+#periodic_sync_interval = 1800
+{%- if pool_manager.periodic_sync_interval is defined %}
+periodic_sync_interval = {{ pool_manager.periodic_sync_interval }}
+{%- endif %}
+
+# Zones Updated within last N seconds will be syncd.Use an empty value to sync
+# all zones. (integer value)
+#periodic_sync_seconds = 21600
+{%- if pool_manager.periodic_sync_seconds is defined %}
+periodic_sync_seconds = {{ pool_manager.periodic_sync_seconds }}
+{%- endif %}
+
+# Number of attempts to update a zone during sync (integer value)
+#periodic_sync_max_attempts = 3
+{%- if pool_manager.periodic_sync_max_attempts is defined %}
+periodic_sync_max_attempts = {{ pool_manager.periodic_sync_max_attempts }}
+{%- endif %}
+
+# Interval between zone update attempts during sync (integer value)
+#periodic_sync_retry_interval = 30
+{%- if pool_manager.periodic_sync_retry_interval is defined %}
+periodic_sync_retry_interval = {{ pool_manager.periodic_sync_retry_interval }}
+{%- endif %}
+
+# The cache driver to use (string value)
+#cache_driver = memcache
+
+# RPC topic name for pool-manager (string value)
+#pool_manager_topic = pool_manager
+
+
+[service:producer]
+
+#
+# From designate.producer
+#
+
+# Number of Producer worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of Producer greenthreads to spawn (integer value)
+#threads = 1000
+
+# Enabled tasks to run (list value)
+#enabled_tasks = <None>
+
+# The storage driver to use (string value)
+#storage_driver = sqlalchemy
+
+# DEPRECATED: Whether to allow synchronous zone exports (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#export_synchronous = true
+
+
+[service:sink]
+
+#
+# From designate.sink
+#
+
+# Number of sink worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of sink greenthreads to spawn (integer value)
+#threads = 1000
+
+# Enabled Notification Handlers (list value)
+#enabled_notification_handlers =
+
+
+[service:worker]
+
+#
+# From designate.worker
+#
+
+# DEPRECATED: Whether to send events to worker instead of Pool Manager (boolean
+# value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: In Rocky, this option will disappear because worker will be enabled by
+# default
+#enabled = false
+{# TODO: remove enabled option when https://bugs.launchpad.net/designate/+bug/1676827 is fixed #}
+# Whether to send events to worker instead of Pool Manager
+{%- if pool_manager.enabled is defined and pool_manager.enabled == true %}
+enabled = False
+{%- else %}
+enabled = True
+{%- endif %}
+
+
+# Number of Worker worker processes to spawn (integer value)
+#workers = <None>
+
+# Number of Worker threads to spawn per process (integer value)
+#threads = 200
+
+# The storage driver to use (string value)
+#storage_driver = sqlalchemy
+
+# The percentage of servers requiring a successful update for a domain change to
+# be considered active (integer value)
+#threshold_percentage = 100
+
+# The time to wait for a response from a server (integer value)
+#poll_timeout = 30
+
+# The time between retrying to send a request and waiting for a response from a
+# server (integer value)
+#poll_retry_interval = 15
+
+# The maximum number of times to retry sending a request and wait for a response
+# from a server (integer value)
+#poll_max_retries = 10
+
+# The time to wait before sending the first request to a server (integer value)
+#poll_delay = 5
+
+# Whether to allow worker to send NOTIFYs, this will noop NOTIFYs in mdns if
+# true (boolean value)
+#notify = true
+
+# Whether to allow synchronous zone exports (boolean value)
+#export_synchronous = true
+
+# RPC topic for worker component (string value)
+#worker_topic = worker
+
+
+[service:zone_manager]
+
+#
+# From designate.producer
+#
+
+# DEPRECATED: Number of Zone Manager worker processes to spawn (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#workers = <None>
+
+# DEPRECATED: Number of Zone Manager greenthreads to spawn (integer value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#threads = 1000
+
+# DEPRECATED: Enabled tasks to run (list value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#enabled_tasks = <None>
+
+# DEPRECATED: The storage driver to use (string value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#storage_driver = sqlalchemy
+
+# DEPRECATED: Whether to allow synchronous zone exports (boolean value)
+# This option is deprecated for removal.
+# Its value may be silently ignored in the future.
+# Reason: Migrated to designate-worker
+#export_synchronous = true
+
+
+[ssl]
+{%- include "oslo_templates/files/queens/oslo/service/_ssl.conf" %}
+
+[storage:sqlalchemy]
+{%- set _data = {} %}
+{%- do _data.update({'engine': server.database.engine, 'user': server.database.user, 'password': server.database.password, 'host': server.database.host, 'name': server.database.name.main_database})%}
+{%- if _data.ssl is defined and 'cacert_file' not in _data.get('ssl', {}).keys() %}{% do _data['ssl'].update({'cacert_file': server.cacert_file}) %}{% endif %}
+{%- include "oslo_templates/files/queens/oslo/_database.conf" %}
diff --git a/designate/files/queens/pools.yaml b/designate/files/queens/pools.yaml
new file mode 100644
index 0000000..c911e9a
--- /dev/null
+++ b/designate/files/queens/pools.yaml
@@ -0,0 +1,73 @@
+{%- from "designate/map.jinja" import server with context %}
+{% for pool_name, pool in server.pools.iteritems() -%}
+- name: {{ pool_name }}
+  # The name is immutable. There will be no option to change the name after
+  # creation and the only way will to change it will be to delete it
+  # (and all zones associated with it) and recreate it.
+  description: {{ pool.description }}
+
+  {%- if pool.attributes is defined %}
+  # Attributes are Key:Value pairs that describe the pool. for example the level
+  # of service (i.e. service_tier:GOLD), capabilities (i.e. anycast: true) or
+  # other metadata. Users can use this information to point their zones to the
+  # correct pool
+  attributes:
+    {%- for k,v in pool.attributes.items() %}
+    {{ k }}: {{ v }}
+    {%- endfor %}
+  {%- endif %}
+
+  # List out the NS records for zones hosted within this pool
+  ns_records:
+    {% for rec in pool.ns_records -%}
+    - hostname: {{ rec.hostname }}
+      priority: {{ rec.priority }}
+    {% endfor -%}
+
+  # List out the nameservers for this pool. These are the actual DNS servers.
+  # We use these to verify changes have propagated to all nameservers.
+  nameservers:
+    {% for nameserver in pool.nameservers -%}
+    - host: {{ nameserver.host }}
+      port: {{ nameserver.port }}
+    {% endfor -%}
+
+  # List out the targets for this pool. For DNS there will be one
+  # entry for each DNS server, as we have to run rndc command on each server
+  targets:
+    {% for target_name, target in pool.targets.iteritems() -%}
+    - type: {{ target.type }}
+      description: {{ target.description }}
+
+      # List out the designate-mdns servers from which DNS servers should
+      # request zone transfers (AXFRs) from.
+      masters:
+        {% for master in target.masters -%}
+        - host: {{ master.host }}
+          port: {{ master.port }}
+        {% endfor -%}
+
+      # DNS server Configuration options
+      options:
+        host: {{ target.options.host }}
+        port: {{ target.options.port }}
+        {%- if target.type == 'bind9' %}
+        rndc_host: {{ target.options.rndc_host }}
+        rndc_port: {{ target.options.rndc_port }}
+        rndc_key_file: {{ target.options.rndc_key_file }}
+        {%- elif target.type == 'pdns4' %}
+        api_endpoint: {{ target.options.api_endpoint }}
+        api_token: {{ target.options.api_token }}
+        {%- endif %}
+    {% endfor -%}
+
+  {%- if pool.also_notifies is defined %}
+  # Optional list of additional IP/Port's for which designate-mdns will send
+  # DNS NOTIFY packets to
+  also_notifies:
+    {%- for notify in pool.also_notifies %}
+    - host: {{ notify.host }}
+      port: {{ notify.port }}
+    {%- endfor %}
+  {%- endif %}
+{%- endfor %}