{%- from "ironic/map.jinja" import api,conductor,upgrade with context -%}
{%- if api.get("enabled", False) %}
  {%- set ironic = api %}
{%- elif conductor.get('enabled', False) %}
  {%- set ironic = conductor %}
{%- endif %}

{%- set connection_x509_ssl_option = '' %}
{%- if ironic.database.get('x509',{}).get('enabled',False) %}
  {%- set connection_x509_ssl_option = '&ssl_ca=' ~ ironic.database.x509.ca_file ~ '&ssl_cert=' ~ ironic.database.x509.cert_file ~ '&ssl_key=' ~ ironic.database.x509.key_file %}
{%- elif ironic.database.get('ssl',{}).get('enabled',False) %}
  {%- set connection_x509_ssl_option = '&ssl_ca=' ~ ironic.database.ssl.get('cacert_file', ironic.cacert_file) %}
{%- endif %}

[DEFAULT]

#
# From ironic
#

# Authentication strategy used by ironic-api. "noauth" should
# not be used in a production environment because all
# authentication will be disabled. (string value)
# Allowed values: noauth, keystone
{%- if ironic.identity is defined %}
auth_strategy = {{ ironic.identity.engine }}
{%- else %}
#auth_strategy = keystone
{%- endif %}

# Specify the list of drivers to load during service
# initialization. Missing drivers, or drivers which fail to
# initialize, will prevent the conductor service from
# starting. The option default is a recommended set of
# production-oriented drivers. A complete list of drivers
# present on your system may be found by enumerating the
# "ironic.drivers" entrypoint. An example may be found in the
# developer documentation online. (list value)
{%- if conductor.get('enabled_drivers') %}
enabled_drivers = {{ ','.join(conductor.enabled_drivers) }}
{%- else %}
#enabled_drivers = pxe_ipmitool
{%- endif %}

# Specify the list of hardware types to load during service
# initialization. Missing hardware types, or hardware types
# which fail to initialize, will prevent the conductor service
# from starting. This option defaults to a recommended set of
# production-oriented hardware types. A complete list of
# hardware types present on your system may be found by
# enumerating the "ironic.hardware.types" entrypoint. (list
# value)
{%- if conductor.get('enabled_hardware_types') %}
enabled_hardware_types = {{ ','.join(conductor.enabled_hardware_types) }}
{%- else %}
#enabled_hardware_types = ipmi
{%- endif %}

# Specify the list of boot interfaces to load during service
# initialization. Missing boot interfaces, or boot interfaces
# which fail to initialize, will prevent the ironic-conductor
# service from starting. At least one boot interface that is
# supported by each enabled hardware type must be enabled
# here, or the ironic-conductor service will not start. Must
# not be an empty list. The default value is a recommended set
# of production-oriented boot interfaces. A complete list of
# boot interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.boot"
# entrypoint. When setting this value, please make sure that
# every enabled hardware type will have the same set of
# enabled boot interfaces on every ironic-conductor service.
# (list value)
{%- if conductor.get('enabled_boot_interfaces') %}
enabled_boot_interfaces = {{ ','.join(conductor.enabled_boot_interfaces) }}
{%- else %}
#enabled_boot_interfaces = pxe
{%- endif %}

# Default boot interface to be used for nodes that do not have
# boot_interface field set. A complete list of boot interfaces
# present on your system may be found by enumerating the
# "ironic.hardware.interfaces.boot" entrypoint. (string value)
{%- if conductor.get('default_boot_interface') %}
default_boot_interface = {{ conductor.default_boot_interface }}
{%- else %}
#default_boot_interface = <None>
{%- endif %}

# Specify the list of console interfaces to load during
# service initialization. Missing console interfaces, or
# console interfaces which fail to initialize, will prevent
# the ironic-conductor service from starting. At least one
# console interface that is supported by each enabled hardware
# type must be enabled here, or the ironic-conductor service
# will not start. Must not be an empty list. The default value
# is a recommended set of production-oriented console
# interfaces. A complete list of console interfaces present on
# your system may be found by enumerating the
# "ironic.hardware.interfaces.console" entrypoint. When
# setting this value, please make sure that every enabled
# hardware type will have the same set of enabled console
# interfaces on every ironic-conductor service. (list value)
{%- if conductor.get('enabled_console_interfaces') %}
enabled_console_interfaces = {{ ','.join(conductor.enabled_console_interfaces) }}
{%- else %}
#enabled_console_interfaces = no-console
{%- endif %}

# Default console interface to be used for nodes that do not
# have console_interface field set. A complete list of console
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.console"
# entrypoint. (string value)
{%- if conductor.get('default_console_interface') %}
default_console_interface = {{ conductor.default_console_interface }}
{%- else %}
#default_console_interface = <None>
{%- endif %}

# Specify the list of deploy interfaces to load during service
# initialization. Missing deploy interfaces, or deploy
# interfaces which fail to initialize, will prevent the
# ironic-conductor service from starting. At least one deploy
# interface that is supported by each enabled hardware type
# must be enabled here, or the ironic-conductor service will
# not start. Must not be an empty list. The default value is a
# recommended set of production-oriented deploy interfaces. A
# complete list of deploy interfaces present on your system
# may be found by enumerating the
# "ironic.hardware.interfaces.deploy" entrypoint. When setting
# this value, please make sure that every enabled hardware
# type will have the same set of enabled deploy interfaces on
# every ironic-conductor service. (list value)
{%- if conductor.get('enabled_deploy_interfaces') %}
enabled_deploy_interfaces = {{ ','.join(conductor.enabled_deploy_interfaces) }}
{%- else %}
#enabled_deploy_interfaces = iscsi,direct
{%- endif %}

# Default deploy interface to be used for nodes that do not
# have deploy_interface field set. A complete list of deploy
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.deploy"
# entrypoint. (string value)
{%- if conductor.get('default_deploy_interface') %}
default_deploy_interface = {{ conductor.default_deploy_interface }}
{%- else %}
#default_deploy_interface = <None>
{%- endif %}

# Specify the list of inspect interfaces to load during
# service initialization. Missing inspect interfaces, or
# inspect interfaces which fail to initialize, will prevent
# the ironic-conductor service from starting. At least one
# inspect interface that is supported by each enabled hardware
# type must be enabled here, or the ironic-conductor service
# will not start. Must not be an empty list. The default value
# is a recommended set of production-oriented inspect
# interfaces. A complete list of inspect interfaces present on
# your system may be found by enumerating the
# "ironic.hardware.interfaces.inspect" entrypoint. When
# setting this value, please make sure that every enabled
# hardware type will have the same set of enabled inspect
# interfaces on every ironic-conductor service. (list value)
{%- if conductor.get('enabled_inspect_interfaces') %}
enabled_inspect_interfaces = {{ ','.join(conductor.enabled_inspect_interfaces) }}
{%- else %}
#enabled_inspect_interfaces = no-inspect
{%- endif %}

# Default inspect interface to be used for nodes that do not
# have inspect_interface field set. A complete list of inspect
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.inspect"
# entrypoint. (string value)
{%- if conductor.get('default_inspect_interface') %}
default_inspect_interface = {{ conductor.default_inspect_interface }}
{%- else %}
#default_inspect_interface = <None>
{%- endif %}

# Specify the list of management interfaces to load during
# service initialization. Missing management interfaces, or
# management interfaces which fail to initialize, will prevent
# the ironic-conductor service from starting. At least one
# management interface that is supported by each enabled
# hardware type must be enabled here, or the ironic-conductor
# service will not start. Must not be an empty list. The
# default value is a recommended set of production-oriented
# management interfaces. A complete list of management
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.management"
# entrypoint. When setting this value, please make sure that
# every enabled hardware type will have the same set of
# enabled management interfaces on every ironic-conductor
# service. (list value)
{%- if conductor.get('enabled_management_interfaces') %}
enabled_management_interfaces = {{ ','.join(conductor.enabled_management_interfaces) }}
{%- else %}
#enabled_management_interfaces = ipmitool
{%- endif %}

# Default management interface to be used for nodes that do
# not have management_interface field set. A complete list of
# management interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.management"
# entrypoint. (string value)
{%- if conductor.get('default_management_interface') %}
default_management_interface = {{ conductor.default_management_interface }}
{%- else %}
#default_management_interface = <None>
{%- endif %}

# Specify the list of network interfaces to load during
# service initialization. Missing network interfaces, or
# network interfaces which fail to initialize, will prevent
# the ironic-conductor service from starting. At least one
# network interface that is supported by each enabled hardware
# type must be enabled here, or the ironic-conductor service
# will not start. Must not be an empty list. The default value
# is a recommended set of production-oriented network
# interfaces. A complete list of network interfaces present on
# your system may be found by enumerating the
# "ironic.hardware.interfaces.network" entrypoint. When
# setting this value, please make sure that every enabled
# hardware type will have the same set of enabled network
# interfaces on every ironic-conductor service. (list value)
{%- if conductor.get('enabled_network_interfaces') %}
enabled_network_interfaces = {{ ','.join(conductor.enabled_network_interfaces) }}
{%- else %}
#enabled_network_interfaces = flat,noop
{%- endif %}

# Default network interface to be used for nodes that do not
# have network_interface field set. A complete list of network
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.network"
# entrypoint. (string value)
{%- if conductor.get('default_network_interface') %}
default_network_interface = {{ conductor.default_network_interface }}
{%- else %}
#default_network_interface = <None>
{%- endif %}

# Specify the list of power interfaces to load during service
# initialization. Missing power interfaces, or power
# interfaces which fail to initialize, will prevent the
# ironic-conductor service from starting. At least one power
# interface that is supported by each enabled hardware type
# must be enabled here, or the ironic-conductor service will
# not start. Must not be an empty list. The default value is a
# recommended set of production-oriented power interfaces. A
# complete list of power interfaces present on your system may
# be found by enumerating the
# "ironic.hardware.interfaces.power" entrypoint. When setting
# this value, please make sure that every enabled hardware
# type will have the same set of enabled power interfaces on
# every ironic-conductor service. (list value)
{%- if conductor.get('enabled_power_interfaces') %}
enabled_power_interfaces = {{ ','.join(conductor.enabled_power_interfaces) }}
{%- else %}
#enabled_power_interfaces = ipmitool
{%- endif %}

# Default power interface to be used for nodes that do not
# have power_interface field set. A complete list of power
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.power"
# entrypoint. (string value)
{%- if conductor.get('default_power_interface') %}
default_power_interface = {{ conductor.default_power_interface }}
{%- else %}
#default_power_interface = <None>
{%- endif %}

# Specify the list of raid interfaces to load during service
# initialization. Missing raid interfaces, or raid interfaces
# which fail to initialize, will prevent the ironic-conductor
# service from starting. At least one raid interface that is
# supported by each enabled hardware type must be enabled
# here, or the ironic-conductor service will not start. Must
# not be an empty list. The default value is a recommended set
# of production-oriented raid interfaces. A complete list of
# raid interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.raid"
# entrypoint. When setting this value, please make sure that
# every enabled hardware type will have the same set of
# enabled raid interfaces on every ironic-conductor service.
# (list value)
{%- if conductor.get('enabled_raid_interfaces') %}
enabled_raid_interfaces = {{ ','.join(conductor.enabled_raid_interfaces) }}
{%- else %}
#enabled_raid_interfaces = agent,no-raid
{%- endif %}

# Default raid interface to be used for nodes that do not have
# raid_interface field set. A complete list of raid interfaces
# present on your system may be found by enumerating the
# "ironic.hardware.interfaces.raid" entrypoint. (string value)
{%- if conductor.get('default_raid_interface') %}
default_raid_interface = {{ conductor.default_raid_interface }}
{%- else %}
#default_raid_interface = <None>
{%- endif %}

# Specify the list of storage interfaces to load during
# service initialization. Missing storage interfaces, or
# storage interfaces which fail to initialize, will prevent
# the ironic-conductor service from starting. At least one
# storage interface that is supported by each enabled hardware
# type must be enabled here, or the ironic-conductor service
# will not start. Must not be an empty list. The default value
# is a recommended set of production-oriented storage
# interfaces. A complete list of storage interfaces present on
# your system may be found by enumerating the
# "ironic.hardware.interfaces.storage" entrypoint. When
# setting this value, please make sure that every enabled
# hardware type will have the same set of enabled storage
# interfaces on every ironic-conductor service. (list value)
{%- if conductor.get('enabled_storage_interfaces') %}
enabled_storage_interfaces = {{ ','.join(conductor.enabled_storage_interfaces) }}
{%- else %}
#enabled_storage_interfaces = noop
{%- endif %}

# Default storage interface to be used for nodes that do not
# have storage_interface field set. A complete list of storage
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.storage"
# entrypoint. (list value)
{%- if conductor.get('default_storage_interface') %}
default_storage_interface = {{ ironic.condcutor.default_storage_interface }}
{%- else %}
#default_storage_interface = <None>
{%- endif %}

# Specify the list of vendor interfaces to load during service
# initialization. Missing vendor interfaces, or vendor
# interfaces which fail to initialize, will prevent the
# ironic-conductor service from starting. At least one vendor
# interface that is supported by each enabled hardware type
# must be enabled here, or the ironic-conductor service will
# not start. Must not be an empty list. The default value is a
# recommended set of production-oriented vendor interfaces. A
# complete list of vendor interfaces present on your system
# may be found by enumerating the
# "ironic.hardware.interfaces.vendor" entrypoint. When setting
# this value, please make sure that every enabled hardware
# type will have the same set of enabled vendor interfaces on
# every ironic-conductor service. (list value)
{%- if conductor.get('enabled_vendor_interfaces') %}
enabled_vendor_interfaces = {{ ','.join(conductor.enabled_vendor_interfaces) }}
{%- else %}
#enabled_vendor_interfaces = no-vendor
{%- endif %}

# Default vendor interface to be used for nodes that do not
# have vendor_interface field set. A complete list of vendor
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.vendor"
# entrypoint. (string value)
{%- if conductor.get('default_vendor_interface') %}
default_vendor_interface = {{ conductor.default_vendor_interface }}
{%- else %}
#default_vendor_interface = <None>
{%- endif %}

# Used if there is a formatting error when generating an
# exception message (a programming error). If True, raise an
# exception; if False, use the unformatted message. (boolean
# value)
#fatal_exception_format_errors = false

# Exponent to determine number of hash partitions to use when
# distributing load across conductors. Larger values will
# result in more even distribution of load and less load when
# rebalancing the ring, but more memory usage. Number of
# partitions per conductor is (2^hash_partition_exponent).
# This determines the granularity of rebalancing: given 10
# hosts, and an exponent of the 2, there are 40 partitions in
# the ring.A few thousand partitions should make rebalancing
# smooth in most cases. The default is suitable for up to a
# few hundred conductors. Configuring for too many partitions
# has a negative impact on CPU usage. (integer value)
#hash_partition_exponent = 5

# [Experimental Feature] Number of hosts to map onto each hash
# partition. Setting this to more than one will cause
# additional conductor services to prepare deployment
# environments and potentially allow the Ironic cluster to
# recover more quickly if a conductor instance is terminated.
# (integer value)
#hash_distribution_replicas = 1

# Interval (in seconds) between hash ring resets. (integer
# value)
#hash_ring_reset_interval = 180

# If True, convert backing images to "raw" disk image format.
# (boolean value)
#force_raw_images = true

# Path to isolinux binary file. (string value)
#isolinux_bin = /usr/lib/syslinux/isolinux.bin

# Template file for isolinux configuration file. (string
# value)
#isolinux_config_template = $pybasedir/common/isolinux_common.template

# Template file for grub configuration file. (string value)
#grub_config_template = $pybasedir/common/grub_conf.template

