From fa7d29b47eb8f23411265cd4581e077d100d0dc7 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Fri, 3 Jan 2020 15:07:07 +0000
Subject: [PATCH] Fix overcloud provisioning due to Bifrost IPA rename

Kolla recently upgraded bifrost from 7.0.0 to 7.1.0 on the stable/train
branch. This switched to IPA builder to build the IPA image, and
introduced a rename of the IPA kernel file from ipa.vmlinuz to
ipa.kernel, which breaks overcloud provisioning. The iPXE kernel
download fails with a 404, since Kayobe introspection rules use
ipa.vmlinuz for the driver_info.deploy_kernel URL.

This change works around the issue by setting two Bifrost variables,
ipa_kernel and ipa_kernel_url, to reference the old kernel filename of
ipa.vmlinuz. This works both in the case where the image is downloaded
from a URL (ipa_kernel sets the destination file name), and where it is
built via 'kayobe seed deployment image build' (kayobe uses the legacy
ironic-agent DIB element rather than IPA builder, which creates a
hardlink to ipa.vmlinuz).

We chose the above approach rather than switching to IPA builder due to
it being a less risky change at a time close to release. A future
release of Kayobe should switch to IPA builder, but this will be a
larger effort.

[1] https://review.opendev.org/#/c/692200/1/playbooks/roles/bifrost-ironic-install/defaults/main.yml

Change-Id: I7f75c25602fd7ae4bfeb6abbdd3b42d8ee465abf
Story: 2007068
Task: 37951
---
 .../roles/kolla-bifrost/templates/bifrost.yml.j2  | 15 +++++++++++++++
 ...ifrost-ipa-kernel-rename-59bf75ac8285f103.yaml |  6 ++++++
 2 files changed, 21 insertions(+)
 create mode 100644 releasenotes/notes/workaround-bifrost-ipa-kernel-rename-59bf75ac8285f103.yaml

diff --git a/ansible/roles/kolla-bifrost/templates/bifrost.yml.j2 b/ansible/roles/kolla-bifrost/templates/bifrost.yml.j2
index eb5cf82a..ab9d640d 100644
--- a/ansible/roles/kolla-bifrost/templates/bifrost.yml.j2
+++ b/ansible/roles/kolla-bifrost/templates/bifrost.yml.j2
@@ -46,6 +46,21 @@ ipa_kernel_upstream_url: "{{ kolla_bifrost_ipa_kernel_upstream_url }}"
 # URL of checksum of Ironic Python Agent (IPA) kernel image.
 ipa_kernel_upstream_checksum_url: "{{ kolla_bifrost_ipa_kernel_checksum_url }}"
 
+# NOTE(mgoddard): In bifrost 7.1.0, the default for ipa_kernel and
+# ipa_kernel_url was changed from .vmlinuz to .kernel. This broke our inspector
+# rule which uses .vmlinuz when setting driver_info.deploy_kernel. It will also
+# break existing nodes if the IPA kernel is updated e.g. following an upgrade.
+# Use the old value of .vmlinuz here.
+# TODO(mgoddard): Remove these when we use IPA builder.
+{# Using double jinja escaping here since this will be templated by kayobe #}
+{# and kolla ansible, then interpreted as Ansible variables by Bifrost. #}
+{{ '{% raw %}' }}
+{% raw %}
+ipa_kernel: "{{http_boot_folder}}/ipa.vmlinuz"
+ipa_kernel_url: "{{ ipa_file_protocol }}://{{ hostvars[inventory_hostname]['ansible_' + ans_network_interface]['ipv4']['address'] }}:{{file_url_port}}/ipa.vmlinuz"
+{% endraw %}
+{{ '{% endraw %}' }}
+
 # Algorithm of checksum of Ironic Python Agent (IPA) kernel image.
 ipa_kernel_upstream_checksum_algo: "{{ kolla_bifrost_ipa_kernel_checksum_algorithm }}"
 
diff --git a/releasenotes/notes/workaround-bifrost-ipa-kernel-rename-59bf75ac8285f103.yaml b/releasenotes/notes/workaround-bifrost-ipa-kernel-rename-59bf75ac8285f103.yaml
new file mode 100644
index 00000000..979954bf
--- /dev/null
+++ b/releasenotes/notes/workaround-bifrost-ipa-kernel-rename-59bf75ac8285f103.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Fixes an issue seen during overcloud provisioning due to Bifrost renaming
+    the IPA kernel file. See `story 2007068
+    <https://storyboard.openstack.org/#!/story/2007068>`__ for details.
-- 
GitLab