[DEFAULT]

#
# From instack-undercloud
#

# Local file path to the necessary images. The path should be a
# directory readable by the current user that contains the full set of
# images. (string value)
{% if undercloud_image_path is defined %}
image_path = {{undercloud_image_path}}
{% else %}
#image_path = .
{% endif %}

# Fully qualified hostname (including domain) to set on the
# Undercloud. If left unset, the current hostname will be used, but
# the user is responsible for configuring all system hostname settings
# appropriately.  If set, the undercloud install will configure all
# system hostname settings. (string value)
{% if undercloud_undercloud_hostname is defined %}
undercloud_hostname = {{undercloud_undercloud_hostname}}
{% else %}
#undercloud_hostname = <None>
{% endif %}

{% if release in ['mitaka', 'newton', 'ocata', 'pike'] %}
# Network CIDR for the Neutron-managed network for Overcloud
# instances. This should be the subnet used for PXE booting. (string
# value)
network_cidr = {{undercloud_network_cidr}}
{% endif %}

# IP information for the interface on the Undercloud that will be
# handling the PXE boots and DHCP for Overcloud instances.  The IP
# portion of the value will be assigned to the network interface
# defined by local_interface, with the netmask defined by the prefix
# portion of the value. (string value)
local_ip = {{undercloud_local_ip|default(
    '%s/%s' % (undercloud_network_cidr|nthhost(1),
    undercloud_network_cidr.split('/').1))}}

{% if release in ['mitaka', 'newton', 'ocata', 'pike'] %}
# Network gateway for the Neutron-managed network for Overcloud
# instances. This should match the local_ip above when using
# masquerading. (string value)
network_gateway = {{undercloud_network_gateway|default(
    undercloud_network_cidr|nthhost(1))}}
{% endif %}

# MTU, set neutron on the undercloud to match mtu of the nics
# (string value)
{% if undercloud_local_mtu is defined %}
local_mtu = {{ undercloud_local_mtu }}
{% endif %}

{% if release in ['mitaka', 'newton'] %}
# Virtual IP address to use for the public endpoints of Undercloud
# services.  Only used if undercloud_service_certficate is set.
# (string value)
undercloud_public_vip = {{undercloud_undercloud_public_vip|default(
    undercloud_network_cidr|nthhost(2))}}

# Virtual IP address to use for the admin endpoints of Undercloud
# services.  Only used if undercloud_service_certficate is set.
# (string value)
undercloud_admin_vip = {{undercloud_undercloud_admin_vip|default(
    undercloud_network_cidr|nthhost(3))}}
{% else %}
# Virtual IP or DNS address to use for the public endpoints of
# Undercloud services. Only used with SSL. (string value)
# Deprecated group/name - [DEFAULT]/undercloud_public_vip
#undercloud_public_host = 192.168.24.2
undercloud_public_host = {{undercloud_undercloud_public_host|default(
    undercloud_network_cidr|nthhost(2))}}

# Virtual IP or DNS address to use for the admin endpoints of
# Undercloud services. Only used with SSL. (string value)
# Deprecated group/name - [DEFAULT]/undercloud_admin_vip
#undercloud_admin_host = 192.168.24.3
undercloud_admin_host = {{undercloud_undercloud_admin_host|default(
    undercloud_network_cidr|nthhost(3))}}
{% endif %}

# Nameserver for the Undercloud node.
# (string value)
{% if virthost_nameservers is string %}
undercloud_nameservers = {{ virthost_nameservers }}
{% elif virthost_nameservers is sequence and virthost_nameservers|length > 0 %}
undercloud_nameservers = {{ virthost_nameservers|join(',') }}
{% elif undercloud_undercloud_nameservers is string %}
undercloud_nameservers = {{ undercloud_undercloud_nameservers }}
{% elif undercloud_undercloud_nameservers is sequence %}
undercloud_nameservers = {{ undercloud_undercloud_nameservers|join(',') }}
{% else %}
# undercloud_nameservers = <None>
{% endif %}

# List of ntp servers to use. (list value)
{% if undercloud_undercloud_ntp_servers is string %}
undercloud_ntp_servers = {{ undercloud_undercloud_ntp_servers }}
{% elif undercloud_undercloud_ntp_servers is sequence %}
undercloud_ntp_servers = {{ undercloud_undercloud_ntp_servers|join(',') }}
{% else %}
#undercloud_ntp_servers =
{% endif %}