# Run image downloads and raw format conversions in parallel.
# (boolean value)
#parallel_image_downloads = false

# IP address of this host. If unset, will determine the IP
# programmatically. If unable to do so, will use "127.0.0.1".
# (string value)
{%- if conductor.get('my_ip') %}
my_ip = {{ conductor.my_ip }}
{%- else %}
#my_ip = 127.0.0.1
{%- endif %}

# Specifies the minimum level for which to send notifications.
# If not set, no notifications will be sent. The default is
# for this option to be unset. (string value)
# Allowed values: debug, info, warning, error, critical
#notification_level = <None>

# Directory where the ironic python module is installed.
# (string value)
#pybasedir = /usr/lib/python/site-packages/ironic/ironic

# Directory where ironic binaries are installed. (string
# value)
#bindir = $pybasedir/bin

# Top-level directory for maintaining ironic's state. (string
# value)
#state_path = $pybasedir

# Default mode for portgroups. Allowed values can be found in
# the linux kernel documentation on bonding:
# https://www.kernel.org/doc/Documentation/networking/bonding.txt.
# (string value)
#default_portgroup_mode = active-backup

# Name of this node. This can be an opaque identifier. It is
# not necessarily a hostname, FQDN, or IP address. However,
# the node name must be valid within an AMQP key, and if using
# ZeroMQ, a valid hostname, FQDN, or IP address. (string
# value)
# host = localhost

# Used for rolling upgrades. Setting this option downgrades
# (or pins) the internal ironic RPC communication and database
# objects to their respective versions, so they are compatible
# with older services. When doing a rolling upgrade from
# version N to version N+1, set (to pin) this to N. To unpin
# (default), leave it unset and the latest versions of RPC
# communication and database objects will be used. (string
# value)
# Allowed values: pike, ocata, 9.1, 9.0, 8.0, 7.0
#pin_release_version = <None>
{%- if upgrade.get('enabled', False) %}
pin_release_version = {{ upgrade.old_release }}
{%- endif %}

# Path to the rootwrap configuration file to use for running
# commands as root. (string value)
#rootwrap_config = /etc/ironic/rootwrap.conf

# Temporary working directory, default is Python temp dir.
# (string value)
#tempdir = /tmp

#
# From oslo.log
#

# If set to true, the logging level will be set to DEBUG
# instead of the default INFO level. (boolean value)
# Note: This option can be changed without restarting.
{%- if ironic.logging is defined and ironic.debug is defined %}
debug = {{ ironic.logging.debug }}
{%- else %}
#debug = false
{%- endif %}

# The name of a logging configuration file. This file is
# appended to any existing logging configuration files. For
# details about logging configuration files, see the Python
# logging module documentation. Note that when logging
# configuration files are used then all logging configuration
# is set in the configuration file and other logging
# configuration options are ignored (for example,
# logging_context_format_string). (string value)
# Note: This option can be changed without restarting.
# Deprecated group/name - [DEFAULT]/log_config
#log_config_append = <None>

# Defines the format string for %%(asctime)s in log records.
# Default: %(default)s . This option is ignored if
# log_config_append is set. (string value)
#log_date_format = %Y-%m-%d %H:%M:%S

# (Optional) Name of log file to send logging output to. If no
# default is set, logging will go to stderr as defined by
# use_stderr. This option is ignored if log_config_append is
# set. (string value)
# Deprecated group/name - [DEFAULT]/logfile
#log_file = <None>

# (Optional) The base directory used for relative log_file
# paths. This option is ignored if log_config_append is set.
# (string value)
# Deprecated group/name - [DEFAULT]/logdir
#log_dir = <None>

# Uses logging handler designed to watch file system. When log
# file is moved or removed this handler will open a new log
# file with specified path instantaneously. It makes sense
# only if log_file option is specified and Linux platform is
# used. This option is ignored if log_config_append is set.
# (boolean value)
#watch_log_file = false

# Use syslog for logging. Existing syslog format is DEPRECATED
# and will be changed later to honor RFC5424. This option is
# ignored if log_config_append is set. (boolean value)
#use_syslog = false

# Syslog facility to receive log lines. This option is ignored
# if log_config_append is set. (string value)
#syslog_log_facility = LOG_USER

# Log output to standard error. This option is ignored if
# log_config_append is set. (boolean value)
#use_stderr = false

# Format string to use for log messages with context. (string
# value)
#logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s

# Format string to use for log messages when context is
# undefined. (string value)
#logging_default_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s

# Additional data to append to log message when logging level
# for the message is DEBUG. (string value)
#logging_debug_format_suffix = %(funcName)s %(pathname)s:%(lineno)d

# Prefix each line of exception output with this format.
# (string value)
#logging_exception_prefix = %(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s

# Defines the format string for %(user_identity)s that is used
# in logging_context_format_string. (string value)
#logging_user_identity_format = %(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s

# List of package logging levels in logger=LEVEL pairs. This
# option is ignored if log_config_append is set. (list value)
#default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO

# Enables or disables publication of error events. (boolean
# value)
#publish_errors = false

# The format for an instance that is passed with the log
# message. (string value)
#instance_format = "[instance: %(uuid)s] "

# The format for an instance UUID that is passed with the log
# message. (string value)
#instance_uuid_format = "[instance: %(uuid)s] "

# Interval, number of seconds, of log rate limiting. (integer
# value)
#rate_limit_interval = 0

# Maximum number of logged messages per rate_limit_interval.
# (integer value)
#rate_limit_burst = 0

# Log level name used by rate limiting: CRITICAL, ERROR, INFO,
# WARNING, DEBUG or empty string. Logs with level greater or
# equal to rate_limit_except_level are not filtered. An empty
# string means that all levels are filtered. (string value)
#rate_limit_except_level = CRITICAL

# Enables or disables fatal status of deprecations. (boolean
# value)
#fatal_deprecations = false

#
# From oslo.messaging
#

# Size of RPC connection pool. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_conn_pool_size
#rpc_conn_pool_size = 30

# The pool size limit for connections expiration policy
# (integer value)
#conn_pool_min_size = 2

# The time-to-live in sec of idle connections in the pool
# (integer value)
#conn_pool_ttl = 1200

# ZeroMQ bind address. Should be a wildcard (*), an ethernet
# interface, or IP. The "host" option should point or resolve
# to this address. (string value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_bind_address
#rpc_zmq_bind_address = *

# MatchMaker driver. (string value)
# Allowed values: redis, sentinel, dummy
# Deprecated group/name - [DEFAULT]/rpc_zmq_matchmaker
#rpc_zmq_matchmaker = redis

# Number of ZeroMQ contexts, defaults to 1. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_contexts
#rpc_zmq_contexts = 1

# Maximum number of ingress messages to locally buffer per
# topic. Default is unlimited. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_topic_backlog
#rpc_zmq_topic_backlog = <None>

# Directory for holding IPC sockets. (string value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_ipc_dir
#rpc_zmq_ipc_dir = /var/run/openstack

# Name of this node. Must be a valid hostname, FQDN, or IP
# address. Must match "host" option, if running Nova. (string
# value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_host
#rpc_zmq_host = localhost

# Number of seconds to wait before all pending messages will
# be sent after closing a socket. The default value of -1
# specifies an infinite linger period. The value of 0
# specifies no linger period. Pending messages shall be
# discarded immediately when the socket is closed. Positive
# values specify an upper bound for the linger period.
# (integer value)
# Deprecated group/name - [DEFAULT]/rpc_cast_timeout
#zmq_linger = -1

# The default number of seconds that poll should wait. Poll
# raises timeout exception when timeout expired. (integer
# value)
# Deprecated group/name - [DEFAULT]/rpc_poll_timeout
#rpc_poll_timeout = 1

# Expiration timeout in seconds of a name service record about
# existing target ( < 0 means no timeout). (integer value)
# Deprecated group/name - [DEFAULT]/zmq_target_expire
#zmq_target_expire = 300

# Update period in seconds of a name service record about
# existing target. (integer value)
# Deprecated group/name - [DEFAULT]/zmq_target_update
#zmq_target_update = 180

# Use PUB/SUB pattern for fanout methods. PUB/SUB always uses
# proxy. (boolean value)
# Deprecated group/name - [DEFAULT]/use_pub_sub
#use_pub_sub = false

# Use ROUTER remote proxy. (boolean value)
# Deprecated group/name - [DEFAULT]/use_router_proxy
#use_router_proxy = false

# This option makes direct connections dynamic or static. It
# makes sense only with use_router_proxy=False which means to
# use direct connections for direct message types (ignored
# otherwise). (boolean value)
#use_dynamic_connections = false

# How many additional connections to a host will be made for
# failover reasons. This option is actual only in dynamic
# connections mode. (integer value)
#zmq_failover_connections = 2

# Minimal port number for random ports range. (port value)
# Minimum value: 0
# Maximum value: 65535
# Deprecated group/name - [DEFAULT]/rpc_zmq_min_port
#rpc_zmq_min_port = 49153

# Maximal port number for random ports range. (integer value)
# Minimum value: 1
# Maximum value: 65536
# Deprecated group/name - [DEFAULT]/rpc_zmq_max_port
#rpc_zmq_max_port = 65536

# Number of retries to find free port number before fail with
# ZMQBindError. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_bind_port_retries
#rpc_zmq_bind_port_retries = 100

# Default serialization mechanism for
# serializing/deserializing outgoing/incoming messages (string
# value)
# Allowed values: json, msgpack
# Deprecated group/name - [DEFAULT]/rpc_zmq_serialization
#rpc_zmq_serialization = json

# This option configures round-robin mode in zmq socket. True
# means not keeping a queue when server side disconnects.
# False means to keep queue and messages even if server is
# disconnected, when the server appears we send all
# accumulated messages to it. (boolean value)
#zmq_immediate = true

# Enable/disable TCP keepalive (KA) mechanism. The default
# value of -1 (or any other negative value) means to skip any
# overrides and leave it to OS default; 0 and 1 (or any other
# positive value) mean to disable and enable the option
# respectively. (integer value)
#zmq_tcp_keepalive = -1

# The duration between two keepalive transmissions in idle
# condition. The unit is platform dependent, for example,
# seconds in Linux, milliseconds in Windows etc. The default
# value of -1 (or any other negative value and 0) means to
# skip any overrides and leave it to OS default. (integer
# value)
#zmq_tcp_keepalive_idle = -1

# The number of retransmissions to be carried out before
# declaring that remote end is not available. The default
# value of -1 (or any other negative value and 0) means to
# skip any overrides and leave it to OS default. (integer
# value)
#zmq_tcp_keepalive_cnt = -1

# The duration between two successive keepalive
# retransmissions, if acknowledgement to the previous
# keepalive transmission is not received. The unit is platform
# dependent, for example, seconds in Linux, milliseconds in
# Windows etc. The default value of -1 (or any other negative
# value and 0) means to skip any overrides and leave it to OS
# default. (integer value)
#zmq_tcp_keepalive_intvl = -1

# Maximum number of (green) threads to work concurrently.
# (integer value)
#rpc_thread_pool_size = 100

# Expiration timeout in seconds of a sent/received message
# after which it is not tracked anymore by a client/server.
# (integer value)
#rpc_message_ttl = 300

# Wait for message acknowledgements from receivers. This
# mechanism works only via proxy without PUB/SUB. (boolean
# value)
#rpc_use_acks = false

# Number of seconds to wait for an ack from a cast/call. After
# each retry attempt this timeout is multiplied by some
# specified multiplier. (integer value)
#rpc_ack_timeout_base = 15

# Number to multiply base ack timeout by after each retry
# attempt. (integer value)
#rpc_ack_timeout_multiplier = 2

# Default number of message sending attempts in case of any
# problems occurred: positive value N means at most N retries,
# 0 means no retries, None or -1 (or any other negative
# values) mean to retry forever. This option is used only if
# acknowledgments are enabled. (integer value)
#rpc_retry_attempts = 3

# List of publisher hosts SubConsumer can subscribe on. This
# option has higher priority then the default publishers list
# taken from the matchmaker. (list value)
#subscribe_on =

# Size of executor thread pool. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_thread_pool_size
#executor_thread_pool_size = 64

# Seconds to wait for a response from a call. (integer value)
#rpc_response_timeout = 60

# A URL representing the messaging driver to use and its full
# configuration. (string value)
{%- set rabbit_port = ironic.message_queue.get('port', 5671 if ironic.message_queue.get('ssl',{}).get('enabled', False)  else 5672) %}
{%- if ironic.message_queue.members is defined %}
transport_url = rabbit://{% for member in ironic.message_queue.members -%}
                             {{ ironic.message_queue.user }}:{{ ironic.message_queue.password }}@{{ member.host }}:{{ member.get('port', rabbit_port) }}
                             {%- if not loop.last -%},{%- endif -%}
                         {%- endfor -%}
                             /{{ ironic.message_queue.virtual_host }}
{%- else %}
transport_url = rabbit://{{ ironic.message_queue.user }}:{{ ironic.message_queue.password }}@{{ ironic.message_queue.host }}:{{ rabbit_port }}/{{ ironic.message_queue.virtual_host }}
{%- endif %}

# 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 = openstack

#
# 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


[agent]

#
# From ironic
#

# Whether Ironic will manage booting of the agent ramdisk. If
# set to False, you will need to configure your mechanism to
# allow booting the agent ramdisk. (boolean value)
#manage_agent_boot = true

# The memory size in MiB consumed by agent when it is booted
# on a bare metal node. This is used for checking if the image
# can be downloaded and deployed on the bare metal node after
# booting agent ramdisk. This may be set according to the
# memory consumed by the agent ramdisk image. (integer value)
#memory_consumed_by_agent = 0

# Whether the agent ramdisk should stream raw images directly
# onto the disk or not. By streaming raw images directly onto
# the disk the agent ramdisk will not spend time copying the
# image to a tmpfs partition (therefore consuming less memory)
# prior to writing it to the disk. Unless the disk where the
# image will be copied to is really slow, this option should
# be set to True. Defaults to True. (boolean value)
#stream_raw_images = true

# Number of times to retry getting power state to check if
# bare metal node has been powered off after a soft power off.
# (integer value)
#post_deploy_get_power_state_retries = 6

# Amount of time (in seconds) to wait between polling power
# state after trigger soft poweroff. (integer value)
#post_deploy_get_power_state_retry_interval = 5

# API version to use for communicating with the ramdisk agent.
# (string value)
#agent_api_version = v1

# Whether Ironic should collect the deployment logs on
# deployment failure (on_failure), always or never. (string
# value)
# Allowed values: always, on_failure, never
#deploy_logs_collect = on_failure

# The name of the storage backend where the logs will be
# stored. (string value)
# Allowed values: local, swift
#deploy_logs_storage_backend = local

# The path to the directory where the logs should be stored,
# used when the deploy_logs_storage_backend is configured to
# "local". (string value)
#deploy_logs_local_path = /var/log/ironic/deploy

# The name of the Swift container to store the logs, used when
# the deploy_logs_storage_backend is configured to "swift".
# (string value)
#deploy_logs_swift_container = ironic_deploy_logs_container

# Number of days before a log object is marked as expired in
# Swift. If None, the logs will be kept forever or until
# manually deleted. Used when the deploy_logs_storage_backend
# is configured to "swift". (integer value)
#deploy_logs_swift_days_to_expire = 30


[api]

#
# From ironic
#

# The IP address on which ironic-api listens. (string value)
{%- if api.get('bind', {}).get('address') %}
host_ip = {{ api.bind.address }}
{%- else %}
#host_ip = 0.0.0.0
{%- endif %}

# The TCP port on which ironic-api listens. (port value)
# Minimum value: 0
# Maximum value: 65535
{%- if api.get('bind', {}).get('port') %}
port = {{ api.bind.port }}
{%- else %}
#port = 6385
{%- endif %}

