--- # Cleaning turns on ironic conductor clean_nodes flag # which causes the nodes to be wiped after deletion. cleaning: true # Wipe all data from the disks rather than only the metadata. cleaning_disk_erase: false # Enable fast_track mode for ironic which allows skipping a power # cycle fast_track: true http_boot_folder: /httpboot ironic_tftp_master_path: /var/lib/ironic/master_images staging_drivers_include: false file_url_port: "8080" ironicclient_source_install: false openstacksdk_source_install: true ironicinspector_source_install: true ironicinspectorclient_source_install: false sushy_source_install: false staging_drivers_source_install: true # Setting to utilize diskimage-builder to create a bootable image. create_image_via_dib: true dib_image_type: vm # Setting to install diskimage-builder install_dib: "{{ create_image_via_dib }}" # Setting to prepend a partition image with a boot sector and partition table. transform_boot_image: false # If testing is true, then the environment is setup for using libvirt # virtual machines for the hardware instead of real hardware. testing: false # Use Rabbit MQ as a message bus. use_rabbitmq: false # set to true to skip installation completely skip_install: False # set to true to skip installing ironic dependencies skip_package_install: False # set to true to skip generation of configs, ironic db and rabbitmq configuration skip_bootstrap: False # set to true to skip starting ironic services and dependencies skip_start: False # set to true to skip performing online data migrations skip_migrations: "{{ skip_bootstrap }}" # Default network interface that bifrost will be attached to. # This is used in ipa_* so it must be before network_interface: "virbr0" ans_network_interface: "{{ network_interface | replace('-', '_') }}" internal_interface: "{{ hostvars[inventory_hostname]['ansible_' + ans_network_interface]['ipv4'] }}" internal_ip: "{{ internal_interface['address'] }}" # Normally this would setting would be http in a bifrost installation # without TLS. This setting allows a user to override the setting in case # the local webserver has been updated to support HTTPS. # Note: Users wishing to leverage HTTPS should reference the iPXE # documentation at https://ipxe.org/crypto ipa_file_protocol: "http" ipa_upstream_release: "master" use_tinyipa: true enable_uefi_ipxe: true ipxe_efi_binary: ipxe.efi ipa_kernel: "{{http_boot_folder}}/ipa.kernel" ipa_ramdisk: "{{http_boot_folder}}/ipa.initramfs" ipa_kernel_url: "{{ ipa_file_protocol }}://{{ internal_ip }}:{{ file_url_port }}/ipa.kernel" ipa_kernel_upstream_url: >- {%- if use_tinyipa | bool -%} https://tarballs.openstack.org/ironic-python-agent/tinyipa/files/tinyipa-{{ ipa_upstream_release }}.vmlinuz {%- elif ipa_upstream_release == "stable-train" -%} https://tarballs.openstack.org/ironic-python-agent/dib/files/ipa-centos7-{{ ipa_upstream_release }}.kernel {%- else -%} https://tarballs.openstack.org/ironic-python-agent/dib/files/ipa-centos8-{{ ipa_upstream_release }}.kernel {%- endif -%} ipa_kernel_upstream_checksum_algo: "sha256" ipa_kernel_upstream_checksum_url: "{{ ipa_kernel_upstream_url }}.{{ ipa_kernel_upstream_checksum_algo }}" ipa_ramdisk_url: "{{ ipa_file_protocol }}://{{ internal_ip }}:{{ file_url_port }}/ipa.initramfs" ipa_ramdisk_upstream_url: >- {%- if use_tinyipa | bool -%} https://tarballs.openstack.org/ironic-python-agent/tinyipa/files/tinyipa-{{ ipa_upstream_release }}.gz {%- elif ipa_upstream_release == "stable-train" -%} https://tarballs.openstack.org/ironic-python-agent/dib/files/ipa-centos7-{{ ipa_upstream_release }}.initramfs {%- else -%} https://tarballs.openstack.org/ironic-python-agent/dib/files/ipa-centos8-{{ ipa_upstream_release }}.initramfs {%- endif -%} ipa_ramdisk_upstream_checksum_algo: "sha256" ipa_ramdisk_upstream_checksum_url: "{{ ipa_ramdisk_upstream_url }}.{{ ipa_ramdisk_upstream_checksum_algo }}" deploy_image_filename: "deployment_image.qcow2" deploy_image: "{{http_boot_folder}}/{{deploy_image_filename}}" # Use cirros instead of building an image via diskimage-builder use_cirros: false # Download IPA by default download_ipa: true update_repos: true update_ipa: "{{ update_repos }}" cirros_deploy_image_upstream_url: https://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img # By default bifrost will deploy dnsmasq to utilize as an integrated DHCP # server. If you already have a DHCP server, you will need to disable # this setting, and perform manual configuration of your DHCP server. include_dhcp_server: true # *_git_url can be overridden by local clones for offline installs dib_git_url: https://opendev.org/openstack/diskimage-builder ironicclient_git_url: https://opendev.org/openstack/python-ironicclient openstacksdk_git_url: https://opendev.org/openstack/openstacksdk ironic_git_url: https://opendev.org/openstack/ironic staging_drivers_git_url: https://opendev.org/x/ironic-staging-drivers ironicinspector_git_url: https://opendev.org/openstack/ironic-inspector ironicinspectorclient_git_url: https://opendev.org/openstack/python-ironic-inspector-client ipa_git_url: https://opendev.org/openstack/ironic-python-agent ipa_builder_git_url: https://opendev.org/openstack/ironic-python-agent-builder mysql_username: "root" mysql_password: "" disable_dnsmasq_dns: True ironic_git_folder: /opt/stack/ironic ironicclient_git_folder: /opt/stack/python-ironicclient openstacksdk_git_folder: /opt/stack/openstacksdk dib_git_folder: /opt/stack/diskimage-builder reqs_git_folder: /opt/stack/requirements staging_drivers_git_folder: /opt/stack/ironic-staging-drivers ironicinspector_git_folder: /opt/stack/ironic-inspector ironicinspectorclient_git_folder: /opt/stack/python-ironic-inspector-client sushy_git_folder: /opt/stack/sushy ipa_git_folder: /opt/stack/ironic-python-agent ipa_builder_git_folder: /opt/stack/ironic-python-agent-builder enabled_hardware_types: "ipmi,redfish,manual-management,ilo" default_deploy_interface: "direct" enabled_deploy_interfaces: "iscsi,direct" # These are calculated based on enabled_hardware_types if empty enabled_bios_interfaces: "" enabled_boot_interfaces: "" enabled_management_interfaces: "" enabled_power_interfaces: "" default_resource_class: baremetal # Extra pip packages to install with ironic # This should be a list of pip-installable references. # default: empty list ironic_extra_packages: [] # DHCP pool for requests -- ignored if inventory_dhcp is set to True # since IP allocation will be static. dhcp_pool_start: 192.168.1.200 dhcp_pool_end: 192.168.1.250 dhcp_lease_time: 12h dhcp_static_mask: 255.255.255.0 # Dnsmasq default route for clients. If not defined, dnsmasq will push to clients # as default route the same IP of the dnsmasq server. # If set to false, it will disable default route creation in clients. # Default: undefined # dnsmasq_router: # Dnsmasq default dns servers for clients. If defined, dnsmasq will use the specified # DNS servers for name resolving. # dnsmasq_dns_servers: 8.8.8.8,8.8.4.4 # Support for CORS configuration # By default CORS support is disabled. enable_cors: false # Origin to accept for CORS requests cors_allowed_origin: "http://localhost:8000" # bifrost utilizes noauth mode by default and as such # the setting should be set to false. This setting should # not need to be modified by the user. enable_cors_credential_support: false # The path to the directory where the deployment logs should be stored when using # local storage. ironic_agent_deploy_logs_local_path: "{{ '/'.join([ironic_log_dir, 'deploy']) }}" # Set this to true to configure dnsmasq to respond to requests from the # hosts in your dynamic inventory. inventory_dhcp: False # Set this to true to configure dnsmasq to resolv to ipv4_address from the # hosts in your dynamic inventory. inventory_dns: False # Set this to true to configure dnsmasq to populate the NTP servers # setting of dnsmasq. # Several NTP servers can be specified, seperated by commas. # dnsmasq_ntp_servers: # Settings to enable the use of inspector enable_inspector: true inspector_debug: true inspector_manage_firewall: false # Set ironic_log_dir to use a non-default log directory for ironic. ironic_log_dir: /var/log/ironic # Set inspector_log_dir to use a non-default log directory for inspector. #inspector_log_dir: # Set nginx_log_dir to use a non-default log directory for nginx. nginx_log_dir: /var/log/nginx inspector_data_dir: "/opt/stack/ironic-inspector/var" inspector_store_ramdisk_logs: true # Note: inspector_port_addition has three valid values: all, active, pxe inspector_port_addition: "pxe" # Note: inspector_keep_ports has three valid values: all, present, added inspector_keep_ports: "present" # String value containing extra kernel parameters for the inspector default # PXE configuration. #inspector_extra_kernel_options: # Set inspector_processing_hooks to specify a non-default comma-separated # list of processing hooks for inspector. #inspector_processing_hooks: # Whether to store introspection data using the local Nginx web server as an # object storage service. DEPRECATED, the data can be stored in the database. inspector_store_data_in_nginx: false # When inspector_store_data_in_nginx is true, this is the URL of the Nginx # 'Swift' API endpoint. inspector_store_data_url: "http://localhost:{{ file_url_port }}" # Inspector defaults inspector: discovery: enabled: "{{ enable_inspector_discovery | default(true) }}" default_node_driver: "{{ inspector_default_node_driver | default('ipmi')}}" # If baremetal nodes should be turned off after inspection. # The inspector default is to turn off the baremetal node # power, this setting to false enables use of fast track mode. power_off_after_inspection: false # We may not have packaged iPXE files on some distros, or may want to # download them on their own. download_ipxe: false # Settings related to installing bifrost in a virtual environment enable_venv: true bifrost_venv_dir: "{{ lookup('env', 'VENV') or '/opt/stack/bifrost' }}" bifrost_venv_env: VIRTUAL_ENV: "{{ bifrost_venv_dir }}" PATH: "{{ bifrost_venv_dir }}/bin:{{ ansible_env.PATH }}" # include regular path via lookup env pydoc: "python -m pydoc" ansible_python_interpreter: "{{ bifrost_venv_dir + '/bin/python3' if enable_venv | bool else '/usr/bin/python3' }}" # Authentication support # By default, bifrost was developed around being a toolkit # for noauth mode. Since we are introducing the concept of # authentication, we need to record the default for # conditional statements in the playbooks. noauth_mode: true # Keystone Support # Default parameter if keystone is enabled, or disabled. enable_keystone: false # Service URLs used for communication with them. ironic_api_url: "http://localhost:6385" ironic_inspector_api_url: "http://localhost:5050" # Directory (on the controller) to keep the passwords password_dir: "{{ lookup('env', 'HOME') }}/.config/bifrost" # Various credentials default_username: bifrost_user default_password: "{{ lookup('password', password_dir + '/default_password') }}" admin_username: admin admin_password: "{{ lookup('password', password_dir + '/admin_password') }}" # NOTE(dtantsur): various URLs in configuration files don't like special # symbols in passwords. service_password: "{{ lookup('password', password_dir + '/service_password chars=ascii_letters,digits') }}" # TODO(dtantsur): deprecate in favor of service_password ironic_db_password: "{{ service_password }}" ironic: service_catalog: username: "ironic" password: "{{ service_password }}" auth_url: "http://127.0.0.1:5000/v3" project_name: "service" keystone: default_username: "{{ default_username }}" default_password: "{{ default_password }}" database: name: "ironic" username: "ironic" password: "{{ ironic_db_password }}" host: "localhost" ironic_inspector: service_catalog: username: "ironic_inspector" password: "{{ service_password }}" auth_url: "http://127.0.0.1:5000/v3" project_name: "service" keystone: default_username: "{{ default_username }}" default_password: "{{ default_password }}" database: name: "inspector" username: "inspector" password: "{{ ironic_db_password }}" host: "localhost" # NOTE(dtantsur): keep in sync with bifrost-keystone-install keystone: debug: true bootstrap: enabled: true username: "{{ admin_username }}" password: "{{ admin_password }}" project_name: admin admin_url: "http://127.0.0.1:35357/v3/" public_url: "http://127.0.0.1:5000/v3/" internal_url: "http://127.0.0.1:5000/v3/" region_name: "RegionOne" message_queue: username: keystone password: "{{ service_password }}" host: localhost port: 5672 database: name: keystone username: keystone password: "{{ service_password }}" host: localhost pip_opts: "{{ lookup('env', 'PIP_OPTS') | default('') }}" # Timeout for gathering facts. fact_gather_timeout: "{{ lookup('config', 'DEFAULT_GATHER_TIMEOUT', on_missing='skip') | default(omit, true) }}"