# DNS domain name to use when deploying the overcloud. The overcloud
# parameter "CloudDomain" must be set to a matching value. (string
# value)
#overcloud_domain_name = localdomain
{% if overcloud_cloud_domain is defined %}
overcloud_domain_name = {{overcloud_cloud_domain}}
{% endif %}

# Certificate file to use for OpenStack service SSL connections.
# Setting this enables SSL for the OpenStack API endpoints, leaving it
# unset disables SSL. (string value)
#undercloud_service_certificate =

# When set to True, an SSL certificate will be generated as part of
# the undercloud install and this certificate will be used in place of
# the value for undercloud_service_certificate.  The resulting
# certificate will be written to
# /etc/pki/tls/certs/undercloud-[undercloud_public_vip].pem.  This
# certificate is signed by CA selected by the
# "certificate_generation_ca" option. (boolean value)
#generate_service_certificate = true
{% if undercloud_generate_service_certificate is defined %}
generate_service_certificate = {{undercloud_generate_service_certificate}}
{% endif %}

# The certmonger nickname of the CA from which the certificate will be
# requested. This is used only if the generate_service_certificate
# option is set. Note that if the "local" CA is selected the
# certmonger's local CA certificate will be extracted to /etc/pki/ca-
# trust/source/anchors/cm-local-ca.pem and subsequently added to the
# trust chain. (string value)
#certificate_generation_ca = local
{% if undercloud_certificate_generation_ca is defined %}
certificate_generation_ca = {{undercloud_certificate_generation_ca}}
{% endif %}

# Network interface on the Undercloud that will be handling the PXE
# boots and DHCP for Overcloud instances. (string value)
{% if undercloud_local_interface is defined %}
local_interface = {{undercloud_local_interface}}
{% else %}
#local_interface = eth1
{% endif %}

{% if release in ['mitaka', 'newton', 'ocata', 'pike'] %}
# Network that will be masqueraded for external access, if required.
# This should be the subnet used for PXE booting. (string value)
masquerade_network = {{undercloud_masquerade_network|default(
    undercloud_network_cidr)}}
{% endif %}

{% if release in ['mitaka', 'newton', 'ocata', 'pike'] %}
# Start of DHCP allocation range for PXE and DHCP of Overcloud
# instances. (string value)
dhcp_start = {{undercloud_dhcp_start|default(
    undercloud_network_cidr|nthhost(5))}}

# End of DHCP allocation range for PXE and DHCP of Overcloud
# instances. (string value)
dhcp_end = {{undercloud_dhcp_end|default(
    undercloud_network_cidr|nthhost(30))}}
{% endif %}

# Path to hieradata override file. If set, the file will be copied
# under /etc/puppet/hieradata and set as the first file in the hiera
# hierarchy. This can be used to to custom configure services beyond
# what undercloud.conf provides (string value)
hieradata_override = {{ undercloud_hieradata_override }}

# Network interface on which inspection dnsmasq will listen.  If in
# doubt, use the default value. (string value)
# Deprecated group/name - [DEFAULT]/discovery_interface
{% if undercloud_inspection_interface is defined %}
inspection_interface = {{undercloud_inspection_interface}}
{% else %}
#inspection_interface = br-ctlplane
{% endif %}

{% if release in ['mitaka', 'newton', 'ocata', 'pike'] %}
# Temporary IP range that will be given to nodes during the inspection
# process.  Should not overlap with the range defined by dhcp_start
# and dhcp_end, but should be in the same network. (string value)
# Deprecated group/name - [DEFAULT]/discovery_iprange
inspection_iprange = {{undercloud_inspection_iprange|default(
    '%s,%s' % (undercloud_network_cidr|nthhost(100),
    undercloud_network_cidr|nthhost(120)))}}
{% endif %}

# Whether to enable extra hardware collection during the inspection
# process.
{% if undercloud_inspection_extras is defined %}
inspection_extras = {{undercloud_inspection_extras}}
{% endif %}

# Whether to run benchmarks when inspecting nodes. (boolean value)
# Deprecated group/name - [DEFAULT]/discovery_runbench
{% if undercloud_inspection_runbench is defined %}
inspection_runbench = {{undercloud_inspection_runbench}}
{% else %}
#inspection_runbench = false
{% endif %}

# Whether to enable the debug log level for Undercloud OpenStack
# services. (boolean value)
undercloud_debug = {{undercloud_undercloud_debug}}