# The maximum number of items returned in a single response
# from a collection resource. (integer value)
#max_limit = 1000

# Public URL to use when building the links to the API
# resources (for example, "https://ironic.rocks:6384"). If
# None the links will be built using the request's host URL.
# If the API is operating behind a proxy, you will want to
# change this to represent the proxy's URL. Defaults to None.
# (string value)
{%- if api.public_endpoint is defined %}
public_endpoint = {{ api.public_endpoint }}
{%- else %}
#public_endpoint = <None>
{%- endif %}

# Number of workers for OpenStack Ironic API service. The
# default is equal to the number of CPUs available if that can
# be determined, else a default worker count of 1 is returned.
# (integer value)
#api_workers = <None>

# Enable the integrated stand-alone API to service requests
# via HTTPS instead of HTTP. If there is a front-end service
# performing HTTPS offloading from the service, this option
# should be False; note, you will want to change public API
# endpoint to represent SSL termination URL with
# 'public_endpoint' option. (boolean value)
#enable_ssl_api = false

# Whether to restrict the lookup API to only nodes in certain
# states. (boolean value)
#restrict_lookup = true

# Maximum interval (in seconds) for agent heartbeats. (integer
# value)
# Deprecated group/name - [agent]/heartbeat_timeout
#ramdisk_heartbeat_timeout = 300


[audit]

#
# From ironic
#

# Enable auditing of API requests (for ironic-api service).
# (boolean value)
#enabled = false

# Path to audit map file for ironic-api service. Used only
# when API audit is enabled. (string value)
#audit_map_file = /etc/ironic/api_audit_map.conf

# Comma separated list of Ironic REST API HTTP methods to be
# ignored during audit logging. For example: auditing will not
# be done on any GET or POST requests if this is set to
# "GET,POST". It is used only when API audit is enabled.
# (string value)
#ignore_req_list =


[cimc]

#
# From ironic
#

# Number of times a power operation needs to be retried
# (integer value)
#max_retry = 6

# Amount of time in seconds to wait in between power
# operations (integer value)
#action_interval = 10


[cinder]

#
# From ironic
#

# This section was added by iura
# I referred to https://docs.openstack.org/ironic/pike/configuration/sample-config.html

# Number of retries in the case of a failed action (currently
# only used when detaching volumes). This option is part of
# boot-from-volume work, which is not currently exposed to
# users. (integer value)
#action_retries = 3
action_retries = 3

# Retry interval in seconds in the case of a failed action
# (only specific actions are retried). (integer value)
#action_retry_interval = 5

# Authentication URL (string value)
{%- if conductor.get('cinder', {}).get('auth_strategy') == 'keystone' %}
auth_url = {{ conductor.identity.protocol }}://{{ conductor.identity.host }}:{{ conductor.identity.port }}
{%- if conductor.identity.protocol == 'https' %}
cafile={{ conductor.identity.get('cacert_file', conductor.cacert_file) }}
{%- endif %}
{%- else %}
#auth_url = <None>
{%- endif %}

# Authentication type to load (string value)
# Deprecated group/name - [cinder]/auth_plugin
{%- if conductor.get('cinder', {}).get('auth_type') %}
auth_type = {{ conductor.cinder.auth_type }}
{%- else %}
#auth_type = <None>
{%- endif %}

# 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
insecure = true

# PEM encoded client certificate key file (string value)
#keyfile = <None>

# User's password (string value)
#password = <None>
{%- if conductor.get('cinder', {}).get('password') %}
password = {{ conductor.cinder.password }}
{%- else %}
#password = <None>
{%- endif %}

# Domain ID containing project (string value)
#project_domain_id = <None>
{%- if conductor.get('cinder', {}).get('project_domain_id') %}
project_domain_id = {{ conductor.cinder.project_domain_id }}
{%- else %}
#project_domain_id = <None>
{%- endif %}

# Domain name containing project (string value)
#project_domain_name = <None>
#project_domain_id = default

# Project ID to scope to (string value)
# Deprecated group/name - [cinder]/tenant_id
#project_id = <None>

# Project name to scope to (string value)
# Deprecated group/name - [cinder]/tenant_name
#project_name = <None>
{%- if conductor.get('cinder', {}).get('project_name') %}
project_name = {{ conductor.cinder.project_name }}
{%- else %}
#project_name = <None>
{%- endif %}

# Client retries in the case of a failed request connection.
# This option is part of boot-from-volume work, which is not
# currently exposed to users. (integer value)
#retries = 3

# 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>

# URL for connecting to cinder. If set, the value must start
# with either http:// or https://. This option is part of
# boot-from-volume work, which is not currently exposed to
# users. (uri value)
{%- if conductor.get('cinder', {}).get('url') %}
url = {{ conductor.cinder.url }}
{%- else %}
#url = <None>
{%- endif %}

# User's domain id (string value)
#user_domain_id = <None>
user_domain_id = default

# User's domain name (string value)
{%- if conductor.get('cinder', {}).get('user_domain_name') %}
user_domain_name = {{ conductor.cinder.user_domain_name }}
{%- else %}
#user_domain_name = <None>
{%- endif %}

# User id (string value)
#user_id = <None>

# Username (string value)
# Deprecated group/name - [cinder]/user_name
{%- if conductor.get('cinder', {}).get('username') %}
username = {{ conductor.cinder.username }}
{%- else %}
#username = <None>
{%- endif %}


[cisco_ucs]

#
# From ironic
#

# Number of times a power operation needs to be retried
# (integer value)
#max_retry = 6

# Amount of time in seconds to wait in between power
# operations (integer value)
#action_interval = 5


[conductor]

#
# From ironic
#

# The size of the workers greenthread pool. Note that 2
# threads will be reserved by the conductor itself for
# handling heart beats and periodic tasks. (integer value)
# Minimum value: 3
#workers_pool_size = 100

# Seconds between conductor heart beats. (integer value)
#heartbeat_interval = 10

# URL of Ironic API service. If not set ironic can get the
# current value from the keystone service catalog. If set, the
# value must start with either http:// or https://. (string
# value)
{%- if conductor.get('api_url') %}
api_url = {{ conductor.api_url }}
{%- else %}
#api_url = <None>
{%- endif %}

# Maximum time (in seconds) since the last check-in of a
# conductor. A conductor is considered inactive when this time
# has been exceeded. (integer value)
#heartbeat_timeout = 60

# Interval between syncing the node power state to the
# database, in seconds. (integer value)
#sync_power_state_interval = 60

# Interval between checks of provision timeouts, in seconds.
# (integer value)
#check_provision_state_interval = 60

# Timeout (seconds) to wait for a callback from a deploy
# ramdisk. Set to 0 to disable timeout. (integer value)
#deploy_callback_timeout = 1800

# During sync_power_state, should the hardware power state be
# set to the state recorded in the database (True) or should
# the database be updated based on the hardware state (False).
# (boolean value)
#force_power_state_during_sync = true

# During sync_power_state failures, limit the number of times
# Ironic should try syncing the hardware node power state with
# the node power state in DB (integer value)
#power_state_sync_max_retries = 3

# Maximum number of worker threads that can be started
# simultaneously by a periodic task. Should be less than RPC
# thread pool size. (integer value)
#periodic_max_workers = 8

# Number of attempts to grab a node lock. (integer value)
#node_locked_retry_attempts = 3

# Seconds to sleep between node lock attempts. (integer value)
#node_locked_retry_interval = 1

# Enable sending sensor data message via the notification bus
# (boolean value)
#send_sensor_data = false

# Seconds between conductor sending sensor data message to
# ceilometer via the notification bus. (integer value)
#send_sensor_data_interval = 600

# The maximum number of workers that can be started
# simultaneously for send data from sensors periodic task.
# (integer value)
# Minimum value: 1
#send_sensor_data_workers = 4

# The time in seconds to wait for send sensors data periodic
# task to be finished before allowing periodic call to happen
# again. Should be less than send_sensor_data_interval value.
# (integer value)
#send_sensor_data_wait_timeout = 300

# List of comma separated meter types which need to be sent to
# Ceilometer. The default value, "ALL", is a special value
# meaning send all the sensor data. (list value)
#send_sensor_data_types = ALL

# When conductors join or leave the cluster, existing
# conductors may need to update any persistent local state as
# nodes are moved around the cluster. This option controls how
# often, in seconds, each conductor will check for nodes that
# it should "take over". Set it to a negative value to disable
# the check entirely. (integer value)
#sync_local_state_interval = 180

# Whether to upload the config drive to Swift. (boolean value)
#configdrive_use_swift = false

# Name of the Swift container to store config drive data. Used
# when configdrive_use_swift is True. (string value)
#configdrive_swift_container = ironic_configdrive_container

# Timeout (seconds) for waiting for node inspection. 0 -
# unlimited. (integer value)
#inspect_timeout = 1800

# Enables or disables automated cleaning. Automated cleaning
# is a configurable set of steps, such as erasing disk drives,
# that are performed on the node to ensure it is in a baseline
# state and ready to be deployed to. This is done after
# instance deletion as well as during the transition from a
# "manageable" to "available" state. When enabled, the
# particular steps performed to clean a node depend on which
# driver that node is managed by; see the individual driver's
# documentation for details. NOTE: The introduction of the
# cleaning operation causes instance deletion to take
# significantly longer. In an environment where all tenants
# are trusted (eg, because there is only one tenant), this
# option could be safely disabled. (boolean value)
{%- if conductor.automated_clean is defined %}
automated_clean = {{ conductor.automated_clean }}
{%- else %}
#automated_clean = true
{%- endif %}

# Timeout (seconds) to wait for a callback from the ramdisk
# doing the cleaning. If the timeout is reached the node will
# be put in the "clean failed" provision state. Set to 0 to
# disable timeout. (integer value)
#clean_callback_timeout = 1800

# Timeout (in seconds) of soft reboot and soft power off
# operation. This value always has to be positive. (integer
# value)
# Minimum value: 1
#soft_power_off_timeout = 600


[console]

#
# From ironic
#

# Path to serial console terminal program. Used only by Shell
# In A Box console. (string value)
{%- if conductor.get('console', {}).terminal is defined %}
terminal = {{ conductor.console.terminal }}
{%- else %}
#terminal = shellinaboxd
{%- endif %}

# Directory containing the terminal SSL cert (PEM) for serial
# console access. Used only by Shell In A Box console. (string
# value)
{%- if conductor.get('console', {}).terminal_cert_dir is defined %}
terminal_cert_dir = {{ conductor.console.terminal_cert_dir }}
{%- else %}
#terminal_cert_dir = <None>
{%- endif %}

# Directory for holding terminal pid files. If not specified,
# the temporary directory will be used. (string value)
{%- if conductor.get('console', {}).terminal_pid_dir is defined %}
terminal_pid_dir = {{ conductor.console.terminal_pid_dir }}
{%- else %}
#terminal_pid_dir = <None>
{%- endif %}

# Time interval (in seconds) for checking the status of
# console subprocess. (integer value)
#subprocess_checking_interval = 1
{%- if conductor.get('console', {}).subprocess_checking_interval is defined %}
subprocess_checking_interval = {{ conductor.console.subprocess_checking_interval }}
{%- else %}
#subprocess_checking_interval = 1
{%- endif %}

# Time (in seconds) to wait for the console subprocess to
# start. (integer value)
{%- if conductor.get('console', {}).subprocess_timeout is defined %}
subprocess_timeout = {{ conductor.console.subprocess_timeout }}
{%- else %}
#subprocess_timeout = 10
{%- endif %}

[cors]

#
# From oslo.middleware.cors
#

# Indicate whether this resource may be shared with the domain
# received in the requests "origin" header. Format:
# "<protocol>://<host>[:<port>]", no trailing slash. Example:
# https://horizon.example.com (list value)
#allowed_origin = <None>

# Indicate that the actual request can include user
# credentials (boolean value)
#allow_credentials = true

# Indicate which headers are safe to expose to the API.
# Defaults to HTTP Simple Headers. (list value)
#expose_headers =

# Maximum cache age of CORS preflight requests. (integer
# value)
#max_age = 3600

# Indicate which methods can be used during the actual
# request. (list value)
#allow_methods = OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,PATCH

# Indicate which header field names may be used during the
# actual request. (list value)
#allow_headers =


[database]

#
# From ironic
#

# MySQL engine to use. (string value)
#mysql_engine = InnoDB

#
# From oslo.db
#

# DEPRECATED: The file name to use with SQLite. (string value)
# Deprecated group/name - [DEFAULT]/sqlite_db
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Should use config option connection or
# slave_connection to connect the database.
#sqlite_db = oslo.sqlite

# If True, SQLite uses synchronous mode. (boolean value)
# Deprecated group/name - [DEFAULT]/sqlite_synchronous
#sqlite_synchronous = true

# The back end to use for the database. (string value)
# Deprecated group/name - [DEFAULT]/db_backend
#backend = sqlalchemy

# The SQLAlchemy connection string to use to connect to the
# database. (string value)
# Deprecated group/name - [DEFAULT]/sql_connection
# Deprecated group/name - [DATABASE]/sql_connection
# Deprecated group/name - [sql]/connection
connection = {{ ironic.database.engine }}+pymysql://{{ ironic.database.user }}:{{ ironic.database.password }}@{{ ironic.database.host }}/{{ ironic.database.name }}?charset=utf8{{ connection_x509_ssl_option|string }}

# The SQLAlchemy connection string to use to connect to the
# slave database. (string value)
#slave_connection = <None>

# The SQL mode to be used for MySQL sessions. This option,
# including the default, overrides any server-set SQL mode. To
# use whatever SQL mode is set by the server configuration,
# set this to no value. Example: mysql_sql_mode= (string
# value)
#mysql_sql_mode = TRADITIONAL

# Timeout before idle SQL connections are reaped. (integer
# value)
# Deprecated group/name - [DEFAULT]/sql_idle_timeout
# Deprecated group/name - [DATABASE]/sql_idle_timeout
# Deprecated group/name - [sql]/idle_timeout
#idle_timeout = 3600

# Minimum number of SQL connections to keep open in a pool.
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_min_pool_size
# Deprecated group/name - [DATABASE]/sql_min_pool_size
#min_pool_size = 1

# Maximum number of SQL connections to keep open in a pool.
# Setting a value of 0 indicates no limit. (integer value)
# Deprecated group/name - [DEFAULT]/sql_max_pool_size
# Deprecated group/name - [DATABASE]/sql_max_pool_size
#max_pool_size = 5

# Maximum number of database connection retries during
# startup. Set to -1 to specify an infinite retry count.
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_max_retries
# Deprecated group/name - [DATABASE]/sql_max_retries
#max_retries = 10

# Interval between retries of opening a SQL connection.
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_retry_interval
# Deprecated group/name - [DATABASE]/reconnect_interval
#retry_interval = 10

# If set, use this value for max_overflow with SQLAlchemy.
# (integer value)
# Deprecated group/name - [DEFAULT]/sql_max_overflow
# Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
#max_overflow = 50

# Verbosity of SQL debugging information: 0=None,
# 100=Everything. (integer value)
# Minimum value: 0
# Maximum value: 100
# Deprecated group/name - [DEFAULT]/sql_connection_debug
#connection_debug = 0

# Add Python stack traces to SQL as comment strings. (boolean
# value)
# Deprecated group/name - [DEFAULT]/sql_connection_trace
#connection_trace = false

# If set, use this value for pool_timeout with SQLAlchemy.
# (integer value)
# Deprecated group/name - [DATABASE]/sqlalchemy_pool_timeout
#pool_timeout = <None>

# Enable the experimental use of database reconnect on
# connection lost. (boolean value)
#use_db_reconnect = false

