We are gleeful to announce the release of:
ironic 20.1.0: OpenStack Bare Metal Provisioning
This release is part of the yoga release series.
The source is available from:
https://opendev.org/openstack/ironic
Download the package from:
https://tarballs.openstack.org/ironic/
Please report issues through:
https://storyboard.openstack.org/#!/project/943
For more details, please see below.
20.1.0 ^^^^^^
Prelude *******
The Ironic community is pleased to announce the release of Ironic 20.1.
During the Yoga cycle, we had forty-three contributors. They are responsible for more than 35,000 lines of code and more than twenty new features that will improve the experience of our end-users! Please reach out to our community if you have any questions or feedback!
New Features ************
* For "redfish" and "idrac-redfish" management interface "firmware_update" clean step adds Swift, HTTP service and file system support to serve and Ironic's HTTP and Swift service to stage files. Also adds mandatory parameter "checksum" for file checksum verification.
* Adds support for "idrac-wsman" RAID, BIOS and management clean steps to be run without IPA when disabling ramdisk during cleaning.
* Supports listening on a Unix socket instead of a normal TCP socket. This is useful with an HTTP server such as nginx in proxy mode.
Known Issues ************
* When using iDRAC with Swift to stage firmware update files in Management interface "firmware_update" clean step of "redfish" or "idrac" hardware type, the cleaning fails with error "An internal error occurred. Unable to complete the specified operation." in iDRAC job. Until this is fixed, use HTTP service to stage firmware files for iDRAC.
Upgrade Notes *************
* For "redfish" and "idrac-redfish" management interface "firmware_update" clean step there is now mandatory "checksum" parameter necessary. Update existing clean steps to include it, otherwise clean step will fail with error "'checksum' is a required property".
Deprecation Notes *****************
* Booting final instances via network (as opposed to via a local bootloader) is now deprecated, except for the cases of booting from volume or the ramdisk deploy interface.
Network boot for whole disk images only works reliable for legacy (BIOS) boot. In case of partition images, there is no way to update the kernel, which makes this approach insecure.
Users of partition images must ensure that they either contain the "grub-install" binary, enough EFI artifacts to boot the operating system or a legacy boot partition.
Bug Fixes *********
* The anaconda deploy interface was treating the config drive as a dict, whereas it could be a dict or in iso6600 format, gzipped and base64-encoded. This has been fixed.
* The anaconda deploy interface was adding commands that deal with the config drive, to the end of the kickstart config file. Which means that they are handled after an ironic API request is sent (to the conductor) to indicate that the node has been provisioned and is ready to be rebooted. Which means that there is a possible race condition wrt these commands being completed before the node is powered off. A sync is added to ensure that all modifications have been written to disk, before the API request is sent -- as the last thing.
* Extra newlines ('n') were incorrectly added to the user data content. This broke the content-type decoding and cloud-init was unable to proces them. The extra newlines have been removed.
* Fixes the logic for the anaconda deploy interface. If the ironic node's instance_info doesn't have both 'stage2' and 'ks_template' specified, we weren't using the instance_info at all. This has been fixed to use the instance_info if it was specified. Otherwise, 'stage2' is taken from the image's properties (assumed that it is set there). 'ks_template' value is from the image properties if specified there (since it is optional); else we use the config setting '[anaconda] default_ks_template'.
* For the anaconda deploy interface, the 'stage2' directory was incorrectly being created using the full path of the stage2 file; this has been fixed.
* The anaconda deploy interface expects the node's instance_info to be populated with the 'image_url'; this is now populated (via PXEAnacondaDeploy's prepare() method).
* For the anaconda deploy interface, when the deploy was finished and the bm node was being rebooted, the node's provision state was incorrectly being set to 'active' -- the provisioning state-machine mechanism now handles that.
* For the anaconda deploy interface, the code that was doing the validation of the kickstart file was incorrect and resulted in errors; this has been addressed.
* For the anaconda deploy interface, the '%traceback' section in the packaged 'ks.cfg.template' file is deprecated and fails validation, so it has been removed.
* The anaconda deploy interface was saving internal information in the node's "instance_info", in the user-facing "stage2" and "ks_template" fields. This broke rebuilds using a different image with different "stage2" or template specified in the image properties. This has been fixed by saving the information in the node's "driver_internal_info" instead.
* Fixes the "redfish" hardware type RAID device creation and deletion when creating or deleting more than 1 logical disk on RAID controllers that require rebooting and do not allow more than 1 running task per RAID controller. Before this fix 2nd logical disk would fail to be created or deleted. With this change it is now possible to use "redfish" "raid" interface on iDRAC systems.
Changes in ironic 20.0.0..20.1.0 --------------------------------
872ede25a Fix 20.1 prelude releasenote aefc623c9 Prepare Yoga release with 20.1 f446be697 Link from deploy interface docs to anaconda docs and move it to advanced dfd400213 [trivial]Remove is_pxe_enabled function doc about ipxe_enabled option 3e631a593 Create API documentation from docstrings 687694c83 Improve efficiency of storage cleaning in mixed media envs - documentation 7d1d2da0d Use pycdlib to extract deploy iso e02ab8941 Suppress Bandit B509 in snmp.py ab68c9d88 Fix rebuilds using anaconda deploy interface 09d8a94d5 Anaconda deploy handles configdrive correctly 1f7972831 Minor updates to rbac doc e11cfdb84 Update minimum requirements for ilo drivers e5e8e3cd5 Fix failure of create_vfat_image function 004e1e889 Troubleshooting guide: node locked error 4b4f3f38c [Trivial] Fix formatting in troubleshooting docs 06cc5d47d More fixes for anaconda deploy interface 5a9dd8b09 Deprecate instance network boot ccd1f34d5 Update python-dracclient version 2f09b7b10 CI: force config drive on the multinode job's subnode b8ef35a98 Ensure tox.ini is ASCII daa7dba33 Shorten error messages in commonly used modules d7d8f8754 Fix Redfish RAID for non-immediate controllers dd1cb46f2 Fix prepare ramdisk for 'wait' states 358b6eac4 Support listening on a Unix socket c62c16bd2 Support img_type Glance property a7cd4d557 Recommend various installers in the install guide bfea8f17b Add idrac-wsman clean steps to not require ramdisk 7d0af42f9 Add known issue for iDRAC Swift firmware update 960f10a90 Add more sources to redfish firmware upgrade d0f61e949 Ignore fake nodes in the power sync loop
Diffstat (except docs and test files) -------------------------------------
api-ref/source/baremetal-api-v1-nodes.inc | 5 - api-ref/source/parameters.yaml | 15 +- driver-requirements.txt | 4 +- ironic/api/controllers/v1/allocation.py | 53 +-- ironic/api/controllers/v1/driver.py | 27 +- ironic/api/controllers/v1/node.py | 6 + ironic/common/images.py | 62 ++-- ironic/common/kickstart_utils.py | 14 +- ironic/common/pxe_utils.py | 113 ++++--- ironic/common/release_mappings.py | 24 +- ironic/common/wsgi_service.py | 21 +- ironic/conductor/cleaning.py | 5 +- ironic/conductor/deployments.py | 9 +- ironic/conductor/manager.py | 24 +- ironic/conductor/utils.py | 16 +- ironic/conf/api.py | 16 + ironic/conf/deploy.py | 5 +- ironic/conf/redfish.py | 15 + ironic/drivers/modules/agent.py | 5 + ironic/drivers/modules/agent_base.py | 12 +- ironic/drivers/modules/deploy_utils.py | 16 +- ironic/drivers/modules/drac/bios.py | 6 +- ironic/drivers/modules/drac/management.py | 6 +- ironic/drivers/modules/drac/raid.py | 4 +- ironic/drivers/modules/ilo/boot.py | 18 +- ironic/drivers/modules/irmc/boot.py | 8 +- ironic/drivers/modules/ks.cfg.template | 15 +- ironic/drivers/modules/pxe.py | 22 +- ironic/drivers/modules/redfish/boot.py | 9 +- ironic/drivers/modules/redfish/firmware_utils.py | 201 ++++++++++- ironic/drivers/modules/redfish/management.py | 72 +++- ironic/drivers/modules/redfish/raid.py | 284 +++++++++------- ironic/drivers/modules/snmp.py | 5 +- ironic/drivers/utils.py | 21 ++ .../drivers/modules/redfish/test_firmware_utils.py | 375 ++++++++++++++++++++- .../drivers/modules/redfish/test_management.py | 219 +++++++++++- .../unit/drivers/modules/redfish/test_raid.py | 276 +++++++++++++-- .../notes/20.1-prelude-612672742f417477.yaml | 8 + ...s-redfish-firmware-update-3da89f10dc0f8d21.yaml | 14 + ...aconda-config-drive-fixes-5880884e34584549.yaml | 19 ++ ...naconda-deploy-more-fixes-58d996c7031c8c4b.yaml | 33 ++ ...naconda-instance-info-fix-a51837d8ac7b41de.yaml | 9 + ...ish-raid-onreset-workflow-bfa44de6b0263a1f.yaml | 9 + ...steps-not-require-ramdisk-ca98aa5c0a88f727.yaml | 5 + .../notes/image-type-ac259a90393bdd2c.yaml | 2 + ...ssue-idrac-firmware-swift-721a19cac796e1ae.yaml | 8 + .../netboot-deprecation-fe5751a47df2d0b7.yaml | 14 + .../notes/unix-socket-48e8f1caf4cb19f9.yaml | 5 + tox.ini | 4 +- zuul.d/ironic-jobs.yaml | 3 +- 73 files changed, 2508 insertions(+), 532 deletions(-)
Requirements updates --------------------
diff --git a/driver-requirements.txt b/driver-requirements.txt index 5239fe73c..da312468e 100644 --- a/driver-requirements.txt +++ b/driver-requirements.txt @@ -7 +7 @@ -proliantutils>=2.11.0 +proliantutils>=2.13.0 @@ -10 +10 @@ python-scciclient>=0.8.0 -python-dracclient>=5.1.0,<8.0.0 +python-dracclient>=5.1.0,<9.0.0