blob: 15dbf2c54806d1a5a0536ed8a44d4d68628cce8b [file] [log] [blame]
{%- from "ironic/map.jinja" import api,conductor 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)
# Possible values:
# noauth - <No description provided>
# keystone - <No description provided>
{%- if ironic.identity is defined %}
auth_strategy = {{ ironic.identity.engine }}
{%- else %}
#auth_strategy = keystone
{%- endif %}
# Return server tracebacks in the API response for any error
# responses. WARNING: this is insecure and should not be used
# in a production environment. (boolean value)
#debug_tracebacks_in_api = false
# Enable pecan debug mode. WARNING: this is insecure and
# should not be used in a production environment. (boolean
# value)
#pecan_debug = false
# Resource class to use for new nodes when no resource class
# is provided in the creation request. (string value)
#default_resource_class = <None>
# DEPRECATED: 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)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Hardware types should be used instead of classic
# drivers. They are enabled via the enabled_hardware_types
# option.
{%- 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 rescue interfaces to load during service
# initialization. Missing rescue interfaces, or rescue
# interfaces which fail to initialize, will prevent the
# ironic-conductor service from starting. At least one rescue
# 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 rescue interfaces. A
# complete list of rescue interfaces present on your system
# may be found by enumerating the
# "ironic.hardware.interfaces.rescue" entrypoint. When setting
# this value, please make sure that every enabled hardware
# type will have the same set of enabled rescue interfaces on
# every ironic-conductor service. (list value)
{%- if conductor.get('enabled_rescue_interfaces') %}
enabled_rescue_interfaces = {{ ','.join(conductor.enabled_rescue_interfaces) }}
{%- else %}
#enabled_rescue_interfaces = no-rescue
{%- endif %}
# Default rescue interface to be used for nodes that do not
# have rescue_interface field set. A complete list of rescue
# interfaces present on your system may be found by
# enumerating the "ironic.hardware.interfaces.rescue"
# entrypoint. (string value)
{%- if conductor.get('default_rescue_interface') %}
default_rescue_interface = {{ conductor.default_rescue_interface }}
{%- else %}
#default_rescue_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. (string 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_config.template
# Template file for grub configuration file. (string value)
#grub_config_template = $pybasedir/common/grub_conf.template
# Path to ldlinux.c32 file. This file is required for syslinux
# 5.0 or later. If not specified, the file is looked for in
# "/usr/lib/syslinux/modules/bios/ldlinux.c32" and
# "/usr/share/syslinux/ldlinux.c32". (string value)
#ldlinux_c32 = <None>
# 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)
# Possible values:
# debug - <No description provided>
# info - <No description provided>
# warning - <No description provided>
# error - <No description provided>
# critical - <No description provided>
#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 Bare Metal API, the internal ironic RPC
# communication, and the 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 will be used. (string value)
# Possible values:
# queens - <No description provided>
# pike - <No description provided>
# 9.2 - <No description provided>
# 9.1 - <No description provided>
# 9.0 - <No description provided>
# 8.0 - <No description provided>
# 10.1 - <No description provided>
# 10.0 - <No description provided>
#pin_release_version = <None>
# 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
{%- if ironic.logging is defined %}
{%- set _data = ironic.logging %}
{%- include "oslo_templates/files/queens/oslo/_log.conf" %}
{%- endif %}
{%- set _data = ironic.message_queue %}
{%- include "oslo_templates/files/queens/oslo/messaging/_default.conf" %}
#
# From oslo.service.periodic_task
#
# Some periodic tasks can be run in a separate process. Should
# we run them here? (boolean value)
#run_external_periodic_tasks = true
#
# From oslo.service.service
#
# Enable eventlet backdoor. Acceptable values are 0, <port>,
# and <start>:<end>, where 0 results in listening on a random
# tcp port number; <port> results in listening on the
# specified port number (and not enabling backdoor if that
# port is in use); and <start>:<end> results in listening on
# the smallest unused port number within the specified range
# of port numbers. The chosen port is displayed in the
# service's log file. (string value)
#backdoor_port = <None>
# Enable eventlet backdoor, using the provided path as a unix
# socket that can receive connections. This option is mutually
# exclusive with 'backdoor_port' in that only one should be
# provided. If both are provided then the existence of this
# option overrides the usage of that option. (string value)
#backdoor_socket = <None>
# Enables or disables logging values of all registered options
# when starting a service (at DEBUG level). (boolean value)
#log_options = true
# Specify a timeout after which a gracefully shutdown server
# will exit. Zero value means endless wait. (integer value)
#graceful_shutdown_timeout = 60
[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)
# Possible values:
# always - <No description provided>
# on_failure - <No description provided>
# never - <No description provided>
#deploy_logs_collect = on_failure
# The name of the storage backend where the logs will be
# stored. (string value)
# Possible values:
# local - <No description provided>
# swift - <No description provided>
#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
[ansible]
#
# From ironic
#
# Extra arguments to pass on every invocation of Ansible.
# (string value)
#ansible_extra_args = <None>
# Set ansible verbosity level requested when invoking
# "ansible-playbook" command. 4 includes detailed SSH session
# logging. Default is 4 when global debug is enabled and 0
# otherwise. (integer value)
# Minimum value: 0
# Maximum value: 4
#verbosity = <None>
# Path to "ansible-playbook" script. Default will search the
# $PATH configured for user running ironic-conductor process.
# Provide the full path when ansible-playbook is not in $PATH
# or installed in not default location. (string value)
#ansible_playbook_script = ansible-playbook
# Path to directory with playbooks, roles and local inventory.
# (string value)
#playbooks_path = $pybasedir/drivers/modules/ansible/playbooks
# Path to ansible configuration file. If set to empty, system
# default will be used. (string value)
#config_file_path = $pybasedir/drivers/modules/ansible/playbooks/ansible.cfg
# Number of times to retry getting power state to check if
# bare metal node has been powered off after a soft power off.
# Value of 0 means do not retry on failure. (integer value)
# Minimum value: 0
#post_deploy_get_power_state_retries = 6
# Amount of time (in seconds) to wait between polling power
# state after trigger soft poweroff. (integer value)
# Minimum value: 0
#post_deploy_get_power_state_retry_interval = 5
# Extra amount of memory in MiB expected to be consumed by
# Ansible-related processes on the node. Affects decision
# whether image will fit into RAM. (integer value)
#extra_memory = 10
# Skip verifying SSL connections to the image store when
# downloading the image. Setting it to "True" is only
# recommended for testing environments that use self-signed
# certificates. (boolean value)
#image_store_insecure = false
# Specific CA bundle to use for validating SSL connections to
# the image store. If not specified, CA available in the
# ramdisk will be used. Is not used by default playbooks
# included with the driver. Suitable for environments that use
# self-signed certificates. (string value)
#image_store_cafile = <None>
# Client cert to use for SSL connections to image store. Is
# not used by default playbooks included with the driver.
# (string value)
#image_store_certfile = <None>
# Client key to use for SSL connections to image store. Is not
# used by default playbooks included with the driver. (string
# value)
#image_store_keyfile = <None>
# Name of the user to use for Ansible when connecting to the
# ramdisk over SSH. It may be overriden by per-node
# 'ansible_username' option in node's 'driver_info' field.
# (string value)
#default_username = ansible
# Absolute path to the private SSH key file to use by Ansible
# by default when connecting to the ramdisk over SSH. Default
# is to use default SSH keys configured for the user running
# the ironic-conductor service. Private keys with password
# must be pre-loaded into 'ssh-agent'. It may be overriden by
# per-node 'ansible_key_file' option in node's 'driver_info'
# field. (string value)
#default_key_file = <None>
# Path (relative to $playbooks_path or absolute) to the
# default playbook used for deployment. It may be overriden by
# per-node 'ansible_deploy_playbook' option in node's
# 'driver_info' field. (string value)
#default_deploy_playbook = deploy.yaml
# Path (relative to $playbooks_path or absolute) to the
# default playbook used for graceful in-band shutdown of the
# node. It may be overriden by per-node
# 'ansible_shutdown_playbook' option in node's 'driver_info'
# field. (string value)
#default_shutdown_playbook = shutdown.yaml
# Path (relative to $playbooks_path or absolute) to the
# default playbook used for node cleaning. It may be overriden
# by per-node 'ansible_clean_playbook' option in node's
# 'driver_info' field. (string value)
#default_clean_playbook = clean.yaml
# Path (relative to $playbooks_path or absolute) to the
# default auxiliary cleaning steps file used during the node
# cleaning. It may be overriden by per-node
# 'ansible_clean_steps_config' option in node's 'driver_info'
# field. (string value)
#default_clean_steps_config = clean_steps.yaml
[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 ironic.get('cinder', {}).get('auth_strategy') == '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 - [cinder]/auth_plugin
{%- if ironic.get('cinder', {}).get('auth_type') %}
auth_type = {{ ironic.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 ironic.get('cinder', {}).get('password') %}
password = {{ ironic.cinder.password }}
{%- else %}
#password = <None>
{%- endif %}
# Domain ID containing project (string value)
#project_domain_id = <None>
{%- if ironic.get('cinder', {}).get('project_domain_id') %}
project_domain_id = {{ ironic.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 ironic.get('cinder', {}).get('project_name') %}
project_name = {{ ironic.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 ironic.get('cinder', {}).get('url') %}
url = {{ ironic.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 ironic.get('cinder', {}).get('user_domain_name') %}
user_domain_name = {{ ironic.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 ironic.get('cinder', {}).get('username') %}
username = {{ ironic.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
# DEPRECATED: 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://.
# (uri value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Use [service_catalog]endpoint_override option
# instead if required to use a specific ironic api address,
# for example in noauth mode.
{%- 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
# Interval (seconds) between checks of rescue timeouts.
# (integer value)
# Minimum value: 1
#check_rescue_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
# Name of the Swift container to store config drive data. Used
# when configdrive_use_object_store 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 (seconds) to wait for a callback from the rescue
# ramdisk. If the timeout is reached the node will be put in
# the "rescue failed" provision state. Set to 0 to disable
# timeout. (integer value)
# Minimum value: 0
#rescue_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
# Number of seconds to wait for power operations to complete,
# i.e., so that a baremetal node is in the desired power
# state. If timed out, the power operation is considered a
# failure. (integer value)
# Minimum value: 2
#power_state_change_timeout = 30
[console]
#
# From ironic
#
# Path to serial console terminal program. Used only by Shell
# In A Box console. (string value)
#terminal = shellinaboxd
# Directory containing the terminal SSL cert (PEM) for serial
# console access. Used only by Shell In A Box console. (string
# value)
#terminal_cert_dir = <None>
# Directory for holding terminal pid files. If not specified,
# the temporary directory will be used. (string value)
#terminal_pid_dir = <None>
# Timeout (in seconds) for the terminal session to be closed
# on inactivity. Set to 0 to disable timeout. Used only by
# Socat console. (integer value)
# Minimum value: 0
#terminal_timeout = 600
# Time interval (in seconds) for checking the status of
# console subprocess. (integer value)
#subprocess_checking_interval = 1
# Time (in seconds) to wait for the console subprocess to
# start. (integer value)
#subprocess_timeout = 10
# IP address of Socat service running on the host of ironic
# conductor. Used only by Socat console. (IP address value)
#socat_address = $my_ip
[cors]
{%- if ironic.cors is defined %}
{%- set _data = ironic.cors %}
{%- include "oslo_templates/files/queens/oslo/_cors.conf" %}
{%- endif %}
[database]
{%- set _data = ironic.database %}
{%- if _data.ssl is defined and 'cacert_file' not in _data.get('ssl', {}).keys() %}{% do _data['ssl'].update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- include "oslo_templates/files/queens/oslo/_database.conf" %}
[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)
# Possible values:
# netboot - <No description provided>
# local - <No description provided>
{%- if conductor.default_boot_option is defined %}
default_boot_option = {{ conductor.default_boot_option }}
{%- else %}
#default_boot_option = <None>
{%- endif %}
# Whether to upload the config drive to object store. Set this
# option to True to store config drive in swift or radosgw.
# (boolean value)
# Deprecated group/name - [conductor]/configdrive_use_swift
#configdrive_use_object_store = false
# Type of object store endpoint type to be used as a backend
# (string value)
# Possible values:
# swift - <No description provided>
# radosgw - <No description provided>
# Deprecated group/name - [glance]/temp_url_endpoint_type
#object_store_endpoint_type = swift
[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)
#efi_system_partition_size = 200
# 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 =
{%- set _data = ironic.get('glance', ironic.get('identity', {})) %}
{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- set auth_type = _data.get('auth_type', 'password') %}
{%- include "oslo_templates/files/queens/keystoneauth/_type_" + auth_type + ".conf" %}
# 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 %}
# 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
# Number of retries when downloading an image from glance.
# (integer value)
#glance_num_retries = 0
# 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. For example:
# "AUTH_a422b2-91f3-2f46-74b7-d7c9e8958f5d30". If not set, the
# default value is calculated based on the ID of the project
# used to access Swift (as set in the [swift] section). 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. Used for temporary URLs, will be fetched
# from the service catalog, if not provided. (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. For the Swift
# backend, the key on the service project (as set in the
# [swift] section) is used by default. (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)
#client_timeout = 60
# Port to be used for iLO operations (port value)
# Minimum value: 0
# Maximum value: 65535
#client_port = 443
# The Swift iLO container to store data. (string value)
#swift_ilo_container = ironic_ilo_container
# Amount of time in seconds for Swift objects to auto-expire.
# (integer value)
#swift_object_expiry_timeout = 900
# 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)
#use_web_server_for_images = false
# Priority for reset_ilo clean step. (integer value)
#clean_priority_reset_ilo = 0
# Priority for reset_bios_to_default clean step. (integer
# value)
#clean_priority_reset_bios_to_default = 10
# Priority for reset_secure_boot_keys clean step. This step
# will reset the secure boot keys to manufacturing defaults.
# (integer value)
#clean_priority_reset_secure_boot_keys_to_default = 20
# 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)
#clean_priority_clear_secure_boot_keys = 0
# 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)
#clean_priority_reset_ilo_credential = 30
# Number of times a power operation needs to be retried
# (integer value)
#power_retry = 6
# Amount of time in seconds to wait in between power
# operations (integer value)
#power_wait = 2
# CA certificate file to validate iLO. (string value)
#ca_file = <None>
# 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)
# Possible values:
# auto - <No description provided>
# bios - <No description provided>
# uefi - <No description provided>
#default_boot_mode = auto
[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
# Always use this endpoint URL for requests for this client.
# NOTE: The unversioned endpoint should be specified here; to
# request a particular API version, use the `version`, `min-
# version`, and/or `max-version` options. (string value)
#endpoint_override = <None>
# Verify HTTPS connections. (boolean value)
#insecure = false
# PEM encoded client certificate key file (string value)
#keyfile = <None>
# The maximum major version of a given API, intended to be
# used as the upper bound of a range with min_version.
# Mutually exclusive with version. (string value)
#max_version = <None>
# The minimum major version of a given API, intended to be
# used as the lower bound of a range with max_version.
# Mutually exclusive with version. If min_version is given
# with no max_version it is as if max version is "latest".
# (string value)
#min_version = <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>
# The default region_name for endpoint URL discovery. (string
# value)
#region_name = <None>
# The default service_name for endpoint URL discovery. (string
# value)
#service_name = <None>
# The default service_type for endpoint URL discovery. (string
# value)
#service_type = baremetal-introspection
# DEPRECATED: ironic-inspector HTTP endpoint. If this is not
# set, the service catalog will be used. (string value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Use [inspector]/endpoint_override option instead to
# set a specific ironic-inspector API URL to connect to.
#service_url = <None>
# period (in seconds) to check status of nodes on inspection
# (integer value)
#status_check_period = 60
# Scope for system operations (string value)
#system_scope = <None>
# 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>
# List of interfaces, in order of preference, for endpoint
# URL. (list value)
#valid_interfaces = internal,public
# Minimum Major API version within a given Major API version
# for endpoint URL discovery. Mutually exclusive with
# min_version and max_version (string value)
#version = <None>
[ipmi]
#
# From ironic
#
# Maximum time in seconds to retry retryable IPMI operations.
# (An operation is retryable, for example, if the requested
# operation fails because the BMC is busy.) Setting this too
# high can cause the sync power state periodic task to hang
# when there are slow or unresponsive BMCs. (integer value)
#command_retry_timeout = 60
# DEPRECATED: Maximum time in seconds to retry IPMI
# operations. Setting this too high can cause the sync power
# state periodic task to hang when there are slow or
# unresponsive BMCs. (integer value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Use option [ipmi]/command_retry_timeout to specify
# the timeout value for IPMI command retries, and use option
# [conductor]/power_state_change_timeout to specify the
# timeout value for waiting for a power operation to complete
# so that a baremetal node reaches the desired power state.
#retry_timeout = <None>
# 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)
# Possible values:
# CIFS - <No description provided>
# NFS - <No description provided>
#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
# Possible values:
# 443 - <No description provided>
# 80 - <No description provided>
#port = 443
# Authentication method to be used for iRMC operations (string
# value)
# Possible values:
# basic - <No description provided>
# digest - <No description provided>
#auth_method = basic
# Timeout (in seconds) for iRMC operations (integer value)
#client_timeout = 60
# Sensor data retrieval method. (string value)
# Possible values:
# ipmitool - <No description provided>
# scci - <No description provided>
#sensor_method = ipmitool
# SNMP protocol version (string value)
# Possible values:
# v1 - <No description provided>
# v2c - <No description provided>
# v3 - <No description provided>
#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
# Priority for restore_irmc_bios_config clean step. (integer
# value)
#clean_priority_restore_irmc_bios_config = 0
# List of vendor IDs and device IDs for GPU device to inspect.
# List items are in format vendorID/deviceID and separated by
# commas. GPU inspection will use this value to count the
# number of GPU device in a node. If this option is not
# defined, then leave out pci_gpu_devices in capabilities
# property. Sample gpu_ids value: 0x1000/0x0079,0x2100/0x0080
# (list value)
#gpu_ids =
[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
# List of vendor IDs and device IDs for GPU device to inspect.
# List items are in format vendorID/deviceID and separated by
# commas. GPU inspection will use this value to count the
# number of GPU device in a node. If this option is not
# defined, then leave out pci_gpu_devices in capabilities
# property. Sample gpu_ids value: 0x1000/0x0079,0x2100/0x0080
# (list value)
#gpu_ids =
[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]
{%- set _data = ironic.get('identity', {}) %}
{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- set auth_type = _data.get('auth_type', 'password') %}
{%- include "oslo_templates/files/queens/keystoneauth/_type_" + auth_type + ".conf" %}
[matchmaker_redis]
#
# From oslo.messaging
#
# DEPRECATED: Host to locate redis. (string value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#host = 127.0.0.1
# DEPRECATED: Use this port to connect to redis host. (port
# value)
# Minimum value: 0
# Maximum value: 65535
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#port = 6379
# DEPRECATED: Password for Redis server (optional). (string
# value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#password =
# DEPRECATED: List of Redis Sentinel hosts (fault tolerance
# mode), e.g., [host:port, host1:port ... ] (list value)
# This option is deprecated for removal.
# Its value may be silently ignored in the future.
# Reason: Replaced by [DEFAULT]/transport_url
#sentinel_hosts =
# Redis replica set name. (string value)
#sentinel_group_name = oslo-messaging-zeromq
# Time in ms to wait between connection attempts. (integer
# value)
#wait_timeout = 2000
# Time in ms to wait before the transaction is killed.
# (integer value)
#check_timeout = 20000
# Timeout in ms on blocking socket operations. (integer value)
#socket_timeout = 10000
[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]
{%- set _data = ironic.get('neutron', ironic.get('identity', {})) %}
{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- set auth_type = _data.get('auth_type', 'password') %}
{%- include "oslo_templates/files/queens/keystoneauth/_type_" + auth_type + ".conf" %}
#
# From ironic
#
# 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 =
# 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 %}
# 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 =
# Neutron network UUID or name for booting the ramdisk for
# rescue mode. This is not the network that the rescue ramdisk
# will use post-boot -- the tenant network is used for that.
# Required for "neutron" network interface, if rescue mode
# will be used. It is not used for the "flat" or "noop"
# network interfaces. If a name is provided, it must be unique
# among all networks or rescue will fail. (string value)
{%- if conductor.get('neutron', {}).get('rescuing_network') %}
rescuing_network = {{ conductor.neutron.rescuing_network }}
{%- else %}
#rescuing_network = <None>
{%- endif %}
# List of Neutron Security Group UUIDs to be applied during
# the node rescue process. Optional for the "neutron" network
# interface and not used for the "flat" or "noop" network
# interfaces. If not specified, the default security group is
# used. (list value)
#rescuing_network_security_groups =
# Client retries in the case of a failed request. (integer
# value)
#retries = 3
# Timeout value for connecting to neutron in seconds. (integer
# value)
#url_timeout = 30
[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>
# 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]
{%- if ironic.concurrency is defined %}
{%- set _data = ironic.concurrency %}
{%- include "oslo_templates/files/queens/oslo/_concurrency.conf" %}
{%- endif %}
[oslo_messaging_notifications]
{%- set _data = ironic.notification %}
{%- include "oslo_templates/files/queens/oslo/messaging/_notifications.conf" %}
{%- if ironic.message_queue is defined %}
{%- set _data = ironic.message_queue %}
{%- if _data.engine == 'rabbitmq' %}
{%- set messaging_engine = 'rabbit' %}
{%- else %}
{%- set messaging_engine = _data.engine %}
{%- endif %}
[oslo_messaging_{{ messaging_engine }}]
{%- if _data.ssl is defined and 'cacert_file' not in _data.get('ssl', {}).keys() %}{% do _data['ssl'].update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- include "oslo_templates/files/queens/oslo/messaging/_" + messaging_engine + ".conf" %}
{%- endif %}
[oslo_policy]
{%- if ironic.policy is defined %}
{%- set _data = ironic.policy %}
{%- include "oslo_templates/files/queens/oslo/_policy.conf" %}
{%- endif %}
[profiler]
{%- if ironic.profiler is defined %}
{%- set _data = ironic.profiler %}
{%- include "oslo_templates/files/queens/oslo/_osprofiler.conf" %}
{%- endif %}
[pxe]
#
# From ironic
#
# Additional append parameters for baremetal PXE boot. (string
# value)
#pxe_append_params = nofb nomodeset vga=normal
# 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)
#uefi_pxe_config_template = $pybasedir/drivers/modules/pxe_grub_common.template
# 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)
#tftp_server = $my_ip
# 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 %}
# The permission that will be applied to the TFTP folders upon
# creation. This should be set to the permission such that the
# tftpserver has access to read the contents of the configured
# TFTP folder. This setting is only required when the
# operating system's umask is restrictive such that ironic-
# conductor is creating files that cannot be read by the TFTP
# server. Setting to <None> will result in the operating
# system's umask to be utilized for the creation of new tftp
# folders. It is recommended that an octal representation is
# specified. For example: 0o755 (integer value)
#dir_permission = <None>
# 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
# 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)
# Possible values:
# 4 - <No description provided>
# 6 - <No description provided>
#ip_version = 4
# Download deploy and rescue 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]
{%- set _data = ironic.get('identity', {}) %}
{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- set auth_type = _data.get('auth_type', 'password') %}
{%- include "oslo_templates/files/queens/keystoneauth/_type_" + auth_type + ".conf" %}
[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
# Response timeout in seconds used for UDP transport. Timeout
# should be a multiple of 0.5 seconds and is applicable to
# each retry. (floating point value)
# Minimum value: 0
#udp_transport_timeout = 1.0
# Maximum number of UDP request retries, 0 means no retries.
# (integer value)
# Minimum value: 0
#udp_transport_retries = 5
[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]
{%- set _data = ironic.get('swift', ironic.get('identity', {})) %}
{%- if 'cacert_file' not in _data.keys() %}{% do _data.update({'cacert_file': ironic.cacert_file}) %}{% endif %}
{%- set auth_type = _data.get('auth_type', 'password') %}
{%- include "oslo_templates/files/queens/keystoneauth/_type_" + auth_type + ".conf" %}
# Maximum number of times to retry a Swift request, before
# failing. (integer value)
#swift_max_retries = 2