# Seconds between retries of a database transaction. (integer
# value)
#db_retry_interval = 1

# If True, increases the interval between retries of a
# database operation up to db_max_retry_interval. (boolean
# value)
#db_inc_retry_interval = true

# If db_inc_retry_interval is set, the maximum seconds between
# retries of a database operation. (integer value)
#db_max_retry_interval = 10

# Maximum retries in case of connection error or deadlock
# error before error is raised. Set to -1 to specify an
# infinite retry count. (integer value)
#db_max_retries = 20


[deploy]

#
# From ironic
#

# ironic-conductor node's HTTP server URL. Example:
# http://192.1.2.3:8080 (string value)
{%- if conductor.get('http_url') %}
http_url = {{ conductor.http_url }}
{%- else %}
#http_url = <None>
{%- endif %}

# ironic-conductor node's HTTP root path. (string value)
{%- if conductor.get('http_root') %}
http_root = {{ conductor.http_root }}
{%- else %}
#http_root = /httpboot
{%- endif %}

# Priority to run in-band erase devices via the Ironic Python
# Agent ramdisk. If unset, will use the priority set in the
# ramdisk (defaults to 10 for the GenericHardwareManager). If
# set to 0, will not run during cleaning. (integer value)
{%- if conductor.erase_devices_priority is defined %}
erase_devices_priority = {{ conductor.erase_devices_priority }}
{%- else %}
#erase_devices_priority = <None>
{%- endif %}

# Priority to run in-band clean step that erases metadata from
# devices, via the Ironic Python Agent ramdisk. If unset, will
# use the priority set in the ramdisk (defaults to 99 for the
# GenericHardwareManager). If set to 0, will not run during
# cleaning. (integer value)
{%- if conductor.erase_devices_metadata_priority is defined %}
erase_devices_metadata_priority = {{ conductor.erase_devices_metadata_priority }}
{%- else %}
#erase_devices_metadata_priority = <None>
{%- endif %}

# During shred, overwrite all block devices N times with
# random data. This is only used if a device could not be ATA
# Secure Erased. Defaults to 1. (integer value)
# Minimum value: 0
#shred_random_overwrite_iterations = 1

# Whether to write zeros to a node's block devices after
# writing random data. This will write zeros to the device
# even when deploy.shred_random_overwrite_iterations is 0.
# This option is only used if a device could not be ATA Secure
# Erased. Defaults to True. (boolean value)
#shred_final_overwrite_with_zeros = true

# Defines what to do if an ATA secure erase operation fails
# during cleaning in the Ironic Python Agent. If False, the
# cleaning operation will fail and the node will be put in
# ``clean failed`` state. If True, shred will be invoked and
# cleaning will continue. (boolean value)
#continue_if_disk_secure_erase_fails = false

# Whether to power off a node after deploy failure. Defaults
# to True. (boolean value)
#power_off_after_deploy_failure = true

# Default boot option to use when no boot option is requested
# in node's driver_info. Currently the default is "netboot",
# but it will be changed to "local" in the future. It is
# recommended to set an explicit value for this option.
# (string value)
# Allowed values: netboot, local
{%- if conductor.default_boot_option is defined %}
default_boot_option = {{ conductor.default_boot_option }}
{%- else %}
#default_boot_option = <None>
{%- endif %}


[dhcp]

#
# From ironic
#

# DHCP provider to use. "neutron" uses Neutron, and "none"
# uses a no-op provider. (string value)
{%- if conductor.get('dhcp', {}).get('provider') %}
dhcp_provider = {{ conductor.dhcp.provider }}
{%- else %}
#dhcp_provider = neutron
{%- endif %}


[disk_partitioner]

#
# From ironic_lib.disk_partitioner
#

# After Ironic has completed creating the partition table, it
# continues to check for activity on the attached iSCSI device
# status at this interval prior to copying the image to the
# node, in seconds (integer value)
#check_device_interval = 1

# The maximum number of times to check that the device is not
# accessed by another process. If the device is still busy
# after that, the disk partitioning will be treated as having
# failed. (integer value)
#check_device_max_retries = 20


[disk_utils]

#
# From ironic_lib.disk_utils
#

# Size of EFI system partition in MiB when configuring UEFI
# systems for local boot. (integer value)
{%- if ironic.uefi.efi_system_partition_size is defined %}
efi_system_partition_size = {{ ironic.uefi.efi_system_partition_size }}
{%- else %}
#efi_system_partition_size = 200
{%- endif %}

# Size of BIOS Boot partition in MiB when configuring GPT
# partitioned systems for local boot in BIOS. (integer value)
#bios_boot_partition_size = 1

# Block size to use when writing to the nodes disk. (string
# value)
#dd_block_size = 1M

# Maximum attempts to verify an iSCSI connection is active,
# sleeping 1 second between attempts. (integer value)
#iscsi_verify_attempts = 3


[drac]

#
# From ironic
#

# Interval (in seconds) between periodic RAID job status
# checks to determine whether the asynchronous RAID
# configuration was successfully finished or not. (integer
# value)
#query_raid_config_job_status_interval = 120


[glance]

#
# From ironic
#

# A list of URL schemes that can be downloaded directly via
# the direct_url. Currently supported schemes: [file]. (list
# value)
#allowed_direct_url_schemes =

# Authentication URL (string value)
{%- if conductor.get('glance', {}).get('auth_strategy') == 'keystone' %}
auth_url = {{ conductor.identity.protocol }}://{{ conductor.identity.host }}:{{ conductor.identity.port }}
{%- if conductor.identity.protocol == 'https' %}
cafile={{ conductor.identity.get('cacert_file', conductor.cacert_file) }}
{%- endif %}
{%- else %}
#auth_url = <None>
{%- endif %}

# Authentication strategy to use when connecting to glance.
# (string value)
# Allowed values: keystone, noauth
{%- if conductor.get('glance', {}).get('auth_strategy') %}
auth_strategy = {{ conductor.glance.auth_strategy }}
{%- else %}
#auth_strategy = keystone
{%- endif %}

# Authentication type to load (string value)
# Deprecated group/name - [glance]/auth_plugin
{%- if conductor.get('glance', {}).get('auth_type') %}
auth_type = {{ conductor.glance.auth_type }}
{%- else %}
#auth_type = <None>
{%- endif %}

# 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>

# Allow to perform insecure SSL (https) requests to glance.
# (boolean value)
#glance_api_insecure = false

# A list of the glance api servers available to ironic. Prefix
# with https:// for SSL-based glance API servers. Format is
# [hostname|IP]:port. (list value)
#glance_api_servers = <None>

# DEPRECATED: Glance API version (1 or 2) to use. (integer
# value)
# Minimum value: 1
# Maximum value: 2
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Ironic will only support using Glance API version 2
# in the Queens release.
#glance_api_version = 2

# Optional path to a CA certificate bundle to be used to
# validate the SSL certificate served by glance. It is used
# when glance_api_insecure is set to False. (string value)
#glance_cafile = <None>

# Default glance hostname or IP address. (string value)
{%- if conductor.get('glance', {}).get('host') %}
glance_host = {{ conductor.glance.host }}
{%- else %}
#glance_host = $my_ip
{%- endif %}

# Number of retries when downloading an image from glance.
# (integer value)
#glance_num_retries = 0

# Default glance port. (port value)
# Minimum value: 0
# Maximum value: 65535
{%- if conductor.get('glance', {}).get('port') %}
glance_port = {{ conductor.glance.port }}
{%- else %}
#glance_port = 9292
{%- endif %}

# Default protocol to use when connecting to glance. Set to
# https for SSL. (string value)
# Allowed values: http, https
{%- if conductor.get('glance', {}).get('protocol') %}
glance_protocol = {{ conductor.glance.protocol }}
{%- else %}
#glance_protocol = http
{%- endif %}

# Verify HTTPS connections. (boolean value)
#insecure = false

# PEM encoded client certificate key file (string value)
#keyfile = <None>

# User's password (string value)
{%- if conductor.get('glance', {}).get('password') %}
password = {{ conductor.glance.password }}
{%- else %}
#password = <None>
{%- endif %}

# Domain ID containing project (string value)
{%- if conductor.get('glance', {}).get('project_domain_id') %}
project_domain_id = {{ conductor.glance.project_domain_id }}
{%- else %}
#project_domain_id = <None>
{%- endif %}

# Domain name containing project (string value)
{%- if conductor.get('glance', {}).get('project_domain_name') %}
project_domain_name = {{ conductor.glance.project_domain_name }}
{%- else %}
#project_domain_name = <None>
{%- endif %}

# Project ID to scope to (string value)
# Deprecated group/name - [glance]/tenant-id
{%- if conductor.get('glance', {}).get('project_id') %}
project_id = {{ conductor.glance.project_id }}
{%- else %}
#project_id = <None>
{%- endif %}

# Project name to scope to (string value)
# Deprecated group/name - [glance]/tenant-name
{%- if conductor.get('glance', {}).get('project_name') %}
project_name = {{ conductor.glance.project_name }}
{%- else %}
#project_name = <None>
{%- endif %}

# The account that Glance uses to communicate with Swift. The
# format is "AUTH_uuid". "uuid" is the UUID for the account
# configured in the glance-api.conf. Required for temporary
# URLs when Glance backend is Swift. For example:
# "AUTH_a422b2-91f3-2f46-74b7-d7c9e8958f5d30". Swift temporary
# URL format:
# "endpoint_url/api_version/[account/]container/object_id"
# (string value)
#swift_account = <None>

# The Swift API version to create a temporary URL for.
# Defaults to "v1". Swift temporary URL format:
# "endpoint_url/api_version/[account/]container/object_id"
# (string value)
#swift_api_version = v1

# The Swift container Glance is configured to store its images
# in. Defaults to "glance", which is the default in glance-
# api.conf. Swift temporary URL format:
# "endpoint_url/api_version/[account/]container/object_id"
# (string value)
#swift_container = glance

# The "endpoint" (scheme, hostname, optional port) for the
# Swift URL of the form
# "endpoint_url/api_version/[account/]container/object_id". Do
# not include trailing "/". For example, use
# "https://swift.example.com". If using RADOS Gateway,
# endpoint may also contain /swift path; if it does not, it
# will be appended. Required for temporary URLs. (string
# value)
#swift_endpoint_url = <None>

# This should match a config by the same name in the Glance
# configuration file. When set to 0, a single-tenant store
# will only use one container to store all images. When set to
# an integer value between 1 and 32, a single-tenant store
# will use multiple containers to store images, and this value
# will determine how many containers are created. (integer
# value)
#swift_store_multiple_containers_seed = 0

# Whether to cache generated Swift temporary URLs. Setting it
# to true is only useful when an image caching proxy is used.
# Defaults to False. (boolean value)
#swift_temp_url_cache_enabled = false

# The length of time in seconds that the temporary URL will be
# valid for. Defaults to 20 minutes. If some deploys get a 401
# response code when trying to download from the temporary
# URL, try raising this duration. This value must be greater
# than or equal to the value for
# swift_temp_url_expected_download_start_delay (integer value)
#swift_temp_url_duration = 1200

# This is the delay (in seconds) from the time of the deploy
# request (when the Swift temporary URL is generated) to when
# the IPA ramdisk starts up and URL is used for the image
# download. This value is used to check if the Swift temporary
# URL duration is large enough to let the image download
# begin. Also if temporary URL caching is enabled this will
# determine if a cached entry will still be valid when the
# download starts. swift_temp_url_duration value must be
# greater than or equal to this option's value. Defaults to 0.
# (integer value)
# Minimum value: 0
#swift_temp_url_expected_download_start_delay = 0

# The secret token given to Swift to allow temporary URL
# downloads. Required for temporary URLs. (string value)
{%- if conductor.get('glance', {}).get('swift_temp_url_key') %}
swift_temp_url_key = {{ conductor.glance.swift_temp_url_key }}
{%- else %}
#swift_temp_url_key = <None>
{%- endif %}

# Type of endpoint to use for temporary URLs. If the Glance
# backend is Swift, use "swift"; if it is CEPH with RADOS
# gateway, use "radosgw". (string value)
# Allowed values: swift, radosgw
#temp_url_endpoint_type = swift

# 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's domain name (string value)
{%- if conductor.get('glance', {}).get('user_domain_name') %}
user_domain_name = {{ conductor.glance.user_domain_name }}
{%- else %}
#user_domain_name = <None>
{%- endif %}

# User id (string value)
#user_id = <None>

# Username (string value)
# Deprecated group/name - [glance]/user-name
{%- if conductor.get('glance', {}).get('username') %}
username = {{ conductor.glance.username }}
{%- else %}
#username = <None>
{%- endif %}


[ilo]

#
# From ironic
#

# Timeout (in seconds) for iLO operations (integer value)
{%- if conductor.get('ilo', {}).get('client_timeout') %}
client_timeout = {{ conductor.ilo.client_timeout }}
{%- else %}
#client_timeout = 60
{%- endif %}

# Port to be used for iLO operations (port value)
# Minimum value: 0
# Maximum value: 65535
{%- if conductor.get('ilo', {}).get('client_port') %}
client_port = {{ conductor.ilo.client_port }}
{%- else %}
#client_port = 443
{%- endif %}

# The Swift iLO container to store data. (string value)
{%- if conductor.get('ilo', {}).get('swift_ilo_container') %}
swift_ilo_container = {{ conductor.ilo.swift_ilo_container }}
{%- else %}
#swift_ilo_container = ironic_ilo_container
{%- endif %}

# Amount of time in seconds for Swift objects to auto-expire.
# (integer value)
{%- if conductor.get('ilo', {}).get('swift_object_expiry_timeout') %}
swift_object_expiry_timeout = {{ conductor.ilo.swift_object_expiry_timeout }}
{%- else %}
#swift_object_expiry_timeout = 900
{%- endif %}

# Set this to True to use http web server to host floppy
# images and generated boot ISO. This requires http_root and
# http_url to be configured in the [deploy] section of the
# config file. If this is set to False, then Ironic will use
# Swift to host the floppy images and generated boot_iso.
# (boolean value)
{%- if conductor.get('ilo', {}).get('use_web_server_for_images') %}
use_web_server_for_images = {{ conductor.ilo.use_web_server_for_images }}
{%- else %}
#use_web_server_for_images = false
{%- endif %}

# DEPRECATED: Priority for erase devices clean step. If unset,
# it defaults to 10. If set to 0, the step will be disabled
# and will not run during cleaning. (integer value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: This configuration option is duplicated by [deploy]
# erase_devices_priority, please use that instead.
{%- if conductor.get('ilo', {}).get('clean_priority_erase_devices') %}
clean_priority_erase_devices = {{ conductor.ilo.clean_priority_erase_devices }}
{%- else %}
#clean_priority_erase_devices = <None>
{%- endif %}

# Priority for reset_ilo clean step. (integer value)
{%- if conductor.get('ilo', {}).get('clean_priority_reset_ilo') %}
clean_priority_reset_ilo = {{ conductor.ilo.clean_priority_reset_ilo }}
{%- else %}
#clean_priority_reset_ilo = 0
{%- endif %}

# Priority for reset_bios_to_default clean step. (integer
# value)
{%- if conductor.get('ilo', {}).get('clean_priority_reset_bios_to_default') %}
clean_priority_reset_bios_to_default = {{ conductor.ilo.clean_priority_reset_bios_to_default }}
{%- else %}
#clean_priority_reset_bios_to_default = 10
{%- endif %}

