From 44af704836799e9b211e3eccfa5efa72f9713f32 Mon Sep 17 00:00:00 2001 From: Pierre Riteau Date: Tue, 10 Oct 2023 13:09:12 +0200 Subject: [PATCH] Add introspection rule to update deploy kernel location Back in the Ussuri release, we changed the Bifrost kernel location to use ipa.kernel instead of ipa.vmlinuz. While this works fine for newly discovered nodes, any node added to Bifrost in Train or earlier will have kept ipa.vmlinuz as its deploy kernel. This can cause issues since upgrading Bifrost or building new deployment images will update ipa.kernel, but not ipa.vmlinuz, resulting in nodes booting with an old kernel and a new ramdisk. Fix by adding a new rule updating the legacy kernel location and documenting how to update node information. Change-Id: I6ae44dcae78424b4638762d015cf24336444707f --- ansible/inventory/group_vars/all/bifrost | 5 ++++- ansible/inventory/group_vars/all/inspector | 12 +++++++++++ ansible/seed-introspection-rules.yml | 1 + etc/kayobe/bifrost.yml | 3 +++ ...update-deploy-kernel-6943f3ad3cb82c51.yaml | 20 +++++++++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/update-deploy-kernel-6943f3ad3cb82c51.yaml diff --git a/ansible/inventory/group_vars/all/bifrost b/ansible/inventory/group_vars/all/bifrost index d780cfb10..788dddd12 100644 --- a/ansible/inventory/group_vars/all/bifrost +++ b/ansible/inventory/group_vars/all/bifrost @@ -99,7 +99,7 @@ kolla_bifrost_inspector_port_addition: "{{ inspector_add_ports }}" kolla_bifrost_inspector_extra_kernel_options: "{{ inspector_extra_kernel_options }}" # List of introspection rules for Bifrost's Ironic Inspector service. -kolla_bifrost_inspector_rules: "{{ inspector_rules }}" +kolla_bifrost_inspector_rules: "{{ inspector_rules + [inspector_rule_legacy_deploy_kernel] }}" # Ironic inspector IPMI username to set. kolla_bifrost_inspector_ipmi_username: "{{ ipmi_username }}" @@ -117,6 +117,9 @@ kolla_bifrost_inspector_deploy_kernel: "http://{{ provision_oc_net_name | net_ip # Ironic inspector deployment ramdisk location. kolla_bifrost_inspector_deploy_ramdisk: "http://{{ provision_oc_net_name | net_ip }}:8080/ipa.initramfs" +# Ironic inspector legacy deployment kernel location. +kolla_bifrost_inspector_legacy_deploy_kernel: "http://{{ provision_oc_net_name | net_ip }}:8080/ipa.vmlinuz" + # Timeout of hardware inspection on overcloud nodes, in seconds. Default is # {{ inspector_inspection_timeout }}. kolla_bifrost_inspection_timeout: "{{ inspector_inspection_timeout }}" diff --git a/ansible/inventory/group_vars/all/inspector b/ansible/inventory/group_vars/all/inspector index 7683c9724..1abe5fcaf 100644 --- a/ansible/inventory/group_vars/all/inspector +++ b/ansible/inventory/group_vars/all/inspector @@ -119,6 +119,18 @@ inspector_rule_deploy_kernel: path: "driver_info/deploy_kernel" value: "{{ inspector_rule_var_deploy_kernel }}" +# Ironic inspector rule to update deployment kernel from legacy location. +inspector_rule_legacy_deploy_kernel: + description: "Update deploy kernel from legacy" + conditions: + - field: "node://driver_info.deploy_kernel" + op: "eq" + value: "{{ inspector_rule_var_legacy_deploy_kernel }}" + actions: + - action: "set-attribute" + path: "driver_info/deploy_kernel" + value: "{{ inspector_rule_var_deploy_kernel }}" + # Deployment ramdisk referenced by inspector rule. inspector_rule_var_deploy_ramdisk: diff --git a/ansible/seed-introspection-rules.yml b/ansible/seed-introspection-rules.yml index 247f2929a..185b1b454 100644 --- a/ansible/seed-introspection-rules.yml +++ b/ansible/seed-introspection-rules.yml @@ -17,3 +17,4 @@ inspector_rule_var_lldp_switch_port_interface: "{{ kolla_bifrost_inspector_lldp_switch_port_interface }}" inspector_rule_var_deploy_kernel: "{{ kolla_bifrost_inspector_deploy_kernel }}" inspector_rule_var_deploy_ramdisk: "{{ kolla_bifrost_inspector_deploy_ramdisk }}" + inspector_rule_var_legacy_deploy_kernel: "{{ kolla_bifrost_inspector_legacy_deploy_kernel }}" diff --git a/etc/kayobe/bifrost.yml b/etc/kayobe/bifrost.yml index a9eba19dd..d15d18613 100644 --- a/etc/kayobe/bifrost.yml +++ b/etc/kayobe/bifrost.yml @@ -116,6 +116,9 @@ # Ironic inspector deployment ramdisk location. #kolla_bifrost_inspector_deploy_ramdisk: +# Ironic inspector legacy deployment kernel location. +#kolla_bifrost_inspector_legacy_deploy_kernel: + # Timeout of hardware inspection on overcloud nodes, in seconds. Default is # {{ inspector_inspection_timeout }}. #kolla_bifrost_inspection_timeout: diff --git a/releasenotes/notes/update-deploy-kernel-6943f3ad3cb82c51.yaml b/releasenotes/notes/update-deploy-kernel-6943f3ad3cb82c51.yaml new file mode 100644 index 000000000..c098aec70 --- /dev/null +++ b/releasenotes/notes/update-deploy-kernel-6943f3ad3cb82c51.yaml @@ -0,0 +1,20 @@ +--- +upgrade: + - | + Adds an introspection rule to update the location of the deployment kernel + registered in existing Ironic nodes. Nodes discovered on a deployment + running the Train release or earlier may still be using the ``ipa.vmlinuz`` + kernel, which stays unchanged when deployment images get updated. If only + default introspection rules are in use, existing nodes may be updated from + the Bifrost container with the following command: + + ``OS_CLOUD=bifrost baremetal introspection reprocess $NODE_UUID_OR_NAME`` + + If non-default rules are used, reprocessing may revert any customisation + done by the operator. In this case, a more cautious approach is to update + the deployment kernel location manually: + + ``OS_CLOUD=bifrost baremetal node set --driver-info deploy_kernel= $NODE_UUID_OR_NAME`` + + If the ``kolla_bifrost_inspector_rules`` list is customised, the rule + ``inspector_rule_legacy_deploy_kernel`` should be added to it.