{% if containerized_undercloud|bool and release != 'rocky' %}
# Container CLI used for deployment;
# Can be docker or podman. (string value)
container_cli = {{undercloud_container_cli}}
{% endif %}

# Enable or disable SELinux during the deployment. (boolean value)
{% if undercloud_selinux_enabled is defined %}
undercloud_enable_selinux = {{undercloud_selinux_enabled}}
{% else %}
# undercloud_enable_selinux = true
{% endif %}

# Whether to install Tempest in the Undercloud. (boolean value)
enable_tempest = {{undercloud_enable_tempest}}

# Whether to install Telemetry services (ceilometer, aodh) in the
# Undercloud. (boolean value)
enable_telemetry = {{undercloud_enable_telemetry}}

# Whether to install requirements to run the TripleO validations.
# (boolean value)
enable_validations = {{undercloud_enable_validations}}

# Whether to install the TripleO UI. (boolean value)
enable_ui = {{undercloud_enable_ui}}

# Whether to install Mistral in the Undercloud. (boolean value)
enable_mistral = {{undercloud_enable_mistral}}

# Whether to install Ironic in the Undercloud. (boolean value)
enable_ironic = {{undercloud_enable_ironic}}

# Whether to install Ironic-inspector in the Undercloud. (boolean value)
enable_ironic_inspector = {{undercloud_enable_ironic_inspector}}

# Whether to install Zaqar in the Undercloud. (boolean value)
enable_zaqar = {{undercloud_enable_zaqar}}

# Whether to enable Swift encryption at-rest or not. (boolean value)
enable_swift_encryption = {{undercloud_enable_swift_encryption}}

# FIXME(mandre) turn this into ansible variable
heat_native=true

# Whether to use iPXE for deploy by default. (boolean value)
ipxe_deploy = {{undercloud_ipxe_deploy}}

# Whether to install Monitoring services in the Undercloud. (boolean
# value)
enable_monitoring = {{undercloud_enable_monitoring}}

# Whether to install novajoin metadata service in the Undercloud.
{% if undercloud_enable_novajoin or enable_tls_everywhere %}
enable_novajoin = true
{% else %}
enable_novajoin = false
{% endif %}

# One Time Password to register Undercloud node with IPA server.
# Required when enable_novajoin = true.
{% if undercloud_ipa_otp is defined %}
ipa_otp = {{undercloud_ipa_otp}}
{% else %}
# ipa_otp =
{% endif %}

{% if undercloud_docker_registry_mirror is defined and undercloud_docker_registry_mirror %}
docker_registry_mirror = {{undercloud_docker_registry_mirror}}
{% else %}
# docker_registry_mirror =
{% endif %}

{% if undercloud_docker_insecure_registries is defined and undercloud_docker_insecure_registries %}
docker_insecure_registries= {{undercloud_docker_insecure_registries}}
{% else %}
#docker_insecure_registries=
{% endif %}

# additional env files for undercloud, used with containers

{% if undercloud_container_images_file is defined and containerized_undercloud|bool %}
container_images_file = {{ undercloud_container_images_file }}
{% elif containerized_undercloud|bool %}
container_images_file = {{ working_dir }}/containers-prepare-parameter.yaml
{% else %}
#container_images_file = <None>
{% endif %}

{% if undercloud_custom_env_files is defined %}
custom_env_files = {{ undercloud_custom_env_files.split()|join(',') }}
{% else %}
#custom_env_files = <None>
{% endif %}

{% if undercloud_net_config_override is defined %}
net_config_override = {{ undercloud_net_config_override }}
{% else %}
#net_config_override = <None>
{% endif %}

# Output directory for state, like downloaded ansible configs and
# processed heat templates for heat installer
{% if undercloud_undercloud_output_dir is defined %}
output_dir = {{undercloud_undercloud_output_dir}}
{% else %}
#output_dir = $HOME/.undercloud-heat-installer
{% endif %}

# Clean up mode for the temp files for heat installer on exit
{% if undercloud_undercloud_cleanup is defined %}
cleanup = {{undercloud_undercloud_cleanup}}
{% else %}
#cleanup = True
{% endif %}

# Whether to clean undercloud rpms after an upgrade
# to a containerized undercloud.
{% if undercloud_upgrade_cleanup is defined %}
upgrade_cleanup = {{undercloud_upgrade_cleanup}}
{% else %}
#upgrade_cleanup = False
{% endif %}

