From 0e4af118ebd03f697a7b460868772ee5f2dd0442 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Mon, 25 Jul 2022 16:49:32 +0100
Subject: [PATCH] Support additional build host packages for IPA & overcloud

Adds support for installing additional build host dependencies when
building IPA and overcloud host images via
'ipa_build_dib_host_packages_extra' and
'overcloud_dib_host_packages_extra'.

Support for installing additional host packages was added in
stackhpc.os-images v1.15.0 [1].

[1] https://github.com/stackhpc/ansible-role-os-images/pull/63

Change-Id: I1a05d448031cb415cec4cd601a030abdb8a5eba5
---
 ansible/group_vars/all/ipa                                 | 3 +++
 ansible/group_vars/all/overcloud-dib                       | 3 +++
 ansible/overcloud-host-image-build.yml                     | 1 +
 ansible/overcloud-ipa-build.yml                            | 1 +
 ansible/seed-ipa-build.yml                                 | 1 +
 doc/source/configuration/reference/ironic-python-agent.rst | 3 +++
 doc/source/configuration/reference/overcloud-dib.rst       | 2 ++
 etc/kayobe/ipa.yml                                         | 3 +++
 etc/kayobe/overcloud-dib.yml                               | 3 +++
 .../notes/image-build-host-packages-1f1a3cf59436d82b.yaml  | 7 +++++++
 requirements.yml                                           | 2 +-
 11 files changed, 28 insertions(+), 1 deletion(-)
 create mode 100644 releasenotes/notes/image-build-host-packages-1f1a3cf59436d82b.yaml

diff --git a/ansible/group_vars/all/ipa b/ansible/group_vars/all/ipa
index 23e94a79..bf844429 100644
--- a/ansible/group_vars/all/ipa
+++ b/ansible/group_vars/all/ipa
@@ -19,6 +19,9 @@ ipa_builder_source_url: "https://opendev.org/openstack/ironic-python-agent-build
 # Version of IPA builder source repository. Default is {{ openstack_branch }}.
 ipa_builder_source_version: "{{ openstack_branch }}"
 
+# List of additional build host packages to install.
+ipa_build_dib_host_packages_extra: []
+
 # List of default Diskimage Builder (DIB) elements to use when building IPA
 # images. Default is ["centos", "enable-serial-console",
 # "ironic-python-agent-ramdisk"].
diff --git a/ansible/group_vars/all/overcloud-dib b/ansible/group_vars/all/overcloud-dib
index 737d9183..6b0408eb 100644
--- a/ansible/group_vars/all/overcloud-dib
+++ b/ansible/group_vars/all/overcloud-dib
@@ -10,6 +10,9 @@
 # is {{ os_distribution == 'rocky' }}. This will change in a future release.
 overcloud_dib_build_host_images: "{{ os_distribution == 'rocky' }}"
 
+# List of additional build host packages to install.
+overcloud_dib_host_packages_extra: []
+
 # List of overcloud host disk images to build. Each element is a dict defining
 # an image in a format accepted by the stackhpc.os-images role. Default is to
 # build an image named "deployment_image" configured with the overcloud_dib_*
diff --git a/ansible/overcloud-host-image-build.yml b/ansible/overcloud-host-image-build.yml
index 5ac5af42..d895c501 100644
--- a/ansible/overcloud-host-image-build.yml
+++ b/ansible/overcloud-host-image-build.yml
@@ -22,6 +22,7 @@
           include_role:
             name: stackhpc.os-images
           vars:
+            os_images_package_dependencies_extra: "{{ overcloud_dib_host_packages_extra | select | list }}"
             os_images_venv: "{{ virtualenv_path }}/overcloud-host-image-dib"
             os_images_package_state: latest
             os_images_upper_constraints_file: "{{ overcloud_dib_upper_constraints_file }}"
diff --git a/ansible/overcloud-ipa-build.yml b/ansible/overcloud-ipa-build.yml
index bc8e9f68..4198c357 100644
--- a/ansible/overcloud-ipa-build.yml
+++ b/ansible/overcloud-ipa-build.yml
@@ -36,6 +36,7 @@
           include_role:
             name: stackhpc.os-images
           vars:
+            os_images_package_dependencies_extra: "{{ ipa_build_dib_host_packages_extra | select | list }}"
             os_images_venv: "{{ virtualenv_path }}/ipa-build-dib"
             os_images_package_state: latest
             os_images_upper_constraints_file: "{{ ipa_build_upper_constraints_file }}"
