Merge "Support building multiple disk images"
This commit is contained in:
commit
e6da84a094
@ -10,6 +10,18 @@
|
|||||||
# is False. This will change in a future release.
|
# is False. This will change in a future release.
|
||||||
overcloud_dib_build_host_images: False
|
overcloud_dib_build_host_images: False
|
||||||
|
|
||||||
|
# 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_*
|
||||||
|
# variables defined below: {"name": "deployment_image", "elements": "{{
|
||||||
|
# overcloud_dib_elements }}", "env": "{{ overcloud_dib_env_vars }}",
|
||||||
|
# "packages": "{{ overcloud_dib_packages }}"}.
|
||||||
|
overcloud_dib_host_images:
|
||||||
|
- name: "deployment_image"
|
||||||
|
elements: "{{ overcloud_dib_elements }}"
|
||||||
|
env: "{{ overcloud_dib_env_vars }}"
|
||||||
|
packages: "{{ overcloud_dib_packages }}"
|
||||||
|
|
||||||
# DIB base OS element. Default is {{ os_distribution }}.
|
# DIB base OS element. Default is {{ os_distribution }}.
|
||||||
overcloud_dib_os_element: "{{ os_distribution }}"
|
overcloud_dib_os_element: "{{ os_distribution }}"
|
||||||
|
|
||||||
|
@ -1,19 +1,24 @@
|
|||||||
---
|
---
|
||||||
# Build and install a overcloud host disk image for the seed host's ironic
|
# Build and install overcloud host disk images for the seed host's ironic
|
||||||
# service.
|
# service.
|
||||||
|
|
||||||
- name: Ensure overcloud host disk image is built and installed
|
- name: Ensure overcloud host disk images are built and installed
|
||||||
hosts: seed
|
hosts: seed
|
||||||
tags:
|
tags:
|
||||||
- overcloud-host-image-build
|
- overcloud-host-image-build
|
||||||
vars:
|
vars:
|
||||||
overcloud_host_image_name: "deployment_image"
|
|
||||||
overcloud_host_disk_images:
|
|
||||||
- "{{ overcloud_host_image_name }}.qcow2"
|
|
||||||
overcloud_host_image_force_rebuild: False
|
overcloud_host_image_force_rebuild: False
|
||||||
tasks:
|
tasks:
|
||||||
- block:
|
- block:
|
||||||
- name: Ensure overcloud host disk image is built
|
- name: Validate overcloud host disk image configuration
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- overcloud_dib_host_images is sequence
|
||||||
|
- overcloud_dib_host_images | selectattr('name', 'undefined') | list | length == 0
|
||||||
|
- overcloud_dib_host_images | selectattr('elements', 'undefined') | list | length == 0
|
||||||
|
msg: "overcloud_dib_host_images set to invalid value"
|
||||||
|
|
||||||
|
- name: Ensure overcloud host disk images are built
|
||||||
include_role:
|
include_role:
|
||||||
name: stackhpc.os-images
|
name: stackhpc.os-images
|
||||||
vars:
|
vars:
|
||||||
@ -22,30 +27,17 @@
|
|||||||
os_images_upper_constraints_file: "{{ overcloud_dib_upper_constraints_file }}"
|
os_images_upper_constraints_file: "{{ overcloud_dib_upper_constraints_file }}"
|
||||||
os_images_cache: "{{ image_cache_path }}"
|
os_images_cache: "{{ image_cache_path }}"
|
||||||
os_images_common: ""
|
os_images_common: ""
|
||||||
os_images_list:
|
os_images_list: "{{ overcloud_dib_host_images }}"
|
||||||
- name: "{{ overcloud_host_image_name }}"
|
|
||||||
elements: "{{ overcloud_dib_elements }}"
|
|
||||||
env: "{{ overcloud_dib_env_vars }}"
|
|
||||||
packages: "{{ overcloud_dib_packages }}"
|
|
||||||
type: qcow2
|
|
||||||
os_images_upload: False
|
os_images_upload: False
|
||||||
os_images_force_rebuild: "{{ overcloud_host_image_force_rebuild }}"
|
os_images_force_rebuild: "{{ overcloud_host_image_force_rebuild }}"
|
||||||
|
|
||||||
- name: Ensure overcloud host disk image is copied onto seed
|
- name: Copy overcloud host disk images into /httpboot
|
||||||
copy:
|
copy:
|
||||||
src: "{{ image_cache_path }}/{{ overcloud_host_image_name }}/{{ item }}"
|
src: "{{ image_cache_path }}/{{ image.name }}/{{ image.name }}.{{ image.type | default('qcow2') }}"
|
||||||
dest: "/etc/kolla/bifrost/{{ item }}"
|
dest: "/var/lib/docker/volumes/bifrost_httpboot/_data/{{ image.name }}.{{ image.type | default('qcow2') }}"
|
||||||
remote_src: True
|
remote_src: True
|
||||||
with_items: "{{ overcloud_host_disk_images }}"
|
with_items: "{{ overcloud_dib_host_images }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: image
|
||||||
become: True
|
become: True
|
||||||
|
|
||||||
- name: Copy overcloud host disk image into /httpboot
|
|
||||||
command: >
|
|
||||||
docker exec bifrost_deploy
|
|
||||||
bash -c 'ansible -vvvv target
|
|
||||||
-i /bifrost/playbooks/inventory/target
|
|
||||||
-m copy
|
|
||||||
-a "src=/etc/bifrost/{{ item }} dest=/httpboot/{{ item }}"
|
|
||||||
-e "ansible_python_interpreter=/var/lib/kolla/venv/bin/python"'
|
|
||||||
with_items: "{{ overcloud_host_disk_images }}"
|
|
||||||
when: overcloud_dib_build_host_images | bool
|
when: overcloud_dib_build_host_images | bool
|
||||||
|
@ -39,6 +39,11 @@ For example, to install Bifrost from a custom git repository:
|
|||||||
Overcloud root disk image configuration
|
Overcloud root disk image configuration
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This configuration only applies when ``overcloud_dib_build_host_images``
|
||||||
|
(set in ``${KAYOBE_CONFIG_PATH}/overcloud-dib.yml``) is not changed to true.
|
||||||
|
|
||||||
Bifrost uses Diskimage builder (DIB) to build a root disk image that is
|
Bifrost uses Diskimage builder (DIB) to build a root disk image that is
|
||||||
deployed to overcloud hosts when they are provisioned. The following options
|
deployed to overcloud hosts when they are provisioned. The following options
|
||||||
configure how this image is built. Consult the
|
configure how this image is built. Consult the
|
||||||
@ -180,6 +185,8 @@ Rather than needing to write a custom DIB element, we can use the
|
|||||||
kolla_bifrost_dib_packages:
|
kolla_bifrost_dib_packages:
|
||||||
- "biosdevname"
|
- "biosdevname"
|
||||||
|
|
||||||
|
.. _configuration-bifrost-image-deployment-config:
|
||||||
|
|
||||||
Disk image deployment configuration
|
Disk image deployment configuration
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
@ -190,11 +197,10 @@ The name of the root disk image to deploy can be configured via the
|
|||||||
Kayobe inventory. This can be used to provision different images across the
|
Kayobe inventory. This can be used to provision different images across the
|
||||||
overcloud.
|
overcloud.
|
||||||
|
|
||||||
.. note::
|
While only a single disk image can be built with Bifrost, starting from the
|
||||||
|
Yoga 12.0.0 release, Kayobe supports building multiple disk images directly
|
||||||
Support for building multiple disk images is not yet available. Images can
|
through Diskimage builder. Consult the :ref:`overcloud host disk image build
|
||||||
be manually renamed before changing the Kayobe configuration to build a
|
documentation <overcloud-dib>` for more details.
|
||||||
different image.
|
|
||||||
|
|
||||||
Ironic configuration
|
Ironic configuration
|
||||||
====================
|
====================
|
||||||
|
@ -18,6 +18,7 @@ options.
|
|||||||
kolla
|
kolla
|
||||||
kolla-ansible
|
kolla-ansible
|
||||||
bifrost
|
bifrost
|
||||||
|
overcloud-dib
|
||||||
ironic-python-agent
|
ironic-python-agent
|
||||||
docker-registry
|
docker-registry
|
||||||
seed-custom-containers
|
seed-custom-containers
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
.. _os-distribution:
|
||||||
|
|
||||||
===============
|
===============
|
||||||
OS Distribution
|
OS Distribution
|
||||||
===============
|
===============
|
||||||
|
209
doc/source/configuration/reference/overcloud-dib.rst
Normal file
209
doc/source/configuration/reference/overcloud-dib.rst
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
.. _overcloud-dib:
|
||||||
|
|
||||||
|
===============================
|
||||||
|
Overcloud host disk image build
|
||||||
|
===============================
|
||||||
|
|
||||||
|
This section covers configuration for building overcloud host disk images with
|
||||||
|
Diskimage builder (DIB), which is available from the Yoga 12.0.0 release. This
|
||||||
|
configuration is applied in ``${KAYOBE_CONFIG_PATH}/overcloud-dib.yml``.
|
||||||
|
|
||||||
|
Enabling host disk image build
|
||||||
|
==============================
|
||||||
|
|
||||||
|
From the Yoga release, disk images for overcloud hosts can be built directly
|
||||||
|
using Diskimage builder rather than through Bifrost. This is enabled with the
|
||||||
|
following option:
|
||||||
|
|
||||||
|
``overcloud_dib_build_host_images``
|
||||||
|
Whether to build host disk images with DIB directly instead of through
|
||||||
|
Bifrost. Setting it to true disables Bifrost image build and allows images
|
||||||
|
to be built with the ``kayobe overcloud host image build`` command. Default
|
||||||
|
value is false. This will change in a future release.
|
||||||
|
|
||||||
|
With this option enabled, Bifrost will be configured to stop building a root
|
||||||
|
disk image. This will become the default behaviour in a future release.
|
||||||
|
|
||||||
|
Overcloud root disk image configuration
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
Kayobe uses Diskimage builder (DIB) to build root disk images that are deployed
|
||||||
|
to overcloud hosts when they are provisioned. The following options configure
|
||||||
|
how these images are built. Consult the
|
||||||
|
:diskimage-builder-doc:`Diskimage-builder documentation <>` for further
|
||||||
|
information on building disk images.
|
||||||
|
|
||||||
|
The default configuration builds a whole disk (partitioned) image using the
|
||||||
|
selected :ref:`OS distribution <os-distribution>` (CentOS Stream 8 by default)
|
||||||
|
with serial console enabled, and SELinux disabled if CentOS Stream 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_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
|
||||||
|
<https://galaxy.ansible.com/stackhpc/os-images>`__ role. Default is to
|
||||||
|
build an image named ``deployment_image`` configured with the
|
||||||
|
``overcloud_dib_*`` variables defined below: ``{"name": "deployment_image",
|
||||||
|
"elements": "{{ overcloud_dib_elements }}", "env": "{{
|
||||||
|
overcloud_dib_env_vars }}", "packages": "{{ overcloud_dib_packages }}"}``.
|
||||||
|
``overcloud_dib_os_element``
|
||||||
|
DIB base OS element. Default is ``{{ os_distribution }}``.
|
||||||
|
``overcloud_dib_os_release``
|
||||||
|
DIB image OS release. Default is ``{{ os_release }}``.
|
||||||
|
``overcloud_dib_elements_default``
|
||||||
|
List of default DIB elements. Default is ``["centos",
|
||||||
|
"cloud-init-datasources", "disable-selinux", "enable-serial-console",
|
||||||
|
"vm"]`` when ``overcloud_dib_os_element`` is ``centos``, or ``["ubuntu",
|
||||||
|
"cloud-init-datasources", "enable-serial-console", "vm"]`` when
|
||||||
|
``overcloud_dib_os_element`` is ``ubuntu``. The ``vm`` element is poorly
|
||||||
|
named, and causes DIB to build a whole disk image rather than a single
|
||||||
|
partition.
|
||||||
|
``overcloud_dib_elements_extra``
|
||||||
|
List of additional DIB elements. Default is none.
|
||||||
|
``overcloud_dib_elements``
|
||||||
|
List of DIB elements. Default is a combination of ``overcloud_dib_elements_default``
|
||||||
|
and ``overcloud_dib_elements_extra``.
|
||||||
|
``overcloud_dib_env_vars_default``
|
||||||
|
DIB default environment variables. Default is
|
||||||
|
``{"DIB_BOOTLOADER_DEFAULT_CMDLINE": "nofb nomodeset gfxpayload=text
|
||||||
|
net.ifnames=1", "DIB_CLOUD_INIT_DATASOURCES": "ConfigDrive", "DIB_RELEASE":
|
||||||
|
"{{ overcloud_dib_os_release }}"}``.
|
||||||
|
``overcloud_dib_env_vars_extra``
|
||||||
|
DIB additional environment variables. Default is none.
|
||||||
|
``overcloud_dib_env_vars``
|
||||||
|
DIB environment variables. Default is combination of
|
||||||
|
``overcloud_dib_env_vars_default`` and
|
||||||
|
``overcloud_dib_env_vars_extra``.
|
||||||
|
``overcloud_dib_packages``
|
||||||
|
List of DIB packages to install. Default is to install no extra packages.
|
||||||
|
``overcloud_dib_upper_constraints_file``
|
||||||
|
Upper constraints file for installing packages in the virtual environment
|
||||||
|
used for building overcloud host disk images. Default is ``{{
|
||||||
|
pip_upper_constraints_file }}``.
|
||||||
|
|
||||||
|
Disk images are built with the following command:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
(kayobe) $ kayobe overcloud host image build
|
||||||
|
|
||||||
|
It is worth noting that images will not be rebuilt if they already exist. To
|
||||||
|
force rebuilding images, it is necessary to use the ``--force-rebuild``
|
||||||
|
argument.
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
(kayobe) $ kayobe overcloud host image build --force-rebuild
|
||||||
|
|
||||||
|
Example: Adding an element
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
In the following, we extend the list of DIB elements to add the ``growpart``
|
||||||
|
element:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
:caption: ``dib.yml``
|
||||||
|
|
||||||
|
overcloud_dib_elements_extra:
|
||||||
|
- "growpart"
|
||||||
|
|
||||||
|
Example: Building an XFS root filesystem image
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
By default, DIB will format the image as ``ext4``. In some cases it might be
|
||||||
|
useful to use XFS, for example when using the ``overlay`` Docker storage driver
|
||||||
|
which can reach the maximum number of hardlinks allowed by ``ext4``.
|
||||||
|
|
||||||
|
In DIB, we achieve this by setting the ``FS_TYPE`` environment variable to
|
||||||
|
``xfs``.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
:caption: ``dib.yml``
|
||||||
|
|
||||||
|
overcloud_dib_env_vars_extra:
|
||||||
|
FS_TYPE: "xfs"
|
||||||
|
|
||||||
|
Example: Configuring a development user account
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
A development user account should not be used in production.
|
||||||
|
|
||||||
|
When debugging a failed deployment, it can sometimes be necessary to allow
|
||||||
|
access to the image via a preconfigured user account with a known password.
|
||||||
|
This can be achieved via the :diskimage-builder-doc:`devuser
|
||||||
|
<elements/devuser/README>` element.
|
||||||
|
|
||||||
|
This example shows how to add the ``devuser`` element, and configure a username
|
||||||
|
and password for an account that has passwordless sudo:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
:caption: ``dib.yml``
|
||||||
|
|
||||||
|
overcloud_dib_elements_extra:
|
||||||
|
- "devuser"
|
||||||
|
|
||||||
|
overcloud_dib_env_vars_extra:
|
||||||
|
DIB_DEV_USER_USERNAME: "devuser"
|
||||||
|
DIB_DEV_USER_PASSWORD: "correct horse battery staple"
|
||||||
|
DIB_DEV_USER_PWDLESS_SUDO: "yes"
|
||||||
|
|
||||||
|
Alternatively, the :diskimage-builder-doc:`dynamic-login element
|
||||||
|
<elements/dynamic-login/README>` can be used to authorize SSH keys by appending
|
||||||
|
them to the kernel arguments.
|
||||||
|
|
||||||
|
Example: Installing a package
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
It can be necessary to install additional packages in the root disk image.
|
||||||
|
Rather than needing to write a custom DIB element, we can use the
|
||||||
|
``overcloud_dib_packages`` variable. For example, to install the
|
||||||
|
``biosdevname`` package:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
:caption: ``dib.yml``
|
||||||
|
|
||||||
|
overcloud_dib_packages:
|
||||||
|
- "biosdevname"
|
||||||
|
|
||||||
|
Example: Building multiple images
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
It can be necessary to build multiple images to support the various types of
|
||||||
|
hardware present in a deployment or the different functions performed by
|
||||||
|
overcloud hosts. This can be configured with the ``overcloud_dib_host_images``
|
||||||
|
variable, using a format accepted by the `stackhpc.os-images
|
||||||
|
<https://galaxy.ansible.com/stackhpc/os-images>`__ role. Note that image names
|
||||||
|
should not include the file extension. For example, to build a second image
|
||||||
|
with a development user account and the ``biosdevname`` package:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
:caption: ``dib.yml``
|
||||||
|
|
||||||
|
overcloud_dib_host_images:
|
||||||
|
- name: "deployment_image"
|
||||||
|
elements: "{{ overcloud_dib_elements }}"
|
||||||
|
env: "{{ overcloud_dib_env_vars }}"
|
||||||
|
packages: "{{ overcloud_dib_packages }}"
|
||||||
|
- name: "debug_deployment_image"
|
||||||
|
elements: "{{ overcloud_dib_elements + ['devuser'] }}"
|
||||||
|
env: "{{ overcloud_dib_env_vars | combine(devuser_env_vars) }}"
|
||||||
|
packages: "{{ overcloud_dib_packages + ['biosdevname'] }}"
|
||||||
|
|
||||||
|
devuser_env_vars:
|
||||||
|
DIB_DEV_USER_USERNAME: "devuser"
|
||||||
|
DIB_DEV_USER_PASSWORD: "correct horse battery staple"
|
||||||
|
DIB_DEV_USER_PWDLESS_SUDO: "yes"
|
||||||
|
|
||||||
|
Running the ``kayobe overcloud host image build`` command with this
|
||||||
|
configuration will create two images: ``deployment_image.qcow2`` and
|
||||||
|
``debug_deployment_image.qcow2``.
|
||||||
|
|
||||||
|
Disk image deployment configuration
|
||||||
|
===================================
|
||||||
|
|
||||||
|
See :ref:`disk image deployment configuration in
|
||||||
|
Bifrost<configuration-bifrost-image-deployment-config>` for how to configure
|
||||||
|
the root disk image to be used to provision each host.
|
@ -172,7 +172,8 @@ At this point the seed services need to be deployed on the seed VM. These
|
|||||||
services are deployed in the ``bifrost_deploy`` container.
|
services are deployed in the ``bifrost_deploy`` container.
|
||||||
|
|
||||||
This command will also build the Operating System image that will be used to
|
This command will also build the Operating System image that will be used to
|
||||||
deploy the overcloud nodes using Disk Image Builder (DIB).
|
deploy the overcloud nodes using Disk Image Builder (DIB), unless
|
||||||
|
``overcloud_dib_build_host_images`` is set to ``True``.
|
||||||
|
|
||||||
To deploy the seed services in containers::
|
To deploy the seed services in containers::
|
||||||
|
|
||||||
@ -217,6 +218,27 @@ rebuilding images, use the ``--force-rebuild`` argument.
|
|||||||
See :ref:`here <configuration-ipa-build>` for information on how to
|
See :ref:`here <configuration-ipa-build>` for information on how to
|
||||||
configure the IPA image build process.
|
configure the IPA image build process.
|
||||||
|
|
||||||
|
Building Overcloud Host Disk Images
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This step is only relevant if ``overcloud_dib_build_host_images`` is set to
|
||||||
|
``True``. By default, a host disk image is automatically built by Bifrost.
|
||||||
|
|
||||||
|
Host disk images are deployed on overcloud hosts during provisioning. To build
|
||||||
|
host disk images::
|
||||||
|
|
||||||
|
(kayobe) $ kayobe overcloud host image build
|
||||||
|
|
||||||
|
If images have been built previously, they will not be rebuilt. To force
|
||||||
|
rebuilding images, use the ``--force-rebuild`` argument.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
See :ref:`here <overcloud-dib>` for information on how to configure the
|
||||||
|
overcloud host disk image build process.
|
||||||
|
|
||||||
Accessing the Seed via SSH (Optional)
|
Accessing the Seed via SSH (Optional)
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
|
@ -10,6 +10,14 @@
|
|||||||
# is False. This will change in a future release.
|
# is False. This will change in a future release.
|
||||||
#overcloud_dib_build_host_images:
|
#overcloud_dib_build_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 role. Default is to
|
||||||
|
# build an image named "deployment_image" configured with the overcloud_dib_*
|
||||||
|
# variables defined below: {"name": "deployment_image", "elements": "{{
|
||||||
|
# overcloud_dib_elements }}", "env": "{{ overcloud_dib_env_vars }}",
|
||||||
|
# "packages": "{{ overcloud_dib_packages }}"}.
|
||||||
|
#overcloud_dib_host_images:
|
||||||
|
|
||||||
# DIB base OS element. Default is {{ os_distribution }}.
|
# DIB base OS element. Default is {{ os_distribution }}.
|
||||||
#overcloud_dib_os_element:
|
#overcloud_dib_os_element:
|
||||||
|
|
||||||
|
7
releasenotes/notes/dib-host-image-4fe8b1bf078f2d27.yaml
Normal file
7
releasenotes/notes/dib-host-image-4fe8b1bf078f2d27.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Adds support for building overcloud root disk images directly with DIB
|
||||||
|
rather than through Bifrost. This includes support for building multiple
|
||||||
|
images, each with a different configuration. See `story 2002098
|
||||||
|
<https://storyboard.openstack.org/#!/story/2002098>` for details.
|
Loading…
Reference in New Issue
Block a user