To create images for OpenStack-based clouds that can use Chef, set up a development
environment that includes the prerequisites, and then use the disk-image-create
command.
To create images that are compatible with Chef and the blueprint designer, you can either
update individual images or configure an environment to create images in bulk. To update individual
images, see Configuring OpenStack images. To create images in bulk, you
must set up an environment to use in creating those images. This environment must include certain
prerequisites, which are listed in the steps that follow. This environment does not have to be on
the cloud system, and it does not have to be the same operating system as the images that you want
to create for use on the cloud. The following procedure assumes a Red Hat Enterprise Linux™ (RHEL) version 7 operating system.
Note: Chef roles are supported only
on RHEL version 6 and version 7 images.
-
On RHEL version 7, install these packages:
git
qemu-system-x86 qemu-img
kpartx
-
Using the
git
program, clone the following repositories as shown:
git clone https://github.com/openstack/diskimage-builder.git
git clone https://github.com/openstack/tripleo-image-elements.git
git clone https://github.com/openstack/heat-templates.git
git clone https://git.openstack.org/openstack/dib-utils.git
Place
all the cloned repositories into the same folder, such as
/opt/image-builder.
-
Add the Chef hook element to your environment by extracting the
os-chef-config-hook.tgz file into the same folder that you placed the Git
repositories.
This file is provided in the engine installation media and is in
the /ibm-ucd-patterns-install/engine-install/resources
folder.tar -xf os-chef-config-hook.tgz
-
Specify these environment variables:
- ELEMENTS_PATH
- Specify the location of the Chef hook element that you extracted and the repositories that you
cloned. Separate the locations of different paths with colons. For example, if you extracted the
Chef hook element and cloned the repositories into the /opt/image-builder
folder, the code might look like the following example:
/opt/image-builder/tripleo-image-elements/elements:/opt/image-builder/heat-templates/hot/software-config/elements:/opt/image-builder/os-chef-config-hook/heat-templates/hot/software-config/elements:/opt/image-builder/ibm-customizations/elements
- BASE_IMAGE_FILE
- Specify the name of the file for the image.
- DIB_CLOUD_IMAGES
- Specify the location of the image file that is listed in the
BASE_IMAGE_FILE variable.
- PATH
- Add the location of the disk image creation tool, such as
/usr/local/source/dib-utils/bin:$PATH
.
- QEMU_IMG_OPTIONS
- Specify the version of the
qemu-img
program to use, such as
compat=0.10
.
For example, you might set these variables with the following
code:
export ELEMENTS_PATH=/opt/image-builder/tripleo-image-elements/elements:/opt/image-builder/heat-templates/hot/software-config/elements:/opt/image-builder/os-chef-config-hook/heat-templates/hot/software-config/elements:/opt/image-builder/ibm-customizations/elements
export DIB_CLOUD_IMAGES=file:///usr/local/source/image
export BASE_IMAGE_FILE=rhel-guest-image-7.0-20140930.0.x86_64.qcow2
export PATH="/usr/local/source/dib-utils/bin:$PATH"
export QEMU_IMG_OPTIONS="compat=0.10"
-
Using the disk-image-create image creation tool, create the Chef-compatible
image:
./diskimage-builder/bin/disk-image-create vm image-type disable-selinux ntp
heat-config os-collect-config os-refresh-config os-apply-config
heat-config-chef heat-config-script
--image-size image-size
-o image-name
Note: This
command must be entered on a single line. The preceding command is split into multiple lines for
clarity.
image-type
- Specify the type of image, such as
rhel
for a Red Hat Enterprise Linux image. You can create an image type that is different from
the operating system on which you create the image.
image-size
- The size of the image in gigabytes.
image-name
- The name of the output image.
For more information about this command and the image creation process, see
http://docs.openstack.org/developer/diskimage-builder/.
For example, the
following command creates a 20 GB image that is named
chefhook-rhel-7.0.qcow2:
./diskimage-builder/bin/disk-image-create vm rhel
disable-selinux ntp heat-config os-collect-config
os-refresh-config os-apply-config heat-config-chef
heat-config-script --image-size 20
-o chefhook-rhel-7.0.qcow2
-
Set the communications interval for the image to communicate with the Heat engine.
The
polling_interval parameter is the frequency in seconds with which the
image communicates with the Heat engine. By default, the
polling_interval is 30
seconds, but the default value can cause excessive engine load. To modify this value in the image,
open the
/etc/os-collect-config.conf configuration file in the image and add
the following text:
polling_interval = 90
In this case, the
polling_interval value is
90
seconds.
Ensure that the
polling_interval value is short enough that the virtual machine can collect any
changes from the Heat engine before the stack timeout elapses. The default timeout value is 60
minutes, but you can set the timeout value for each cloud. See Creating cloud projects for the blueprint designer.
-
Upload the image to your cloud system.
When you edit blueprints in the blueprint designer, you can apply Chef roles
to virtual images. See Applying Chef roles to environments.