# Priority for reset_secure_boot_keys clean step. This step
# will reset the secure boot keys to manufacturing defaults.
# (integer value)
{%- if conductor.get('ilo', {}).get('clean_priority_reset_secure_boot_keys_to_default') %}
clean_priority_reset_secure_boot_keys_to_default = {{ conductor.ilo.clean_priority_reset_secure_boot_keys_to_default }}
{%- else %}
#clean_priority_reset_secure_boot_keys_to_default = 20
{%- endif %}

# Priority for clear_secure_boot_keys clean step. This step is
# not enabled by default. It can be enabled to clear all
# secure boot keys enrolled with iLO. (integer value)
{%- if conductor.get('ilo', {}).get('clean_priority_clear_secure_boot_keys') %}
clean_priority_clear_secure_boot_keys = {{ conductor.ilo.clean_priority_clear_secure_boot_keys }}
{%- else %}
#clean_priority_clear_secure_boot_keys = 0
{%- endif %}

# Priority for reset_ilo_credential clean step. This step
# requires "ilo_change_password" parameter to be updated in
# nodes's driver_info with the new password. (integer value)
{%- if conductor.get('ilo', {}).get('clean_priority_reset_ilo_credential') %}
clean_priority_reset_ilo_credential = {{ conductor.ilo.clean_priority_reset_ilo_credential }}
{%- else %}
#clean_priority_reset_ilo_credential = 30
{%- endif %}

# Number of times a power operation needs to be retried
# (integer value)
{%- if conductor.get('ilo', {}).get('power_retry') %}
power_retry = {{ conductor.ilo.power_retry }}
{%- else %}
#power_retry = 6
{%- endif %}

# Amount of time in seconds to wait in between power
# operations (integer value)
{%- if conductor.get('ilo', {}).get('power_wait') %}
power_wait = {{ conductor.ilo.power_wait }}
{%- else %}
#power_wait = 2
{%- endif %}

# CA certificate file to validate iLO. (string value)
{%- if conductor.get('ilo', {}).get('ca_file') %}
ca_file = {{ conductor.ilo.ca_file }}
{%- else %}
#ca_file = <None>
{%- endif %}

# Default boot mode to be used in provisioning when
# "boot_mode" capability is not provided in the
# "properties/capabilities" of the node. The default is "auto"
# for backward compatibility. When "auto" is specified,
# default boot mode will be selected based on boot mode
# settings on the system. (string value)
# Allowed values: auto, bios, uefi
{%- if conductor.get('ilo', {}).get('default_boot_mode') %}
default_boot_mode = {{ conductor.ilo.default_boot_mode }}
{%- else %}
#default_boot_mode = auto
{%- endif %}


[inspector]

#
# From ironic
#

# Authentication URL (string value)
#auth_url = <None>

# Authentication type to load (string value)
# Deprecated group/name - [inspector]/auth_plugin
#auth_type = <None>

# 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>

# whether to enable inspection using ironic-inspector. This
# option does not affect new-style dynamic drivers and the
# fake_inspector driver. (boolean value)
#enabled = false

# Verify HTTPS connections. (boolean value)
#insecure = false

# PEM encoded client certificate key file (string value)
#keyfile = <None>

# User's password (string value)
#password = <None>

# Domain ID containing project (string value)
#project_domain_id = <None>

# Domain name containing project (string value)
#project_domain_name = <None>

# Project ID to scope to (string value)
# Deprecated group/name - [inspector]/tenant-id
#project_id = <None>

# Project name to scope to (string value)
# Deprecated group/name - [inspector]/tenant-name
#project_name = <None>

# ironic-inspector HTTP endpoint. If this is not set, the
# service catalog will be used. (string value)
#service_url = <None>

# period (in seconds) to check status of nodes on inspection
# (integer value)
#status_check_period = 60

# 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's domain name (string value)
#user_domain_name = <None>

# User id (string value)
#user_id = <None>

# Username (string value)
# Deprecated group/name - [inspector]/user-name
#username = <None>


[ipmi]

#
# From ironic
#

# Maximum time in seconds to retry IPMI operations. There is a
# tradeoff when setting this value. Setting this too low may
# cause older BMCs to crash and require a hard reset. However,
# setting too high can cause the sync power state periodic
# task to hang when there are slow or unresponsive BMCs.
# (integer value)
#retry_timeout = 60

# Minimum time, in seconds, between IPMI operations sent to a
# server. There is a risk with some hardware that setting this
# too low may cause the BMC to crash. Recommended setting is 5
# seconds. (integer value)
#min_command_interval = 5


[irmc]

#
# From ironic
#

# Ironic conductor node's "NFS" or "CIFS" root path (string
# value)
#remote_image_share_root = /remote_image_share_root

# IP of remote image server (string value)
#remote_image_server = <None>

# Share type of virtual media (string value)
# Allowed values: CIFS, NFS
#remote_image_share_type = CIFS

# share name of remote_image_server (string value)
#remote_image_share_name = share

# User name of remote_image_server (string value)
#remote_image_user_name = <None>

# Password of remote_image_user_name (string value)
#remote_image_user_password = <None>

# Domain name of remote_image_user_name (string value)
#remote_image_user_domain =

# Port to be used for iRMC operations (port value)
# Minimum value: 0
# Maximum value: 65535
# Allowed values: 443, 80
#port = 443

# Authentication method to be used for iRMC operations (string
# value)
# Allowed values: basic, digest
#auth_method = basic

# Timeout (in seconds) for iRMC operations (integer value)
#client_timeout = 60

# Sensor data retrieval method. (string value)
# Allowed values: ipmitool, scci
#sensor_method = ipmitool

# SNMP protocol version (string value)
# Allowed values: v1, v2c, v3
#snmp_version = v2c

# SNMP port (port value)
# Minimum value: 0
# Maximum value: 65535
#snmp_port = 161

# SNMP community. Required for versions "v1" and "v2c" (string
# value)
#snmp_community = public

# SNMP security name. Required for version "v3" (string value)
#snmp_security = <None>

# SNMP polling interval in seconds (integer value)
#snmp_polling_interval = 10


[ironic_lib]

#
# From ironic_lib.utils
#

# Command that is prefixed to commands that are run as root.
# If not specified, no commands are run as root. (string
# value)
#root_helper = sudo ironic-rootwrap /etc/ironic/rootwrap.conf


[iscsi]

#
# From ironic
#

# The port number on which the iSCSI portal listens for
# incoming connections. (port value)
# Minimum value: 0
# Maximum value: 65535
#portal_port = 3260


[keystone]

#
# From ironic
#

# The region used for getting endpoints of OpenStack services.
# (string value)
{%- if ironic.get('identity', {}).get('region') %}
region_name = {{ ironic.identity.region }}
{%- else %}
#region_name = <None>
{%- endif %}


[keystone_authtoken]

#
# From keystonemiddleware.auth_token
#

# Authentication URL (string value)
{%- if ironic.get('identity', {}).get('engine') == 'keystone' %}
auth_url = {{ ironic.identity.protocol }}://{{ ironic.identity.host }}:{{ ironic.identity.port }}
{%- if ironic.identity.protocol == 'https' %}
cafile={{ ironic.identity.get('cacert_file', ironic.cacert_file) }}
{%- endif %}
{%- else %}
#auth_uri = <None>
{%- endif %}

# Authentication type to load (string value)
# Deprecated group/name - [service_catalog]/auth_plugin
{%- if ironic.get('identity', {}).get('auth_type') %}
auth_type = {{ ironic.identity.auth_type }}
{%- else %}
#auth_type = <None>
{%- endif %}

# 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)
{%- if ironic.get('identity', {}).get('default_domain_id') %}
default_domain_id = {{ ironic.identity.default_domain_id }}
{%- else %}
#default_domain_id = <None>
{%- endif %}

# 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)
{%- if ironic.get('identity', {}).get('default_domain_name') %}
default_domain_name = {{ ironic.identity.default_domain_name }}
{%- else %}
#default_domain_name = <None>
{%- endif %}

# Domain ID to scope to (string value)
{%- if ironic.get('identity', {}).get('domain_id') %}
domain_id = {{ ironic.identity.domain_id }}
{%- else %}
#domain_id = <None>
{%- endif %}

# Domain name to scope to (string value)
{%- if ironic.get('identity', {}).get('domain_name') %}
domain_name = {{ ironic.identity.domain_name }}
{%- else %}
#domain_name = <None>
{%- endif %}

# User's password (string value)
{%- if ironic.get('identity', {}).get('password') %}
password = {{ ironic.identity.password }}
{%- else %}
#password = <None>
{%- endif %}

# Domain ID containing project (string value)
{%- if ironic.get('identity', {}).get('project_domain_id') %}
project_domain_id = {{ ironic.identity.project_domain_id }}
{%- else %}
#project_domain_id = <None>
{%- endif %}

# Domain name containing project (string value)
{%- if ironic.get('identity', {}).get('project_domain_name') %}
project_domain_name = {{ ironic.identity.project_domain_name }}
{%- else %}
#project_domain_name = <None>
{%- endif %}

# Project ID to scope to (string value)
# Deprecated group/name - [service_catalog]/tenant-id
{%- if ironic.get('identity', {}).get('project_id') %}
project_id = {{ ironic.identity.project_id }}
{%- else %}
#project_id = <None>
{%- endif %}

# Project name to scope to (string value)
# Deprecated group/name - [service_catalog]/tenant-name
{%- if ironic.get('identity', {}).get('project_name') %}
project_name = {{ ironic.identity.project_name }}
{%- else %}
#project_name = <None>
{%- endif %}

# Tenant ID (string value)
{%- if ironic.get('identity', {}).get('tenant_id') %}
tenant_id = {{ ironic.identity.tenant_id }}
{%- else %}
#tenant_id = <None>
{%- endif %}

# Tenant Name (string value)
{%- if ironic.get('identity', {}).get('tenant_name') %}
tenant_name = {{ ironic.identity.tenant_name }}
{%- else %}
#tenant_name = <None>
{%- endif %}

# User's domain id (string value)
{%- if ironic.get('identity', {}).get('user_domain_id') %}
user_domain_id = {{ ironic.identity.user_domain_id }}
{%- else %}
#user_domain_id = <None>
{%- endif %}

# User's domain name (string value)
{%- if ironic.get('identity', {}).get('user_domain_name') %}
user_domain_name = {{ ironic.identity.user_domain_name }}
{%- else %}
#user_domain_name = <None>
{%- endif %}

# User id (string value)
{%- if ironic.get('identity', {}).get('user_id')  %}
user_id = {{ ironic.identity.user_id }}
{%- else %}
#user_id = <None>
{%- endif %}

# Username (string value)
# Deprecated group/name - [service_catalog]/user-name
{%- if ironic.get('identity', {}).get('user') %}
username = {{ ironic.identity.user }}
{%- else %}
#username = <None>
{%- endif %}

# API version of the admin Identity API endpoint. (string
# value)
{%- if ironic.get('identity', {}).get('version') %}
auth_version = {{ ironic.identity.version }}
{%- else %}
#auth_version = <None>
{%- endif %}

# Do not handle authorization requests within the middleware,
# but delegate the authorization decision to downstream WSGI
# components. (boolean value)
#delay_auth_decision = false

# Request timeout value for communicating with Identity API
# server. (integer value)
#http_connect_timeout = <None>

# How many times are we trying to reconnect when communicating
# with Identity API Server. (integer value)
#http_request_max_retries = 3

# Request environment key where the Swift cache object is
# stored. When auth_token middleware is deployed with a Swift
# cache, use this option to have the middleware share a
# caching backend with swift. Otherwise, use the
# ``memcached_servers`` option instead. (string value)
#cache = <None>

# Required if identity server requires client certificate
# (string value)
#certfile = <None>

# Required if identity server requires client certificate
# (string value)
#keyfile = <None>

# A PEM encoded Certificate Authority to use when verifying
# HTTPs connections. Defaults to system CAs. (string value)
#cafile = <None>

# Verify HTTPS connections. (boolean value)
#insecure = false

# The region in which the identity server can be found.
# (string value)
#region_name = <None>

# DEPRECATED: Directory used to cache files related to PKI
# tokens. This option has been deprecated in the Ocata release
# and will be removed in the P release. (string value)
# This option is deprecated for removal since Ocata.
# Its value may be silently ignored in the future.
# Reason: PKI token format is no longer supported.
#signing_dir = <None>

# Optionally specify a list of memcached server(s) to use for
# caching. If left undefined, tokens will instead be cached
# in-process. (list value)
# Deprecated group/name - [keystone_authtoken]/memcache_servers
{%- if ironic.get('cache', {}).members is defined %}
memcached_servers={%- for member in ironic.cache.members %}{{ member.host }}:11211{% if not loop.last %},{% endif %}{%- endfor %}
  {%- if ironic.cache.get('security', {}).get('enabled', False) %}
memcache_security_strategy = {{ ironic.cache.security.get('strategy', 'ENCRYPT') }}
    {%- if ironic.cache.security.secret_key is not defined or not ironic.cache.security.secret_key %}
    {%- do salt.test.exception('ironic.cache.security.secret_key is not defined: Please add secret_key') %}
    {%- else %}
memcache_secret_key = {{ ironic.cache.security.secret_key }}
    {%- endif %}
  {%- endif %}
{%- endif %}

# In order to prevent excessive effort spent validating
# tokens, the middleware caches previously-seen tokens for a
# configurable duration (in seconds). Set to -1 to disable
# caching completely. (integer value)
#token_cache_time = 300

# DEPRECATED: Determines the frequency at which the list of
# revoked tokens is retrieved from the Identity service (in
# seconds). A high number of revocation events combined with a
# low cache duration may significantly reduce performance.
# Only valid for PKI tokens. This option has been deprecated
# in the Ocata release and will be removed in the P release.
# (integer value)
# This option is deprecated for removal since Ocata.
# Its value may be silently ignored in the future.
# Reason: PKI token format is no longer supported.
#revocation_cache_time = 10

# (Optional) If defined, indicate whether token data should be
# authenticated or authenticated and encrypted. If MAC, token
# data is authenticated (with HMAC) in the cache. If ENCRYPT,
# token data is encrypted and authenticated in the cache. If
# the value is not one of these options or empty, auth_token
# will raise an exception on initialization. (string value)
# Allowed values: None, MAC, ENCRYPT
#memcache_security_strategy = None

# (Optional, mandatory if memcache_security_strategy is
# defined) This string is used for key derivation. (string
# value)
#memcache_secret_key = <None>

# (Optional) Number of seconds memcached server is considered
# dead before it is tried again. (integer value)
#memcache_pool_dead_retry = 300

# (Optional) Maximum total number of open connections to every
# memcached server. (integer value)
#memcache_pool_maxsize = 10

# (Optional) Socket timeout in seconds for communicating with
# a memcached server. (integer value)
#memcache_pool_socket_timeout = 3

# (Optional) Number of seconds a connection to memcached is
# held unused in the pool before it is closed. (integer value)
#memcache_pool_unused_timeout = 60

# (Optional) Number of seconds that an operation will wait to
# get a memcached client connection from the pool. (integer
# value)
#memcache_pool_conn_get_timeout = 10

# (Optional) Use the advanced (eventlet safe) memcached client
# pool. The advanced pool will only work under python 2.x.
# (boolean value)
#memcache_use_advanced_pool = false

# (Optional) Indicate whether to set the X-Service-Catalog
# header. If False, middleware will not ask for service
# catalog on token validation and will not set the X-Service-
# Catalog header. (boolean value)
#include_service_catalog = true

# Used to control the use and type of token binding. Can be
# set to: "disabled" to not check token binding. "permissive"
# (default) to validate binding information if the bind type
# is of a form known to the server and ignore it if not.
# "strict" like "permissive" but if the bind type is unknown
# the token will be rejected. "required" any form of token
# binding is needed to be allowed. Finally the name of a
# binding method that must be present in tokens. (string
# value)
#enforce_token_bind = permissive