# Heat templates directory
templates = {{ undercloud_templates_path }}

# Extra config elements.
{% if undercloud_conf_extra != "" %}
{{ undercloud_conf_extra }}
{% endif %}

# Enable support for routed ctlplane networks
{% if undercloud_enable_routed_networks|default(false)|bool %}
enable_routed_networks = {{undercloud_enable_routed_networks}}
{% endif %}

{% if undercloud_roles_data is defined %}
roles_file = {{undercloud_roles_data}}
{% endif %}

# Whether to clean overcloud nodes (wipe the hard drive) between
# deployments and after the introspection.
{% if undercloud_clean_nodes is defined %}
clean_nodes = {{undercloud_clean_nodes}}
{% endif %}


{% if release in ['mitaka', 'newton', 'ocata', 'pike'] %}
[auth]

#
# From instack-undercloud
#

# Password used for MySQL databases. If left unset, one will be
# automatically generated. (string value)
{% if undercloud_undercloud_db_password is defined %}
undercloud_db_password = {{undercloud_undercloud_db_password}}
{% else %}
#undercloud_db_password = <None>
{% endif %}

# Keystone admin token. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_admin_token is defined %}
undercloud_admin_token = {{undercloud_undercloud_admin_token}}
{% else %}
#undercloud_admin_token = <None>
{% endif %}

# Keystone admin password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_admin_password is defined %}
undercloud_admin_password = {{undercloud_undercloud_admin_password}}
{% else %}
#undercloud_admin_password = <None>
{% endif %}

# Glance service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_glance_password is defined %}
undercloud_glance_password = {{undercloud_undercloud_glance_password}}
{% else %}
#undercloud_glance_password = <None>
{% endif %}

# Heat db encryption key(must be 16, 24, or 32 characters. If left
# unset, one will be automatically generated. (string value)
{% if undercloud_undercloud_heat_encryption_key is defined %}
undercloud_heat_encryption_key = {{undercloud_undercloud_heat_encryption_key}}
{% else %}
#undercloud_heat_encryption_key = <None>
{% endif %}

# Heat service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_heat_password is defined %}
undercloud_heat_password = {{undercloud_undercloud_heat_password}}
{% else %}
#undercloud_heat_password = <None>
{% endif %}

# Neutron service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_neutron_password is defined %}
undercloud_neutron_password = {{undercloud_undercloud_neutron_password}}
{% else %}
#undercloud_neutron_password = <None>
{% endif %}

# Nova service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_nova_password is defined %}
undercloud_nova_password = {{undercloud_undercloud_nova_password}}
{% else %}
#undercloud_nova_password = <None>
{% endif %}

# Ironic service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_ironic_password is defined %}
undercloud_ironic_password = {{undercloud_undercloud_ironic_password}}
{% else %}
#undercloud_ironic_password = <None>
{% endif %}

# Ceilometer service password. If left unset, one will be
# automatically generated. (string value)
{% if undercloud_undercloud_ceilometer_password is defined %}
undercloud_ceilometer_password = {{undercloud_undercloud_ceilometer_password}}
{% else %}
#undercloud_ceilometer_password = <None>
{% endif %}

# Aodh service password. If left unset, one will be
# automatically generated. (string value)
{% if undercloud_undercloud_aodh_password is defined %}
undercloud_aodh_password = {{undercloud_undercloud_aodh_password}}
{% else %}
#undercloud_aodh_password = <None>
{% endif %}

# Sensu service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_sensu_password is defined %}
undercloud_sensu_password = {{undercloud_undercloud_sensu_password}}
{% else %}
#undercloud_sensu_password = <None>
{% endif %}

# Ceilometer metering secret. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_ceilometer_metering_secret is defined %}
undercloud_ceilometer_metering_secret = {{undercloud_undercloud_ceilometer_metering_secret}}
{% else %}
#undercloud_ceilometer_metering_secret = <None>
{% endif %}

# Ceilometer snmpd user. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_ceilometer_snmpd_user is defined %}
undercloud_ceilometer_snmpd_user = {{undercloud_undercloud_ceilometer_snmpd_user}}
{% else %}
#undercloud_ceilometer_snmpd_user = <None>
{% endif %}

