We are satisfied to announce the release of: ironic-python-agent 2.0.0: Ironic Python Agent Ramdisk This release is part of the ocata release series. Download the package from: https://tarballs.openstack.org/ironic-python-agent/ For more details, please see below. 2.0.0 ^^^^^ New Features ************ * Add support for Mellanox InfiniBand NICs in IPA. Each Mellanox InfiniBand interface is returned with an "InfiniBand MAC" and InfiniBand Client-ID calculated according to a Mellanox-specific translation. * Add HCTL (Host, Channel, Target and Lun) information to the block devices. * Ironic Python Agent can now access other services (Ironic, Inspector, image backend) when those are configured with HTTPS endpoints and use custom server certificates or require client certificates. It is possible to add a custom Certificate Authority (CA) file and client certificate files to the deploy ramdisk during build, and provide paths to those as corresponding new options in the "ironic_python_agent.conf" configuration file. Validation of the server certificate can be turned off with the "insecure" config option or via the "ipa-insecure" kernel boot parameter. This should make it possible to run IPA in CI-like environments that use HTTPS endpoints with self-signed certificates. * Support for zypper has been added to the TinyIPA install-deps script in order to support building TinyIPA on SUSE. Upgrade Notes ************* * Two reserved fields, "switch_port_descr" and "switch_chassis_descr", were deprecated in Newton cycle and now are removed. * Ironic Python Agent no longer supports Ironic API lookup and heartbeat actions via agent vendor passthru methods, and uses only the new, top-level lookup and heartbeat endpoints of Ironic API v1.22 (introduced in Newton release, Ironic version 6.1.0). This effectively means that Ironic Python Agent becomes incompatible with Ironic API < 1.22 (Ironic version 6.0.0 or older, integrated OpenStack release Mitaka or older). Bug Fixes ********* * Fixes a bug in the CoreOS IPA images (where IPA runs in a chroot), where IPA could not power off or reboot properly. In this case, it will now use SYSRQ commands to forcefully reboot or power off. * Values of "ipa-api-url" specified in the configuration file that do not start with either "https://" or "http://" are no longer accepted. Such values lead to failure while contacting ironic-api. Such misconfigurations will be detected on ironic-python-agent start. An exception will be raised and an error about the invalid value will be logged. * Fixes detection of IPMI address in the CoreOS-based images by loading IPMI modules before going into chroot. * Ironic Python Agent now correctly detects its IPv6 address if communicating with ironic over IPv6. This address is also wrapped in square brackets if the address being advertised is IPv6. * If booted into a kernel that supports IPv6, Ironic Python Agent now listens for connections on both the IPv4 and IPv6 wildcard addresses. * If using Linux-IO, ISCSI targets now support deploying over an IPv6 network if booted into an IPv6 enabled kernel. IPv6 will be used for deployments for all traffic between ironic and IPA if IPA is passed an IPv6 address in the Ironic API URL. * Limits the memory usage of "qemu-img convert" command to 1 GiB to prevent it from causing the host machine to fail due to not enough RAM. * Fix LLDP discovery to not fail completely when an odd number of bytes is received in an LLDP package. * Fix raw sockets code to properly propagate exceptions to a caller instead of silencing them and returning None (causing failures later). * Ironic Python Agent no longer requires 'bash' to be present in the user image when preparing the partition image for local boot, and uses the default 'sh' interpreter to run 'grub'-related commands instead. * If ipa-api-url is not configured in pxe parameters, skip lookup and heartbeat to avoid ConnectionError when IPA starts. See https://bugs.launchpad.net/bugs/1643966 for details. * When writing a partition image, IPA now installs grub to the UEFI fallback path (e.g. "EFI/BOOT/BOOTX64.EFI"). The fallback path is used to boot the bare metal node if the NVRAM is reset. Other Notes *********** * Introspection data no longer contains keys used for compatibility with the old introspection ramdisk. * Ironic Python Agent now uses "oslo-config-generator" to create the sample configuration file. Changes in ironic-python-agent 1.5.0..2.0.0 ------------------------------------------- 4737681 Improve grammar/readability in Ocata release notes 6993bd8 Correct error in Infiniband release note 0618375 imagebuild: tinyipa: Make the install-deps.sh SUSE aware 73f316d Remove switch_port_descr and switch_chassis_descr e49f050 [TinyIPA] Avoid running rm with no parameters 5b1a217 Remove vendor_passthru mentions from lookup/heartbeat documentation 2334605 Add a comment about the catch-all exception for psutil b7ae499 Remove support for older psutil versions 7ec1f25 Updated from global requirements e4919e0 Support psutil 5.0.1 20dc04e Reboot and Poweroff fails with coreos IPA image 9595658 Mock out get_wildcard_address 449cda4 Limit memory usage when running qemu-img convert 256b233 Add IPv6 unit test for _get_route_source 1c493c4 iscsi: Listen for connections on both IPv4 and IPv6 ports b4e41e2 Agent: Listen for connections on both IPv4 and IPv6 ports df25373 Enable release notes translation a5370d5 Use sh instead of bash when installing grub 185d4d0 Updated from global requirements 6997907 Removes unnecessary utf-8 encoding fdd11b5 Configure and use SSL-related requests options 9f5f664 Advertise the correct address when using IPv6 415fd6e Updated from global requirements 10bff0a Remove compatibility with old bash-based introspection ramdisk 83a19a4 Fail IPA startup if no protocol prefix in ironic api address 16bef4a Fix missing newline at end-of-file in CONTRIBUTING.rst 4f1669d add CONTRIBUTING.rst 81780ad Use oslo_serialization.base64 to follow OpenStack Python3 1aa7269 Revert "Use liberty-eol tag for liberty release notes" 9948349 Moving Reboot bashscript to python ed4d68b Use liberty-eol tag for liberty release notes 7854988 Comment on when the TinyCore mirror list was generated 3a4d319 Probe for TC mirror during tinyipa build ef47d62 Add a new Hardware Manager for CNA network card 762f3bf Use oslo-config-generator for sample config 9ebb70d Update mock variable name in unit tests b272426 Add HCTL to BlockDevices dd9253f Skip API related work if no api url configured 92ced38 Fix docsting in Mellanox _detect_hardware 73825b2 Updated from global requirements f98c245 Show team and repo badges on README 1bdcd44 Add a new Hardware Manager for Mellanox NICs 0a7735d Load IPMI modules before chroot in CoreOS image 41cf45f Fix two typos, "messsage" and "containg" 966db1c Dispatched out network interface info to all hardware managers ab41106 Python 3 Compatible JSON 13c9350 Clarify test comment to minimize confusion c40575e Add bash scripts style checking for IPA b033bfd Remove old lookup/heartbeat from IPA b864a8c Fix several errors in LLDP handling code bcc98df Updated from global requirements 0b8763e Update to hacking 0.12.0 and use new checks ef6c1cb Replaces uuid.uuid4 with uuidutils.generate_uuid() 70f8c65 Updated from global requirements 2c75147 Updated from global requirements 88aab19 Updated from global requirements 7471d40 Remove duplicated logging in configdrive creation 3665306 Use ironic-lib to create configdrive 0ce1e34 Updated from global requirements cc5556d Install grub in the EFI "Fallback path" 7bda340 Fix config drive writing script 772ff4e Updated from global requirements cca1cd4 Add support for root device hints with operators c3bf482 Update .gitignore to ignore .idea of PyCharm 156ddaa Force en_US language for tests 20d960f Remove Python 2.6 format style f1a8fef Update reno for stable/newton 9e442b2 [tinyipa] remove trailing slash from TC repo URL 67bd15c [tinyipa] allow skipping python compileall c2b3055 Invalid URL and typo in .rst files 8f8e9f9 Fixed typo in doc file f6acb7c Add py35 to tox environments 1dcb656 Add info on tinyipa to docs 629b599 Updated from global requirements cceff3a Use CoreOS 1068.10.0 Diffstat (except docs and test files) ------------------------------------- .gitignore | 1 + CONTRIBUTING.rst | 16 ++ README.rst | 9 + .../ironic_python_agent.conf.sample | 291 +++++++++++++++++---- imagebuild/common/generate_upper_constraints.sh | 78 +++--- imagebuild/coreos/oem/cloud-config.yml | 3 + imagebuild/coreos/version.txt | 10 +- imagebuild/tinyipa/README.rst | 17 ++ imagebuild/tinyipa/build-tinyipa.sh | 6 +- imagebuild/tinyipa/build_files/bootlocal.sh | 2 +- imagebuild/tinyipa/finalise-tinyipa.sh | 26 +- imagebuild/tinyipa/install-deps.sh | 18 +- imagebuild/tinyipa/tc-mirror.sh | 53 ++++ ironic_python_agent/agent.py | 83 +++--- ironic_python_agent/api/config.py | 4 +- ironic_python_agent/cmd/agent.py | 1 - ironic_python_agent/config.py | 121 ++++++--- ironic_python_agent/errors.py | 51 +--- ironic_python_agent/extensions/base.py | 11 +- ironic_python_agent/extensions/flow.py | 4 +- ironic_python_agent/extensions/image.py | 21 +- ironic_python_agent/extensions/iscsi.py | 10 +- ironic_python_agent/extensions/standby.py | 192 +++++--------- ironic_python_agent/hardware.py | 208 +++++++-------- ironic_python_agent/hardware_managers/__init__.py | 0 ironic_python_agent/hardware_managers/cna.py | 91 +++++++ ironic_python_agent/hardware_managers/mlnx.py | 112 ++++++++ ironic_python_agent/inspector.py | 87 +----- ironic_python_agent/ironic_api_client.py | 98 ++----- ironic_python_agent/netutils.py | 73 ++++-- .../shell/copy_configdrive_to_disk.sh | 118 --------- ironic_python_agent/shell/shutdown.sh | 26 -- ironic_python_agent/shell/write_image.sh | 13 +- ironic_python_agent/utils.py | 23 +- ...mellanox_hardware_manager-edfae87964737df1.yaml | 6 + .../notes/block-device-hctl-e81573812be3d469.yaml | 4 + ...reboot_in_chroot_by_sysrq-42447fc4cdd7dafe.yaml | 5 + ...art_if_ironic_api_invalid-7b78fcaba2141cc5.yaml | 9 + .../fix-coreos-modprobe-75bda45c7bbeb469.yaml | 4 + .../notes/handle-ssl-063a91fb7bdcf9b9.yaml | 16 ++ .../notes/ip6-addresses-1c2b9bcd9a124de7.yaml | 6 + .../notes/ipv6-listen-85d40e58156e398f.yaml | 5 + .../notes/ipv6-provision-42e9000f6f6a7a3a.yaml | 6 + .../limit-qemu-img-ram-usage-d7b7a16ac5e9c917.yaml | 5 + .../lldp-error-handling-5b6576b378ef9c3a.yaml | 6 + .../notes/no-bash-for-grub-c38369af8cc7cf26.yaml | 6 + .../notes/old-inspector-data-5e63c9bce72b4fb5.yaml | 5 + .../oslo-config-generator-b0f70b9fb7e23997.yaml | 4 + ...escr-switch_chassis_descr-40f2bb37b5f1fdd1.yaml | 6 + .../remove-vendor-passthru-eda3519c322eb4e2.yaml | 10 + ...-if-apiurl-not-configured-5ae8b04ae1e74673.yaml | 5 + .../suse-tinyipa-support-20acecd6d7b20952.yaml | 4 + .../notes/uefi-fallback-266c647f6aff58fd.yaml | 6 + releasenotes/source/conf.py | 2 + releasenotes/source/current-series.rst | 6 +- releasenotes/source/newton.rst | 8 +- requirements.txt | 21 +- setup.cfg | 5 + test-requirements.txt | 14 +- tools/config/check_uptodate.sh | 16 +- tools/config/generate_sample.sh | 120 --------- tools/config/ipa-config-generator.conf | 5 + tools/config/oslo.config.generator.rc | 0 tools/run_bashate.sh | 23 ++ tox.ini | 25 +- 81 files changed, 2320 insertions(+), 1404 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 7b0ddea..9972014 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4 +4 @@ -pbr>=1.6 # Apache-2.0 +pbr>=1.8 # Apache-2.0 @@ -9 +9 @@ netifaces>=0.10.4 # MIT -oslo.config>=3.14.0 # Apache-2.0 +oslo.config!=3.18.0,>=3.14.0 # Apache-2.0 @@ -11 +11,2 @@ oslo.concurrency>=3.8.0 # Apache-2.0 -oslo.log>=1.14.0 # Apache-2.0 +oslo.log>=3.11.0 # Apache-2.0 +oslo.serialization>=1.10.0 # Apache-2.0 @@ -13,2 +14,2 @@ oslo.service>=1.10.0 # Apache-2.0 -oslo.utils>=3.16.0 # Apache-2.0 -pecan!=1.0.2,!=1.0.3,!=1.0.4,>=1.0.0 # BSD +oslo.utils>=3.18.0 # Apache-2.0 +pecan!=1.0.2,!=1.0.3,!=1.0.4,!=1.2,>=1.0.0 # BSD @@ -16 +17 @@ Pint>=0.5 # BSD -psutil<2.0.0,>=1.1.1 # BSD +psutil>=3.0.1 # BSD @@ -18,2 +19,2 @@ pyudev # LGPLv2.1+ -requests>=2.10.0 # Apache-2.0 -rtslib-fb>=2.1.41 # Apache-2.0 +requests!=2.12.2,>=2.10.0 # Apache-2.0 +rtslib-fb!=2.1.60,!=2.1.61,>=2.1.43 # Apache-2.0 @@ -21 +22 @@ six>=1.9.0 # MIT -stevedore>=1.16.0 # Apache-2.0 +stevedore>=1.17.1 # Apache-2.0 @@ -23 +24 @@ WSME>=0.8 # MIT -ironic-lib>=2.0.0 # Apache-2.0 +ironic-lib>=2.5.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index fb06328..d204b3a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -4,2 +4,2 @@ -hacking<0.12,>=0.11.0 # Apache-2.0 -coverage>=3.6 # Apache-2.0 +hacking<0.13,>=0.12.0 # Apache-2.0 +coverage>=4.0 # Apache-2.0 @@ -10,2 +10,2 @@ oslotest>=1.10.0 # Apache-2.0 -os-testr>=0.7.0 # Apache-2.0 - +os-testr>=0.8.0 # Apache-2.0 +bashate>=0.2 # Apache-2.0 @@ -14 +14 @@ doc8 # Apache-2.0 -sphinx!=1.3b1,<1.3,>=1.2.1 # BSD +sphinx!=1.3b1,<1.4,>=1.2.1 # BSD @@ -16,2 +16,2 @@ sphinxcontrib-pecanwsme>=0.8 # Apache-2.0 -oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0 -reno>=1.8.0 # Apache2 +oslosphinx>=4.7.0 # Apache-2.0 +reno>=1.8.0 # Apache-2.0