diff --git a/ansible/seed-ipa-build.yml b/ansible/seed-ipa-build.yml
index 1145bf81..fb26f7d0 100644
--- a/ansible/seed-ipa-build.yml
+++ b/ansible/seed-ipa-build.yml
@@ -26,6 +26,7 @@
           include_role:
             name: stackhpc.os-images
           vars:
+            os_images_package_dependencies_extra: "{{ ipa_build_dib_host_packages_extra | select | list }}"
             os_images_venv: "{{ virtualenv_path }}/ipa-build-dib"
             os_images_package_state: latest
             os_images_upper_constraints_file: "{{ ipa_build_upper_constraints_file }}"
diff --git a/doc/source/configuration/reference/ironic-python-agent.rst b/doc/source/configuration/reference/ironic-python-agent.rst
index da2936e4..fb8f7aaa 100644
--- a/doc/source/configuration/reference/ironic-python-agent.rst
+++ b/doc/source/configuration/reference/ironic-python-agent.rst
@@ -44,6 +44,9 @@ image build``.
     https://opendev.org/openstack/ironic-python-agent-builder
 ``ipa_builder_source_version``
     Version of IPA builder source repository. Default is ``master``.
+``ipa_build_dib_host_packages_extra``
+    List of additional build host packages to install. Default is an empty
+    list.
 ``ipa_build_dib_elements_default``
     List of default Diskimage Builder (DIB) elements to use when building IPA
     images. Default is ``["centos", "enable-serial-console",
diff --git a/doc/source/configuration/reference/overcloud-dib.rst b/doc/source/configuration/reference/overcloud-dib.rst
index 86b8c97e..90a1e877 100644
--- a/doc/source/configuration/reference/overcloud-dib.rst
+++ b/doc/source/configuration/reference/overcloud-dib.rst
@@ -41,6 +41,8 @@ Linux is used.
 `Cloud-init <https://cloudinit.readthedocs.io/en/latest/>`__ is used to process
 the configuration drive built by Bifrost during provisioning.
 
+``overcloud_dib_host_packages_extra``
+    List of additional host packages to install. Default is an empty list.
 ``overcloud_dib_host_images``
     List of overcloud host disk images to build. Each element is a dict
     defining an image in a format accepted by the `stackhpc.os-images
diff --git a/etc/kayobe/ipa.yml b/etc/kayobe/ipa.yml
index 519ca2a5..81ee9749 100644
--- a/etc/kayobe/ipa.yml
+++ b/etc/kayobe/ipa.yml
@@ -19,6 +19,9 @@
 # Version of IPA builder source repository. Default is {{ openstack_branch }}.
 #ipa_builder_source_version:
 
+# List of additional build host packages to install. Default is an empty list.
+#ipa_build_dib_host_packages_extra:
+
 # List of default Diskimage Builder (DIB) elements to use when building IPA
 # images. Default is ["centos", "enable-serial-console",
 # "ironic-python-agent-ramdisk"].
diff --git a/etc/kayobe/overcloud-dib.yml b/etc/kayobe/overcloud-dib.yml
index 3d69f8eb..bca69e92 100644
--- a/etc/kayobe/overcloud-dib.yml
+++ b/etc/kayobe/overcloud-dib.yml
@@ -10,6 +10,9 @@
 # is {{ os_distribution == 'rocky' }}. This will change in a future release.
 #overcloud_dib_build_host_images:
 
+# List of additional build host packages to install. Default is an empty list.
+#overcloud_dib_host_packages_extra:
+
 # List of overcloud host disk images to build. Each element is a dict defining
 # an image in a format accepted by the stackhpc.os-images role. Default is to
 # build an image named "deployment_image" configured with the overcloud_dib_*
diff --git a/releasenotes/notes/image-build-host-packages-1f1a3cf59436d82b.yaml b/releasenotes/notes/image-build-host-packages-1f1a3cf59436d82b.yaml
new file mode 100644
index 00000000..2d80edc7
--- /dev/null
+++ b/releasenotes/notes/image-build-host-packages-1f1a3cf59436d82b.yaml
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    Adds support for installing additional build host dependencies when
+    building IPA and overcloud host images via
+    ``ipa_build_dib_host_packages_extra`` and
+    ``overcloud_dib_host_packages_extra``.
diff --git a/requirements.yml b/requirements.yml
index 6c48cffd..9edf58cf 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -43,7 +43,7 @@ roles:
   - src: stackhpc.mellanox-switch
     version: v1.0.0
   - src: stackhpc.os-images
-    version: v1.11.0
+    version: v1.15.0
   - src: stackhpc.os-ironic-state
     version: v1.3.1
   - src: stackhpc.os-networks
-- 
GitLab