# Ceilometer snmpd password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_ceilometer_snmpd_password is defined %}
undercloud_ceilometer_snmpd_password = {{undercloud_undercloud_ceilometer_snmpd_password}}
{% else %}
#undercloud_ceilometer_snmpd_password = <None>
{% endif %}

# Swift service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_swift_password is defined %}
undercloud_swift_password = {{undercloud_undercloud_swift_password}}
{% else %}
#undercloud_swift_password = <None>
{% endif %}

# Mistral service password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_mistral_password is defined %}
undercloud_mistral_password = {{undercloud_undercloud_mistral_password}}
{% else %}
#undercloud_mistral_password = <None>
{% endif %}

# Rabbitmq cookie. If left unset, one will be automatically generated.
# (string value)
{% if undercloud_undercloud_rabbit_cookie is defined %}
undercloud_rabbit_cookie = {{undercloud_undercloud_rabbit_cookie}}
{% else %}
#undercloud_rabbit_cookie = <None>
{% endif %}

# Rabbitmq password. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_rabbit_password is defined %}
undercloud_rabbit_password = {{undercloud_undercloud_rabbit_password}}
{% else %}
#undercloud_rabbit_password = <None>
{% endif %}

# Rabbitmq username. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_rabbit_username is defined %}
undercloud_rabbit_username = {{undercloud_undercloud_rabbit_username}}
{% else %}
#undercloud_rabbit_username = <None>
{% endif %}

# Heat stack domain admin password. If left unset, one will be
# automatically generated. (string value)
{% if undercloud_undercloud_heat_stack_domain_admin_password is defined %}
undercloud_heat_stack_domain_admin_password = {{undercloud_undercloud_heat_stack_domain_admin_password}}
{% else %}
#undercloud_heat_stack_domain_admin_password = <None>
{% endif %}

# Swift hash suffix. If left unset, one will be automatically
# generated. (string value)
{% if undercloud_undercloud_swift_hash_suffix is defined %}
undercloud_swift_hash_suffix = {{undercloud_undercloud_swift_hash_suffix}}
{% else %}
#undercloud_swift_hash_suffix = <None>
{% endif %}
{% endif %}

{% if release not in ['mitaka', 'newton', 'ocata', 'pike'] %}
# List of routed network subnets for provisioning and introspection.
# Comma separated list of names/tags. For each network a section/group
# needs to be added to the configuration file with these parameters
# set: cidr, dhcp_start, dhcp_end, inspection_iprange, gateway and
# masquerade_network. Note: The section/group must be placed before or
# after any other section. (See the example section [ctlplane-subnet]
# in the sample configuration file.) (list value)
subnets = ctlplane-subnet

# Name of the local subnet, where the PXE boot and DHCP interfaces for
# overcloud instances is located. The IP address of the
# local_ip/local_interface should reside in this subnet. (string
# value)
local_subnet = ctlplane-subnet

[ctlplane-subnet]

# Network CIDR for the Neutron-managed subnet for Overcloud instances.
# (string value)
# Deprecated group/name - [DEFAULT]/network_cidr
cidr = {{undercloud_network_cidr}}

# Start of DHCP allocation range for PXE and DHCP of Overcloud
# instances on this network. (string value)
# Deprecated group/name - [DEFAULT]/dhcp_start
dhcp_start = {{undercloud_dhcp_start|default(
    undercloud_network_cidr|nthhost(5))}}

# End of DHCP allocation range for PXE and DHCP of Overcloud instances
# on this network. (string value)
# Deprecated group/name - [DEFAULT]/dhcp_end
dhcp_end = {{undercloud_dhcp_end|default(
    undercloud_network_cidr|nthhost(30))}}

# Network gateway for the Neutron-managed network for Overcloud
# instances on this network. (string value)
# Deprecated group/name - [DEFAULT]/network_gateway
gateway = {{undercloud_network_gateway|default(
    undercloud_network_cidr|nthhost(1))}}

# Temporary IP range that will be given to nodes on this network
# during the inspection process. Should not overlap with the range
# defined by dhcp_start and dhcp_end, but should be in the same ip
# subnet. (string value)
# Deprecated group/name - [DEFAULT]/inspection_iprange
inspection_iprange = {{undercloud_inspection_iprange|default(
    '%s,%s' % (undercloud_network_cidr|nthhost(100),
    undercloud_network_cidr|nthhost(120)))}}

# The network will be masqueraded for external access. (boolean value)
masquerade={{ ctlplane_masquerade|default(false) }}
{% endif %}