# DEPRECATED: If true, the revocation list will be checked for
# cached tokens. This requires that PKI tokens are configured
# on the identity server. (boolean value)
# This option is deprecated for removal since Ocata.
# Its value may be silently ignored in the future.
# Reason: PKI token format is no longer supported.
#check_revocations_for_cached = false

# DEPRECATED: Hash algorithms to use for hashing PKI tokens.
# This may be a single algorithm or multiple. The algorithms
# are those supported by Python standard hashlib.new(). The
# hashes will be tried in the order given, so put the
# preferred one first for performance. The result of the first
# hash will be stored in the cache. This will typically be set
# to multiple values only while migrating from a less secure
# algorithm to a more secure one. Once all the old tokens are
# expired this option should be set to a single value for
# better performance. (list value)
# This option is deprecated for removal since Ocata.
# Its value may be silently ignored in the future.
# Reason: PKI token format is no longer supported.
#hash_algorithms = md5

# A choice of roles that must be present in a service token.
# Service tokens are allowed to request that an expired token
# can be used and so this check should tightly control that
# only actual services should be sending this token. Roles
# here are applied as an ANY check so any role in this list
# must be present. For backwards compatibility reasons this
# currently only affects the allow_expired check. (list value)
#service_token_roles = service

# For backwards compatibility reasons we must let valid
# service tokens pass that don't pass the service_token_roles
# check as valid. Setting this true will become the default in
# a future release and should be enabled if possible. (boolean
# value)
#service_token_roles_required = false

# Authentication type to load (string value)
# Deprecated group/name - [keystone_authtoken]/auth_plugin
{%- if ironic.get('identity', {}).get('auth_type') %}
auth_type = {{ ironic.identity.auth_type }}
{%- else %}
#auth_type = <None>
{%- endif %}

# Config Section from which to load plugin specific options
# (string value)
#auth_section = <None>


