Pike Series (4.0.0 - 4.0.x) Release Notes


New Features

  • Adds support for performing ironic online data migrations.

Bug Fixes

  • Fixes an issue where the proliantutils library version was unconstrained, potentially resulting in installation of an incompatibile library. The version has been pinned to 2.7.0.


New Features

  • bifrost now always writes clouds.yaml configuration file for os-client-config independently of whether keystone is installed or not.

    This allows unified usage of ironic-related openstackclient commands both in presence and absence of installed keystone by using the openstack command in the following form for both situations:

    openstack --os-cloud bifrost baremetal ...
  • Changes the bifrost-create-vm-nodes role to use Ansible’s virt modules to create virtual machines for bifrost testing. This supersedes the embedded bash script to create virtual machines. As a result, all variables that were present in the bash script are now available as default role variables and can be overridden by standard Ansible means.

    For backward compatibility, some of the variables still support the use of shell variables, but this is deprecated and should be avoided.

  • Allows configuration of inspector processing hooks.

    It is now possible to configure the set of inspection data processing hooks used by ironic inspector via the variable inspector_processing_hooks, which defaults to using inspector’s default list.

  • Allows additional kernel arguments to be specified in inspector PXE config.

    A number of optional features in the Ironic Python Agent (IPA) are configured via kernel command line arguments, e.g. ipa-collect-lldp.

    It is now possible to specify additional kernel arguments for use by the IPA ramdisk during inspection with the inspector_extra_kernel_options variable.

  • Allows to set more than one nameserver in the provisioned instances. The ipv4_nameserver setting can now accept either a string or a list of strings, allowing to populate all desired nameservers.

  • Allows log directories to be configured

    In some cases it is useful to be able to configure the directory into which log files are written by bifrost services.

    It is now possible to configure the ironic, inspector and nginx log directories using the ironic_log_dir, inspector_log_dir, and nginx_log_dir variables respectively.

  • Bifrost now supports the definition of a specific database server, username, password, and database name for ironic and ironic-inspector.

  • If the host for the database is not set to localhost, then actions such as database and user creation are skipped. This functionality is present in both the bootstrapping for ironic, ironic-inspector, and keystone, and applies to initial explicit database schema creation steps where applicable.

  • Bifrost has removed support for Ironic’s SSH based power and management drivers, as a result of Ironic removing the drivers altogether.

    Bifrost testing has moved to ipmitools-based ironic drivers and virtual hardware exposed via ‘virtualbmc’ utility.

    Default ironic drivers set up by bifrost are changed to pxe_ipmitool and agent_ipmitool.

    Default driver for CSV baremetal data files in bifrost’s dynamic inventory is changed to agent_ipmitool.

  • Moves all preparation for testing with ‘virtual’ hardware to the bifrost-create-vm-nodes role, and libvirt interactions have been decoupled from the bifrost-ironic-install role.

  • Allow consuming upper_constraints_file from an env var UPPER_CONSTRAINTS_FILE. This will be specially useful for OpenStack CI, where this var is defined on each job run, pointing to the right requirements file depending on branch.

  • It is now possible to define additional per-host inventory groups for all the hosts that make use of the dynamic JSON inventory. The way to do that is to simply define a list of groups in the host_group property as illustrated in the following example:

    "node1": {
        "uuid": "a8cb6624-0d9f-c882-affc-046ebb96ec01",
        "host_groups": [

    When provisioning virtual machines it’s possible to set the per-VM inventory groups by setting the test_vm_host_groups variable as follows:

    { test_vm_host_groups: { testhost: [nova, cinder] } }

    It is also possible to change the default baremetal group for virtual machines by simply setting the host_default_group variable to a list of default groups as follows:

    { test_vm_default_groups: [baremetal vms] }

    The list of default groups can also be set in the DEFAULT_HOST_GROUPS environmental variable. This is currently the only way to change the default group for baremetal hosts:

    export DEFAULT_HOST_GROUPS="foo bar zoo"

    This will change the default groups to [foo, bar, zoo] instead of the currently [baremetal] default. Extra care should be taken when using this method since most bifrost playbooks depend on having a [baremetal] group available for provisioning hosts.

  • Bifrost’s testing has been moved to use JSON-formatted baremetal inventory file instead of deprecated CSV-formatted one. The bifrost-create-vm-nodes role still accepts baremetal_csv_file variable as path to where to write inventory, but the file content will always be in JSON format. A new variable baremetal_json_file should instead be used as a location to where to write the test baremetal inventory file.

  • Downloaded IPA files can now be verified using checksum files. Upstream builds will be verified by default but you can disable this behavior by setting ipa_kernel_upstream_checksum_url or ipa_ramdisk_upstream_checksum_url variables to empty strings. The default checksum algorithm is sha256 which matches the one provided in the upstream files. In case you want to provide your own checksum files, you can set the previously mentioned variables appropriately to match your setup. You can also set ipa_kernel_upstream_checksum_algo or ipa_ramdisk_upstream_checksum_algo to checksum algorithms like md5 in case you want to provide non-sha256 checksums. Be careful though because these values must be valid for Ansible get_url module’s checksum parameter. Finally, it’s also possible to provide the checksum directly by setting the ipa_kernel_checksum or ipa_ramdisk_checksum variables to $algorithm:$checksum. In case the verification fails, bifrost will retry a few more times to re-download and re-verify the files before giving up assuming there is a network issue or a file corruption on the remote server.

Upgrade Notes

  • Default ironic drivers set up by bifrost are changed to pxe_ipmitool and agent_ipmitool.

  • Default driver for CSV baremetal data files in bifrost’s dynamic inventory is changed to agent_ipmitool. Those bifrost users relying on such behavior must explicitly set the driver in CSV baremetal data file.

  • The baremetal_csv_file variable in bifrost-create-vm-nodes role has been deprecated and will be removed in the Queens release. The inventory file written to this location by this role is now always in JSON format. The variable baremetal_json_file should be used instead of baremetal_csv_file. This concerns only those operators who run tests for bifrost on virtual hardware using bifrost-create-vm-nodes role and out-of-tree scripts to process the baremetal inventory file produced by this role. If such scripts do rely on this file being in CSV format, they must be updated to use JSON format instead.

Deprecation Notes

  • Relying on shell environment variables to set parameters for created virtual nodes is deprecated and will be removed in the Queens release. Any scripts relying on such behavior need to be changed to explicitly pass these parameters as extra-vars to ansible-playbook invocations.

  • Use of the ironic_db_password variable as an available default will be removed in the Queens release of bifrost.

  • Handling of *_ssh drivers for CSV baremetal data format has been removed as the drivers have been removed from ironic.

  • The CSV format for baremetal inventory file is deprecated and using it will be impossible in the Queens release. During deprecation period it’s handling is still supported by bifrost’s dynamic inventory, but this functionality will be removed in the Queens release.

Bug Fixes

  • The CI test playbook previously looked for the requirements respository in /opt/git/openstack/. This has been changed to use the WORKSPACE environment variable when being executed.

  • Corrects an issue where execution of install.yaml would return an error indicating SUDO_USER was not found, by providing a fallback to the ansible_user_id variable.

  • Allows undionly.kpxe boot option to be overridden.

    As an operator, I may wish to provide DHCP boot options for hosts not managed by bifrost using the bifrost dnsmasq server.

    Previously, if a dhcp-boot configuration option was provided to dnsmasq via a file in /etc/dnsmasq.d/, and the server was not booted via iPXE, the option would have been overridden by the undionly.kpxe option added by bifrost in /etc/dnsmasq.conf.

    Bifrost now supports user-provided dhcp-boot options in /etc/dnsmasq.d. These should be specified with an appropriate set of tags to match against to ensure that the rule overrides the default rule configured by bifrost.

  • Supports passing no_proxy environment variable to Ansible, users can use no_proxy to exclude specified hosts from using proxy.

Other Notes

  • bifrost host dependencies are now being installed using the bindep tool. New dependencies should be added to the bindep.txt file with the appropriate profile information if necessary. Core dependencies (ie those needed to bootstrap the system such as python, gcc, libffi, etc) must be listed in both the bindep.txt file and the scripts/install-deps.sh one for mainly two reasons. First of all, the OpenStack CI may only consult the bindep.txt in order to pull the necessary dependencies. Second, bindep needs certain packages to be present in order to its dependencies to build properly. More information about the bindep tool can be found at https://docs.openstack.org/infra/bindep/