[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


[metrics]

#
# From ironic
#

# Backend for the agent ramdisk to use for metrics. Default
# possible backends are "noop" and "statsd". (string value)
#agent_backend = noop

# Prepend the hostname to all metric names sent by the agent
# ramdisk. The format of metric names is
# [global_prefix.][uuid.][host_name.]prefix.metric_name.
# (boolean value)
#agent_prepend_host = false

# Prepend the node's Ironic uuid to all metric names sent by
# the agent ramdisk. The format of metric names is
# [global_prefix.][uuid.][host_name.]prefix.metric_name.
# (boolean value)
#agent_prepend_uuid = false

# Split the prepended host value by "." and reverse it for
# metrics sent by the agent ramdisk (to better match the
# reverse hierarchical form of domain names). (boolean value)
#agent_prepend_host_reverse = true

# Prefix all metric names sent by the agent ramdisk with this
# value. The format of metric names is
# [global_prefix.][uuid.][host_name.]prefix.metric_name.
# (string value)
#agent_global_prefix = <None>

#
# From ironic_lib.metrics
#

# Backend to use for the metrics system. (string value)
# Allowed values: noop, statsd
#backend = noop

# Prepend the hostname to all metric names. The format of
# metric names is
# [global_prefix.][host_name.]prefix.metric_name. (boolean
# value)
#prepend_host = false

# Split the prepended host value by "." and reverse it (to
# better match the reverse hierarchical form of domain names).
# (boolean value)
#prepend_host_reverse = true

# Prefix all metric names with this value. By default, there
# is no global prefix. The format of metric names is
# [global_prefix.][host_name.]prefix.metric_name. (string
# value)
#global_prefix = <None>


[metrics_statsd]

#
# From ironic
#

# Host for the agent ramdisk to use with the statsd backend.
# This must be accessible from networks the agent is booted
# on. (string value)
#agent_statsd_host = localhost

# Port for the agent ramdisk to use with the statsd backend.
# (port value)
# Minimum value: 0
# Maximum value: 65535
#agent_statsd_port = 8125

#
# From ironic_lib.metrics_statsd
#

# Host for use with the statsd backend. (string value)
#statsd_host = localhost

# Port to use with the statsd backend. (port value)
# Minimum value: 0
# Maximum value: 65535
#statsd_port = 8125


[neutron]

#
# From ironic
#

# Authentication URL (string value)
{%- if conductor.get('neutron', {}).get('auth_strategy') == 'keystone' %}
auth_url = {{ conductor.identity.protocol }}://{{ conductor.identity.host }}:{{ conductor.identity.port }}
{%- if conductor.identity.protocol == 'https' %}
cafile={{ conductor.identity.get('cacert_file', conductor.cacert_file) }}
{%- endif %}
{%- else %}
#auth_url = <None>
{%- endif %}

# Authentication strategy to use when connecting to neutron.
# Running neutron in noauth mode (related to but not affected
# by this setting) is insecure and should only be used for
# testing. (string value)
# Allowed values: keystone, noauth
{%- if conductor.get('neutron', {}).get('auth_strategy') %}
auth_strategy = {{ conductor.neutron.auth_strategy }}
{%- else %}
#auth_strategy = keystone
{%- endif %}

# Authentication type to load (string value)
# Deprecated group/name - [neutron]/auth_plugin
{%- if conductor.get('neutron', {}).get('auth_type') %}
auth_type = {{ conductor.neutron.auth_type }}
{%- else %}
#auth_type = <None>
{%- endif %}

# PEM encoded Certificate Authority to use when verifying
# HTTPs connections. (string value)
#cafile = <None>

# PEM encoded client certificate cert file (string value)
#certfile = <None>

# Neutron network UUID or name for the ramdisk to be booted
# into for cleaning nodes. Required for "neutron" network
# interface. It is also required if cleaning nodes when using
# "flat" network interface or "neutron" DHCP provider. If a
# name is provided, it must be unique among all networks or
# cleaning will fail. (string value)
# Deprecated group/name - [neutron]/cleaning_network_uuid
{%- if conductor.get('neutron', {}).get('cleaning_network') %}
cleaning_network = {{ conductor.neutron.cleaning_network }}
{%- else %}
#cleaning_network = <None>
{%- endif %}

# List of Neutron Security Group UUIDs to be applied during
# cleaning of the nodes. Optional for the "neutron" network
# interface and not used for the "flat" or "noop" network
# interfaces. If not specified, default security group is
# used. (list value)
#cleaning_network_security_groups =

# 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)
{%- if conductor.get('neutron', {}).get('password') %}
password = {{ conductor.neutron.password }}
{%- else %}
#password = <None>
{%- endif %}

# Delay value to wait for Neutron agents to setup sufficient
# DHCP configuration for port. (integer value)
# Minimum value: 0
{%- if conductor.get('neutron', {}).get('port_setup_delay') %}
port_setup_delay = {{ conductor.neutron.port_setup_delay }}
{%- else %}
#port_setup_delay = 0
{%- endif %}

# Domain ID containing project (string value)
{%- if conductor.get('neutron', {}).get('project_domain_id') %}
project_domain_id = {{ conductor.neutron.project_domain_id }}
{%- else %}
#project_domain_id = <None>
{%- endif %}

# Domain name containing project (string value)
{%- if conductor.get('neutron', {}).get('project_domain_name') %}
project_domain_name = {{ conductor.neutron.project_domain_name }}
{%- else %}
#project_domain_name = <None>
{%- endif %}

# Project ID to scope to (string value)
# Deprecated group/name - [neutron]/tenant-id
{%- if conductor.get('neutron', {}).get('project_id') %}
project_id = {{ conductor.neutron.project_id }}
{%- else %}
#project_id = <None>
{%- endif %}

# Project name to scope to (string value)
# Deprecated group/name - [neutron]/tenant-name
{%- if conductor.get('neutron', {}).get('project_name') %}
project_name = {{ conductor.neutron.project_name }}
{%- else %}
#project_name = <None>
{%- endif %}

# Neutron network UUID or name for the ramdisk to be booted
# into for provisioning nodes. Required for "neutron" network
# interface. If a name is provided, it must be unique among
# all networks or deploy will fail. (string value)
# Deprecated group/name - [neutron]/provisioning_network_uuid
{%- if conductor.get('neutron', {}).get('provisioning_network') %}
provisioning_network = {{ conductor.neutron.provisioning_network }}
{%- else %}
#provisioning_network = <None>
{%- endif %}

# List of Neutron Security Group UUIDs to be applied during
# provisioning of the nodes. Optional for the "neutron"
# network interface and not used for the "flat" or "noop"
# network interfaces. If not specified, default security group
# is used. (list value)
#provisioning_network_security_groups =

# Client retries in the case of a failed request. (integer
# value)
#retries = 3

# Tenant ID (string value)
{%- if conductor.get('neutron', {}).get('tenant_id') %}
tenant_id = {{ conductor.neutron.tenant_id }}
{%- else %}
#tenant_id = <None>
{%- endif %}

# Tenant Name (string value)
#tenant_name = <None>

# Timeout value for http requests (integer value)
#timeout = <None>

# Trust ID (string value)
#trust_id = <None>

# URL for connecting to neutron. Default value translates to
# 'http://$my_ip:9696' when auth_strategy is 'noauth', and to
# discovery from Keystone catalog when auth_strategy is
# 'keystone'. (string value)
{%- if conductor.get('neutron', {}).get('url') %}
url = {{ conductor.neutron.url }}
{%- else %}
#url = <None>
{%- endif %}

# Timeout value for connecting to neutron in seconds. (integer
# value)
#url_timeout = 30

# User's domain id (string value)
{%- if conductor.get('neutron', {}).get('user_domain_id') %}
user_domain_id = {{ conductor.neutron.user_domain_id }}
{%- else %}
#user_domain_id = <None>
{%- endif %}

# User's domain name (string value)
{%- if conductor.get('neutron', {}).get('user_domain_name') %}
user_domain_name = {{ conductor.neutron.user_domain_name }}
{%- else %}
#user_domain_name = <None>
{%- endif %}

# User id (string value)
{%- if conductor.get('neutron', {}).get('user_id') %}
user_id = {{ conductor.neutron.user_id }}
{%- else %}
#user_id = <None>
{%- endif %}

# Username (string value)
# Deprecated group/name - [neutron]/user-name
{%- if conductor.get('neutron', {}).get('username') %}
username = {{ conductor.neutron.username }}
{%- else %}
#username = <None>
{%- endif %}


[oneview]

#
# From ironic
#

# URL where OneView is available. (string value)
#manager_url = <None>

# OneView username to be used. (string value)
#username = <None>

# OneView password to be used. (string value)
#password = <None>

# Option to allow insecure connection with OneView. (boolean
# value)
#allow_insecure_connections = false

# Path to CA certificate. (string value)
#tls_cacert_file = <None>

# Max connection retries to check changes on OneView. (integer
# value)
#max_polling_attempts = 12

# Whether to enable the periodic tasks for OneView driver be
# aware when OneView hardware resources are taken and released
# by Ironic or OneView users and proactively manage nodes in
# clean fail state according to Dynamic Allocation model of
# hardware resources allocation in OneView. (boolean value)
#enable_periodic_tasks = true

# Period (in seconds) for periodic tasks to be executed when
# enable_periodic_tasks=True. (integer value)
#periodic_check_interval = 300


[oslo_concurrency]

#
# From oslo.concurrency
#

# Enables or disables inter-process locks. (boolean value)
# Deprecated group/name - [DEFAULT]/disable_process_locking
#disable_process_locking = false

# Directory to use for lock files. For security, the
# specified directory should only be writable by the user
# running the processes that need locking. Defaults to
# environment variable OSLO_LOCK_PATH. If external locks are
# used, a lock path must be set. (string value)
# Deprecated group/name - [DEFAULT]/lock_path
#lock_path = <None>


[oslo_messaging_amqp]

#
# From oslo.messaging
#

# Name for the AMQP container. must be globally unique.
# Defaults to a generated UUID (string value)
# Deprecated group/name - [amqp1]/container_name
#container_name = <None>

# Timeout for inactive connections (in seconds) (integer
# value)
# Deprecated group/name - [amqp1]/idle_timeout
#idle_timeout = 0

# Debug: dump AMQP frames to stdout (boolean value)
# Deprecated group/name - [amqp1]/trace
#trace = false

# CA certificate PEM file used to verify the server's
# certificate (string value)
# Deprecated group/name - [amqp1]/ssl_ca_file
#ssl_ca_file =

# Self-identifying certificate PEM file for client
# authentication (string value)
# Deprecated group/name - [amqp1]/ssl_cert_file
#ssl_cert_file =

# Private key PEM file used to sign ssl_cert_file certificate
# (optional) (string value)
# Deprecated group/name - [amqp1]/ssl_key_file
#ssl_key_file =

# Password for decrypting ssl_key_file (if encrypted) (string
# value)
# Deprecated group/name - [amqp1]/ssl_key_password
#ssl_key_password = <None>

# DEPRECATED: Accept clients using either SSL or plain TCP
# (boolean value)
# Deprecated group/name - [amqp1]/allow_insecure_clients
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Not applicable - not a SSL server
#allow_insecure_clients = false

# Space separated list of acceptable SASL mechanisms (string
# value)
# Deprecated group/name - [amqp1]/sasl_mechanisms
#sasl_mechanisms =

# Path to directory that contains the SASL configuration
# (string value)
# Deprecated group/name - [amqp1]/sasl_config_dir
#sasl_config_dir =

# Name of configuration file (without .conf suffix) (string
# value)
# Deprecated group/name - [amqp1]/sasl_config_name
#sasl_config_name =

# User name for message broker authentication (string value)
# Deprecated group/name - [amqp1]/username
#username =

# Password for message broker authentication (string value)
# Deprecated group/name - [amqp1]/password
#password =

# Seconds to pause before attempting to re-connect. (integer
# value)
# Minimum value: 1
#connection_retry_interval = 1

# Increase the connection_retry_interval by this many seconds
# after each unsuccessful failover attempt. (integer value)
# Minimum value: 0
#connection_retry_backoff = 2

# Maximum limit for connection_retry_interval +
# connection_retry_backoff (integer value)
# Minimum value: 1
#connection_retry_interval_max = 30

# Time to pause between re-connecting an AMQP 1.0 link that
# failed due to a recoverable error. (integer value)
# Minimum value: 1
#link_retry_delay = 10

# The maximum number of attempts to re-send a reply message
# which failed due to a recoverable error. (integer value)
# Minimum value: -1
#default_reply_retry = 0

# The deadline for an rpc reply message delivery. (integer
# value)
# Minimum value: 5
#default_reply_timeout = 30

# The deadline for an rpc cast or call message delivery. Only
# used when caller does not provide a timeout expiry. (integer
# value)
# Minimum value: 5
#default_send_timeout = 30

# The deadline for a sent notification message delivery. Only
# used when caller does not provide a timeout expiry. (integer
# value)
# Minimum value: 5
#default_notify_timeout = 30

# The duration to schedule a purge of idle sender links.
# Detach link after expiry. (integer value)
# Minimum value: 1
#default_sender_link_timeout = 600

# Indicates the addressing mode used by the driver.
# Permitted values:
# 'legacy' - use legacy non-routable addressing
# 'routable' - use routable addresses
# 'dynamic' - use legacy addresses if the message bus does
# not support routing otherwise use routable addressing
# (string value)
#addressing_mode = dynamic

# address prefix used when sending to a specific server
# (string value)
# Deprecated group/name - [amqp1]/server_request_prefix
#server_request_prefix = exclusive

# address prefix used when broadcasting to all servers (string
# value)
# Deprecated group/name - [amqp1]/broadcast_prefix
#broadcast_prefix = broadcast

# address prefix when sending to any server in group (string
# value)
# Deprecated group/name - [amqp1]/group_request_prefix
#group_request_prefix = unicast

# Address prefix for all generated RPC addresses (string
# value)
#rpc_address_prefix = openstack.org/om/rpc

# Address prefix for all generated Notification addresses
# (string value)
#notify_address_prefix = openstack.org/om/notify

# Appended to the address prefix when sending a fanout
# message. Used by the message bus to identify fanout
# messages. (string value)
#multicast_address = multicast

# Appended to the address prefix when sending to a particular
# RPC/Notification server. Used by the message bus to identify
# messages sent to a single destination. (string value)
#unicast_address = unicast

# Appended to the address prefix when sending to a group of
# consumers. Used by the message bus to identify messages that
# should be delivered in a round-robin fashion across
# consumers. (string value)
#anycast_address = anycast

# Exchange name used in notification addresses.
# Exchange name resolution precedence:
# Target.exchange if set
# else default_notification_exchange if set
# else control_exchange if set
# else 'notify' (string value)
#default_notification_exchange = <None>

# Exchange name used in RPC addresses.
# Exchange name resolution precedence:
# Target.exchange if set
# else default_rpc_exchange if set
# else control_exchange if set
# else 'rpc' (string value)
#default_rpc_exchange = <None>

# Window size for incoming RPC Reply messages. (integer value)
# Minimum value: 1
#reply_link_credit = 200

# Window size for incoming RPC Request messages (integer
# value)
# Minimum value: 1
#rpc_server_credit = 100

# Window size for incoming Notification messages (integer
# value)
# Minimum value: 1
#notify_server_credit = 100

# Send messages of this type pre-settled.
# Pre-settled messages will not receive acknowledgement
# from the peer. Note well: pre-settled messages may be
# silently discarded if the delivery fails.
# Permitted values:
# 'rpc-call' - send RPC Calls pre-settled
# 'rpc-reply'- send RPC Replies pre-settled
# 'rpc-cast' - Send RPC Casts pre-settled
# 'notify' - Send Notifications pre-settled
# (multi valued)
#pre_settled = rpc-cast


[oslo_messaging_kafka]

#
# From oslo.messaging
#

# DEPRECATED: Default Kafka broker Host (string value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#kafka_default_host = localhost

# DEPRECATED: Default Kafka broker Port (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
#kafka_default_port = 9092

# Max fetch bytes of Kafka consumer (integer value)
#kafka_max_fetch_bytes = 1048576

# Default timeout(s) for Kafka consumers (floating point
# value)
#kafka_consumer_timeout = 1.0

# Pool Size for Kafka Consumers (integer value)
#pool_size = 10

# The pool size limit for connections expiration policy
# (integer value)
#conn_pool_min_size = 2

# The time-to-live in sec of idle connections in the pool
# (integer value)
#conn_pool_ttl = 1200

# Group id for Kafka consumer. Consumers in one group will
# coordinate message consumption (string value)
#consumer_group = oslo_messaging_consumer

# Upper bound on the delay for KafkaProducer batching in
# seconds (floating point value)
#producer_batch_timeout = 0.0

# Size of batch for the producer async send (integer value)
#producer_batch_size = 16384


[oslo_messaging_notifications]

#
# From oslo.messaging
#

# The Drivers(s) to handle sending notifications. Possible
# values are messaging, messagingv2, routing, log, test, noop
# (multi valued)
# Deprecated group/name - [DEFAULT]/notification_driver
#driver =

# A URL representing the messaging driver to use for
# notifications. If not set, we fall back to the same
# configuration used for RPC. (string value)
# Deprecated group/name - [DEFAULT]/notification_transport_url
#transport_url = <None>

# AMQP topic used for OpenStack notifications. (list value)
# Deprecated group/name - [rpc_notifier2]/topics
# Deprecated group/name - [DEFAULT]/notification_topics
#topics = notifications


[oslo_messaging_rabbit]

#
# From oslo.messaging
#

{%- if ironic.message_queue.get('ssl',{}).get('enabled', False) %}
rabbit_use_ssl=true
  {%- if ironic.message_queue.ssl.version is defined %}
kombu_ssl_version = {{ ironic.message_queue.ssl.version }}
  {%- elif salt['grains.get']('pythonversion') > [2,7,8] %}
kombu_ssl_version = TLSv1_2
  {%- endif %}
  {%- if ironic.message_queue.get('x509',{}).get('enabled', False) %}
kombu_ssl_keyfile = {{ ironic.message_queue.x509.key_file}}
kombu_ssl_certfile = {{ ironic.message_queue.x509.cert_file}}
  {%- endif %}
kombu_ssl_ca_certs = {{ ironic.message_queue.ssl.get('cacert_file', ironic.cacert_file) }}
{%- endif %}

# Use durable queues in AMQP. (boolean value)
# Deprecated group/name - [DEFAULT]/amqp_durable_queues
# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
#amqp_durable_queues = false

# Auto-delete queues in AMQP. (boolean value)
# Deprecated group/name - [DEFAULT]/amqp_auto_delete
#amqp_auto_delete = false

# Enable SSL (boolean value)
#ssl = <None>

# SSL version to use (valid only if SSL enabled). Valid values
# are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may
# be available on some distributions. (string value)
# Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_version
#ssl_version =

# SSL key file (valid only if SSL enabled). (string value)
# Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_keyfile
#ssl_key_file =

# SSL cert file (valid only if SSL enabled). (string value)
# Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_certfile
#ssl_cert_file =

# SSL certification authority file (valid only if SSL
# enabled). (string value)
# Deprecated group/name - [oslo_messaging_rabbit]/kombu_ssl_ca_certs
#ssl_ca_file =

# How long to wait before reconnecting in response to an AMQP
# consumer cancel notification. (floating point value)
# Deprecated group/name - [DEFAULT]/kombu_reconnect_delay
#kombu_reconnect_delay = 1.0

# EXPERIMENTAL: Possible values are: gzip, bz2. If not set
# compression will not be used. This option may not be
# available in future versions. (string value)
#kombu_compression = <None>

# How long to wait a missing client before abandoning to send
# it its replies. This value should not be longer than
# rpc_response_timeout. (integer value)
# Deprecated group/name - [oslo_messaging_rabbit]/kombu_reconnect_timeout
#kombu_missing_consumer_retry_timeout = 60

# Determines how the next RabbitMQ node is chosen in case the
# one we are currently connected to becomes unavailable. Takes
# effect only if more than one RabbitMQ node is provided in
# common. (string value)
# Allowed values: round-robin, shuffle
#kombu_failover_strategy = round-robin

# DEPRECATED: The RabbitMQ broker address where a single node
# is used. (string value)
# Deprecated group/name - [DEFAULT]/rabbit_host
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#rabbit_host = localhost

# DEPRECATED: The RabbitMQ broker port where a single node is
# used. (port value)
# Minimum value: 0
# Maximum value: 65535
# Deprecated group/name - [DEFAULT]/rabbit_port
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#rabbit_port = 5672

# DEPRECATED: RabbitMQ HA cluster host:port pairs. (list
# value)
# Deprecated group/name - [DEFAULT]/rabbit_hosts
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#rabbit_hosts = $rabbit_host:$rabbit_port

# DEPRECATED: The RabbitMQ userid. (string value)
# Deprecated group/name - [DEFAULT]/rabbit_userid
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#rabbit_userid = guest

# DEPRECATED: The RabbitMQ password. (string value)
# Deprecated group/name - [DEFAULT]/rabbit_password
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#rabbit_password = guest

# The RabbitMQ login method. (string value)
# Allowed values: PLAIN, AMQPLAIN, RABBIT-CR-DEMO
# Deprecated group/name - [DEFAULT]/rabbit_login_method
#rabbit_login_method = AMQPLAIN

# DEPRECATED: The RabbitMQ virtual host. (string value)
# Deprecated group/name - [DEFAULT]/rabbit_virtual_host
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#rabbit_virtual_host = /

# How frequently to retry connecting with RabbitMQ. (integer
# value)
#rabbit_retry_interval = 1

# How long to backoff for between retries when connecting to
# RabbitMQ. (integer value)
# Deprecated group/name - [DEFAULT]/rabbit_retry_backoff
#rabbit_retry_backoff = 2

# Maximum interval of RabbitMQ connection retries. Default is
# 30 seconds. (integer value)
#rabbit_interval_max = 30

# DEPRECATED: Maximum number of RabbitMQ connection retries.
# Default is 0 (infinite retry count). (integer value)
# Deprecated group/name - [DEFAULT]/rabbit_max_retries
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
#rabbit_max_retries = 0

# Try to use HA queues in RabbitMQ (x-ha-policy: all). If you
# change this option, you must wipe the RabbitMQ database. In
# RabbitMQ 3.0, queue mirroring is no longer controlled by the
# x-ha-policy argument when declaring a queue. If you just
# want to make sure that all queues (except those with auto-
# generated names) are mirrored across all nodes, run:
# "rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode":
# "all"}' " (boolean value)
# Deprecated group/name - [DEFAULT]/rabbit_ha_queues
#rabbit_ha_queues = false

# Positive integer representing duration in seconds for queue
# TTL (x-expires). Queues which are unused for the duration of
# the TTL are automatically deleted. The parameter affects
# only reply and fanout queues. (integer value)
# Minimum value: 1
#rabbit_transient_queues_ttl = 1800

# Specifies the number of messages to prefetch. Setting to
# zero allows unlimited messages. (integer value)
#rabbit_qos_prefetch_count = 0

# Number of seconds after which the Rabbit broker is
# considered down if heartbeat's keep-alive fails (0 disable
# the heartbeat). EXPERIMENTAL (integer value)
#heartbeat_timeout_threshold = 60

# How often times during the heartbeat_timeout_threshold we
# check the heartbeat. (integer value)
#heartbeat_rate = 2

# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake
# (boolean value)
# Deprecated group/name - [DEFAULT]/fake_rabbit
#fake_rabbit = false

# Maximum number of channels to allow (integer value)
#channel_max = <None>

# The maximum byte size for an AMQP frame (integer value)
#frame_max = <None>

# How often to send heartbeats for consumer's connections
# (integer value)
#heartbeat_interval = 3

# Arguments passed to ssl.wrap_socket (dict value)
#ssl_options = <None>

# Set socket timeout in seconds for connection's socket
# (floating point value)
#socket_timeout = 0.25

# Set TCP_USER_TIMEOUT in seconds for connection's socket
# (floating point value)
#tcp_user_timeout = 0.25

# Set delay for reconnection to some host which has connection
# error (floating point value)
#host_connection_reconnect_delay = 0.25

# Connection factory implementation (string value)
# Allowed values: new, single, read_write
#connection_factory = single

# Maximum number of connections to keep queued. (integer
# value)
#pool_max_size = 30

# Maximum number of connections to create above
# `pool_max_size`. (integer value)
#pool_max_overflow = 0

# Default number of seconds to wait for a connections to
# available (integer value)
#pool_timeout = 30

# Lifetime of a connection (since creation) in seconds or None
# for no recycling. Expired connections are closed on acquire.
# (integer value)
#pool_recycle = 600

# Threshold at which inactive (since release) connections are
# considered stale in seconds or None for no staleness. Stale
# connections are closed on acquire. (integer value)
#pool_stale = 60

# Default serialization mechanism for
# serializing/deserializing outgoing/incoming messages (string
# value)
# Allowed values: json, msgpack
#default_serializer_type = json

# Persist notification messages. (boolean value)
#notification_persistence = false

# Exchange name for sending notifications (string value)
#default_notification_exchange = ${control_exchange}_notification

# Max number of not acknowledged message which RabbitMQ can
# send to notification listener. (integer value)
#notification_listener_prefetch_count = 100

# Reconnecting retry count in case of connectivity problem
# during sending notification, -1 means infinite retry.
# (integer value)
#default_notification_retry_attempts = -1

# Reconnecting retry delay in case of connectivity problem
# during sending notification message (floating point value)
#notification_retry_delay = 0.25

# Time to live for rpc queues without consumers in seconds.
# (integer value)
#rpc_queue_expiration = 60

# Exchange name for sending RPC messages (string value)
#default_rpc_exchange = ${control_exchange}_rpc

# Exchange name for receiving RPC replies (string value)
#rpc_reply_exchange = ${control_exchange}_rpc_reply

# Max number of not acknowledged message which RabbitMQ can
# send to rpc listener. (integer value)
#rpc_listener_prefetch_count = 100

# Max number of not acknowledged message which RabbitMQ can
# send to rpc reply listener. (integer value)
#rpc_reply_listener_prefetch_count = 100

# Reconnecting retry count in case of connectivity problem
# during sending reply. -1 means infinite retry during
# rpc_timeout (integer value)
#rpc_reply_retry_attempts = -1

# Reconnecting retry delay in case of connectivity problem
# during sending reply. (floating point value)
#rpc_reply_retry_delay = 0.25

# Reconnecting retry count in case of connectivity problem
# during sending RPC message, -1 means infinite retry. If
# actual retry attempts in not 0 the rpc request could be
# processed more than one time (integer value)
#default_rpc_retry_attempts = -1

# Reconnecting retry delay in case of connectivity problem
# during sending RPC message (floating point value)
#rpc_retry_delay = 0.25


[oslo_messaging_zmq]

#
# From oslo.messaging
#

# ZeroMQ bind address. Should be a wildcard (*), an ethernet
# interface, or IP. The "host" option should point or resolve
# to this address. (string value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_bind_address
#rpc_zmq_bind_address = *

# MatchMaker driver. (string value)
# Allowed values: redis, sentinel, dummy
# Deprecated group/name - [DEFAULT]/rpc_zmq_matchmaker
#rpc_zmq_matchmaker = redis

# Number of ZeroMQ contexts, defaults to 1. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_contexts
#rpc_zmq_contexts = 1

# Maximum number of ingress messages to locally buffer per
# topic. Default is unlimited. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_topic_backlog
#rpc_zmq_topic_backlog = <None>

# Directory for holding IPC sockets. (string value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_ipc_dir
#rpc_zmq_ipc_dir = /var/run/openstack

# Name of this node. Must be a valid hostname, FQDN, or IP
# address. Must match "host" option, if running Nova. (string
# value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_host
#rpc_zmq_host = localhost

# Number of seconds to wait before all pending messages will
# be sent after closing a socket. The default value of -1
# specifies an infinite linger period. The value of 0
# specifies no linger period. Pending messages shall be
# discarded immediately when the socket is closed. Positive
# values specify an upper bound for the linger period.
# (integer value)
# Deprecated group/name - [DEFAULT]/rpc_cast_timeout
#zmq_linger = -1

# The default number of seconds that poll should wait. Poll
# raises timeout exception when timeout expired. (integer
# value)
# Deprecated group/name - [DEFAULT]/rpc_poll_timeout
#rpc_poll_timeout = 1

# Expiration timeout in seconds of a name service record about
# existing target ( < 0 means no timeout). (integer value)
# Deprecated group/name - [DEFAULT]/zmq_target_expire
#zmq_target_expire = 300

# Update period in seconds of a name service record about
# existing target. (integer value)
# Deprecated group/name - [DEFAULT]/zmq_target_update
#zmq_target_update = 180

# Use PUB/SUB pattern for fanout methods. PUB/SUB always uses
# proxy. (boolean value)
# Deprecated group/name - [DEFAULT]/use_pub_sub
#use_pub_sub = false

# Use ROUTER remote proxy. (boolean value)
# Deprecated group/name - [DEFAULT]/use_router_proxy
#use_router_proxy = false

# This option makes direct connections dynamic or static. It
# makes sense only with use_router_proxy=False which means to
# use direct connections for direct message types (ignored
# otherwise). (boolean value)
#use_dynamic_connections = false

# How many additional connections to a host will be made for
# failover reasons. This option is actual only in dynamic
# connections mode. (integer value)
#zmq_failover_connections = 2

# Minimal port number for random ports range. (port value)
# Minimum value: 0
# Maximum value: 65535
# Deprecated group/name - [DEFAULT]/rpc_zmq_min_port
#rpc_zmq_min_port = 49153

# Maximal port number for random ports range. (integer value)
# Minimum value: 1
# Maximum value: 65536
# Deprecated group/name - [DEFAULT]/rpc_zmq_max_port
#rpc_zmq_max_port = 65536

# Number of retries to find free port number before fail with
# ZMQBindError. (integer value)
# Deprecated group/name - [DEFAULT]/rpc_zmq_bind_port_retries
#rpc_zmq_bind_port_retries = 100

# Default serialization mechanism for
# serializing/deserializing outgoing/incoming messages (string
# value)
# Allowed values: json, msgpack
# Deprecated group/name - [DEFAULT]/rpc_zmq_serialization
#rpc_zmq_serialization = json

# This option configures round-robin mode in zmq socket. True
# means not keeping a queue when server side disconnects.
# False means to keep queue and messages even if server is
# disconnected, when the server appears we send all
# accumulated messages to it. (boolean value)
#zmq_immediate = true

# Enable/disable TCP keepalive (KA) mechanism. The default
# value of -1 (or any other negative value) means to skip any
# overrides and leave it to OS default; 0 and 1 (or any other
# positive value) mean to disable and enable the option
# respectively. (integer value)
#zmq_tcp_keepalive = -1

# The duration between two keepalive transmissions in idle
# condition. The unit is platform dependent, for example,
# seconds in Linux, milliseconds in Windows etc. The default
# value of -1 (or any other negative value and 0) means to
# skip any overrides and leave it to OS default. (integer
# value)
#zmq_tcp_keepalive_idle = -1

# The number of retransmissions to be carried out before
# declaring that remote end is not available. The default
# value of -1 (or any other negative value and 0) means to
# skip any overrides and leave it to OS default. (integer
# value)
#zmq_tcp_keepalive_cnt = -1

# The duration between two successive keepalive
# retransmissions, if acknowledgement to the previous
# keepalive transmission is not received. The unit is platform
# dependent, for example, seconds in Linux, milliseconds in
# Windows etc. The default value of -1 (or any other negative
# value and 0) means to skip any overrides and leave it to OS
# default. (integer value)
#zmq_tcp_keepalive_intvl = -1

# Maximum number of (green) threads to work concurrently.
# (integer value)
#rpc_thread_pool_size = 100

# Expiration timeout in seconds of a sent/received message
# after which it is not tracked anymore by a client/server.
# (integer value)
#rpc_message_ttl = 300

# Wait for message acknowledgements from receivers. This
# mechanism works only via proxy without PUB/SUB. (boolean
# value)
#rpc_use_acks = false

# Number of seconds to wait for an ack from a cast/call. After
# each retry attempt this timeout is multiplied by some
# specified multiplier. (integer value)
#rpc_ack_timeout_base = 15

# Number to multiply base ack timeout by after each retry
# attempt. (integer value)
#rpc_ack_timeout_multiplier = 2

# Default number of message sending attempts in case of any
# problems occurred: positive value N means at most N retries,
# 0 means no retries, None or -1 (or any other negative
# values) mean to retry forever. This option is used only if
# acknowledgments are enabled. (integer value)
#rpc_retry_attempts = 3

# List of publisher hosts SubConsumer can subscribe on. This
# option has higher priority then the default publishers list
# taken from the matchmaker. (list value)
#subscribe_on =

[oslo_middleware]

#
# From oslo.middleware.http_proxy_to_wsgi
#

# Whether the application is behind a proxy or not. This
# determines if the middleware should parse the headers or
# not. (boolean value)
#enable_proxy_headers_parsing = false
{%- if ironic.get('middleware', {}).enable_proxy_headers_parsing is defined %}
enable_proxy_headers_parsing = {{ ironic.middleware.enable_proxy_headers_parsing }}
{%- endif %}

[oslo_policy]

#
# From oslo.policy
#

# The file that defines policies. (string value)
# Deprecated group/name - [DEFAULT]/policy_file
#policy_file = policy.json

# Default rule. Enforced when a requested rule is not found.
# (string value)
# Deprecated group/name - [DEFAULT]/policy_default_rule
#policy_default_rule = default

# Directories where policy configuration files are stored.
# They can be relative to any directory in the search path
# defined by the config_dir option, or absolute paths. The
# file defined by policy_file must exist for these directories
# to be searched. Missing or empty directories are ignored.
# (multi valued)
# Deprecated group/name - [DEFAULT]/policy_dirs
#policy_dirs = policy.d


[pxe]

#
# From ironic
#

# Additional append parameters for baremetal PXE boot. (string
# value)
{%- if conductor.pxe_append_params is defined %}
pxe_append_params = {{ conductor.pxe_append_params }}
{%- else %}
#pxe_append_params = nofb nomodeset vga=normal
{%- endif %}

# Default file system format for ephemeral partition, if one
# is created. (string value)
#default_ephemeral_format = ext4

# On the ironic-conductor node, directory where images are
# stored on disk. (string value)
#images_path = /var/lib/ironic/images/

# On the ironic-conductor node, directory where master
# instance images are stored on disk. Setting to <None>
# disables image caching. (string value)
#instance_master_path = /var/lib/ironic/master_images

# Maximum size (in MiB) of cache for master images, including
# those in use. (integer value)
#image_cache_size = 20480

# Maximum TTL (in minutes) for old master images in cache.
# (integer value)
#image_cache_ttl = 10080

# On ironic-conductor node, template file for PXE
# configuration. (string value)
{%- if conductor.get('pxe_config_template') %}
pxe_config_template = {{ conductor.pxe_config_template }}
{%- else %}
#pxe_config_template = $pybasedir/drivers/modules/pxe_common.template
{%- endif %}

# On ironic-conductor node, template file for PXE
# configuration for UEFI boot loader. (string value)
{%- if ironic.uefi.efi_pxe_config_template is defined %}
uefi_pxe_config_template = {{ ironic.uefi.efi_pxe_config_template }}
{%- else %}
#uefi_pxe_config_template = $pybasedir/drivers/modules/pxe_grub_common.template
{%- endif %}

# On ironic-conductor node, template file for PXE
# configuration per node architecture. For example:
# aarch64:/opt/share/grubaa64_pxe_common.template (dict value)
#pxe_config_template_by_arch =

# IP address of ironic-conductor node's TFTP server. (string
# value)
{%- if conductor.get('tftp_server') %}
tftp_server = {{ conductor.tftp_server }}
{%- else %}
#tftp_server = $my_ip
{%- endif %}

# ironic-conductor node's TFTP root path. The ironic-conductor
# must have read/write access to this path. (string value)
{%- if conductor.get('tftp_root') %}
tftp_root = {{ conductor.tftp_root }}
{%- else %}
#tftp_root = /tftpboot
{%- endif %}

# On ironic-conductor node, directory where master TFTP images
# are stored on disk. Setting to <None> disables image
# caching. (string value)
{%- if conductor.get('tftp_master_path') %}
tftp_master_path = {{ conductor.tftp_master_path }}
{%- else %}
#tftp_master_path = /tftpboot/master_images
{%- endif %}

# Bootfile DHCP parameter. (string value)
{%- if conductor.get('pxe_bootfile_name') %}
pxe_bootfile_name = {{ conductor.pxe_bootfile_name }}
{%- else %}
#pxe_bootfile_name = pxelinux.0
{%- endif %}

# Bootfile DHCP parameter for UEFI boot mode. (string value)
#uefi_pxe_bootfile_name = bootx64.efi
{%- if ironic.uefi.enabled %}
{%- if ironic.uefi.pxe_bootfile_name is defined %}
uefi_pxe_bootfile_name={{ ironic.uefi.pxe_bootfile_name }}
{%- endif %}
{%- endif %}

# Bootfile DHCP parameter per node architecture. For example:
# aarch64:grubaa64.efi (dict value)
#pxe_bootfile_name_by_arch =

# Enable iPXE boot. (boolean value)
{%- if conductor.ipxe_enabled is defined %}
ipxe_enabled = {{ conductor.ipxe_enabled }}
{%- else %}
#ipxe_enabled = false
{%- endif %}

# On ironic-conductor node, the path to the main iPXE script
# file. (string value)
#ipxe_boot_script = $pybasedir/drivers/modules/boot.ipxe

# Timeout value (in seconds) for downloading an image via
# iPXE. Defaults to 0 (no timeout) (integer value)
#ipxe_timeout = 0

# The IP version that will be used for PXE booting. Defaults
# to 4. EXPERIMENTAL (string value)
# Allowed values: 4, 6
#ip_version = 4

# Download deploy images directly from swift using temporary
# URLs. If set to false (default), images are downloaded to
# the ironic-conductor node and served over its local HTTP
# server. Applicable only when 'ipxe_enabled' option is set to
# true. (boolean value)
#ipxe_use_swift = false


[service_catalog]

#
# From ironic
#

# Authentication URL (string value)
{%- if ironic.get('identity', {}).get('engine') == 'keystone' %}
auth_url = {{ ironic.identity.protocol }}://{{ ironic.identity.host }}:{{ ironic.identity.port }}
{%- if ironic.identity.protocol == 'https' %}
cafile={{ ironic.identity.get('cacert_file', ironic.cacert_file) }}
{%- endif %}
{%- else %}
#auth_url = <None>
{%- endif %}

# Authentication type to load (string value)
# Deprecated group/name - [service_catalog]/auth_plugin
{%- if ironic.get('identity', {}).get('auth_type') %}
auth_type = {{ ironic.identity.auth_type }}
{%- else %}
#auth_type = <None>
{%- endif %}

# 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)
{%- if ironic.get('identity', {}).get('default_domain_id') %}
default_domain_id = {{ ironic.identity.default_domain_id }}
{%- else %}
#default_domain_id = <None>
{%- endif %}

# 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)
{%- if ironic.get('identity', {}).get('default_domain_name') %}
default_domain_name = {{ ironic.identity.default_domain_name }}
{%- else %}
#default_domain_name = <None>
{%- endif %}

# Domain ID to scope to (string value)
{%- if ironic.get('identity', {}).get('domain_id') %}
domain_id = {{ ironic.identity.domain_id }}
{%- else %}
#domain_id = <None>
{%- endif %}

# Domain name to scope to (string value)
{%- if ironic.get('identity', {}).get('domain_name') %}
domain_name = {{ ironic.identity.domain_name }}
{%- else %}
#domain_name = <None>
{%- endif %}

# Verify HTTPS connections. (boolean value)
#insecure = false

# PEM encoded client certificate key file (string value)
#keyfile = <None>

# User's password (string value)
{%- if ironic.get('identity', {}).get('password') %}
password = {{ ironic.identity.password }}
{%- else %}
#password = <None>
{%- endif %}

# Domain ID containing project (string value)
{%- if ironic.get('identity', {}).get('project_domain_id') %}
project_domain_id = {{ ironic.identity.project_domain_id }}
{%- else %}
#project_domain_id = <None>
{%- endif %}

# Domain name containing project (string value)
{%- if ironic.get('identity', {}).get('project_domain_name') %}
project_domain_name = {{ ironic.identity.project_domain_name }}
{%- else %}
#project_domain_name = <None>
{%- endif %}

# Project ID to scope to (string value)
# Deprecated group/name - [service_catalog]/tenant-id
{%- if ironic.get('identity', {}).get('project_id') %}
project_id = {{ ironic.identity.project_id }}
{%- else %}
#project_id = <None>
{%- endif %}

# Project name to scope to (string value)
# Deprecated group/name - [service_catalog]/tenant-name
{%- if ironic.get('identity', {}).get('project_name') %}
project_name = {{ ironic.identity.project_name }}
{%- else %}
#project_name = <None>
{%- endif %}

# Tenant ID (string value)
{%- if ironic.get('identity', {}).get('tenant_id') %}
tenant_id = {{ ironic.identity.tenant_id }}
{%- else %}
#tenant_id = <None>
{%- endif %}

# Tenant Name (string value)
{%- if ironic.get('identity', {}).get('tenant_name') %}
tenant_name = {{ ironic.identity.tenant_name }}
{%- else %}
#tenant_name = <None>
{%- endif %}

# Timeout value for http requests (integer value)
#timeout = <None>

# Trust ID (string value)
#trust_id = <None>

# User's domain id (string value)
{%- if ironic.get('identity', {}).get('user_domain_id') %}
user_domain_id = {{ ironic.identity.user_domain_id }}
{%- else %}
#user_domain_id = <None>
{%- endif %}

# User's domain name (string value)
{%- if ironic.get('identity', {}).get('user_domain_name') %}
user_domain_name = {{ ironic.identity.user_domain_name }}
{%- else %}
#user_domain_name = <None>
{%- endif %}

# User id (string value)
{%- if ironic.get('identity', {}).get('user_id')  %}
user_id = {{ ironic.identity.user_id }}
{%- else %}
#user_id = <None>
{%- endif %}

# Username (string value)
# Deprecated group/name - [service_catalog]/user-name
{%- if ironic.get('identity', {}).get('user') %}
username = {{ ironic.identity.user }}
{%- else %}
#username = <None>
{%- endif %}


[snmp]

#
# From ironic
#

# Seconds to wait for power action to be completed (integer
# value)
#power_timeout = 10

# Time (in seconds) to sleep between when rebooting (powering
# off and on again) (integer value)
# Minimum value: 0
#reboot_delay = 0


[ssh]

#
# From ironic
#

# libvirt URI. (string value)
#libvirt_uri = qemu:///system

# Number of attempts to try to get VM name used by the host
# that corresponds to a node's MAC address. (integer value)
#get_vm_name_attempts = 3

# Number of seconds to wait between attempts to get VM name
# used by the host that corresponds to a node's MAC address.
# (integer value)
#get_vm_name_retry_interval = 3


[ssl]

#
# From oslo.service.sslutils
#

# CA certificate file to use to verify connecting clients.
# (string value)
# Deprecated group/name - [DEFAULT]/ssl_ca_file
#ca_file = <None>

# Certificate file to use when starting the server securely.
# (string value)
# Deprecated group/name - [DEFAULT]/ssl_cert_file
#cert_file = <None>

# Private key file to use when starting the server securely.
# (string value)
# Deprecated group/name - [DEFAULT]/ssl_key_file
#key_file = <None>

# SSL version to use (valid only if SSL enabled). Valid values
# are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may
# be available on some distributions. (string value)
#version = <None>

# Sets the list of available ciphers. value should be a string
# in the OpenSSL cipher list format. (string value)
#ciphers = <None>


[swift]

#
# From ironic
#

# Authentication URL (string value)
#auth_url = <None>

# Authentication type to load (string value)
# Deprecated group/name - [swift]/auth_plugin
#auth_type = <None>

# 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>

# Domain ID containing project (string value)
#project_domain_id = <None>

# Domain name containing project (string value)
#project_domain_name = <None>

# Project ID to scope to (string value)
# Deprecated group/name - [swift]/tenant-id
#project_id = <None>

# Project name to scope to (string value)
# Deprecated group/name - [swift]/tenant-name
#project_name = <None>

# Maximum number of times to retry a Swift request, before
# failing. (integer value)
#swift_max_retries = 2

# 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's domain name (string value)
#user_domain_name = <None>

# User id (string value)
#user_id = <None>

# Username (string value)
# Deprecated group/name - [swift]/user-name
#username = <None>

{%- if ironic.configmap is defined %}
{%- set _data = ironic.configmap %}
{%- include "oslo_templates/files/configmap/configmap.conf" %}
{%- endif %}
