OSIC Building Baremetal (Ironic) Images

ironic Nov 23, 2016

This is a quick rundown on the steps used to create the OSIC baremetal images. For a more detailed rundown on Ironic image building please read the following post.

Install required apt packages
apt-get install -y qemu uuid-runtime curl kpartx

Install the disk-image-builder (DIB)

pip install diskimage-builder --isolated

Clone the OSIC diskimage-builder elements

git clone https://github.com/os-cloud/osic-elements /opt/osic-elements
Create the deploy image

The OSIC uses Gen9 proliant servers. The following set of commands will create a proper deploy image using the stable/newton release of IPA and ensure the deploy image has access to the proliant tools for node management.

# Export a few variables used to provide debug access to the deploy image

# This URL is subject to change, in the after now
#  it may be different. Please set this accordingly.
export DIB_HPSSACLI_URL="http://downloads.hpe.com/pub/softlib2/software1/pubsw-linux/p1857046646/v109216/hpssacli-2.30-6.0.x86_64.rpm"

# If you're running Ironic ``<=newton`` you should use the
#  newton version of IPA.
export IRONIC_AGENT_VERSION="stable/newton"

#  The proliant tools only have a pre-built RPM.
#  While you can provision other Linux Operating
#  systems the "deploy image" will NEED to be "fedora".
disk-image-create --install-type source -o ironic-deploy ironic-agent fedora devuser proliant-tools
Upload the deploy image into glance
# Upload the deploy image kernel
glance image-create --name ironic-deploy.kernel \
                    --visibility public \
                    --disk-format aki \
                    --property hypervisor_type=baremetal \
                    --protected=True \
                    --container-format aki < ironic-deploy.kernel

# Upload the user image initramfs
glance image-create --name ironic-deploy.initramfs \
                    --visibility public \
                    --disk-format ari \
                    --property hypervisor_type=baremetal \
                    --protected=True \
                    --container-format ari < ironic-deploy.initramfs
Create a user image

The OSIC uses Ubuntu 14.04 and 16.04 as well as CentOS 7 images by default. The following two commands will illustrate how to build both Ubuntu and CentOS.

Build the Ubuntu image You can configure the Ubuntu release by setting the "DIB_RELEASE" accordingly.

# Set the release
export DIB_RELEASE=xenial
export DISTRO_NAME=ubuntu

# Create the image
ELEMENTS_PATH="/opt/osic-elements" DIB_CLOUD_INIT_DATASOURCES="Ec2, ConfigDrive, OpenStack" disk-image-create -o baremetal-$DISTRO_NAME-$DIB_RELEASE $DISTRO_NAME baremetal bootloader osic-dfw

Build the CentOS image

# Set the release
export DIB_RELEASE=centos
export DISTRO_NAME=7

# Create the image
ELEMENTS_PATH="/opt/osic-elements" DIB_CLOUD_INIT_DATASOURCES="Ec2, ConfigDrive, OpenStack" disk-image-create -o baremetal-$DISTRO_NAME-$DIB_RELEASE centos7 baremetal bootloader epel osic-dfw
Upload the user image into glance
# Upload the user image vmlinuz and store uuid
VMLINUZ_UUID="$(glance image-create --name baremetal-$DISTRO_NAME-$DIB_RELEASE.vmlinuz \
                                    --visibility public \
                                    --disk-format aki \
                                    --property hypervisor_type=baremetal \
                                    --protected=True \
                                    --container-format aki < baremetal-$DISTRO_NAME-$DIB_RELEASE.vmlinuz | awk '/\| id/ {print $4}')"

# Upload the user image initrd and store uuid
INITRD_UUID="$(glance image-create --name baremetal-$DISTRO_NAME-$DIB_RELEASE.initrd \
                                   --visibility public \
                                   --disk-format ari \
                                   --property hypervisor_type=baremetal \
                                   --protected=True \
                                   --container-format ari < baremetal-$DISTRO_NAME-$DIB_RELEASE.initrd | awk '/\| id/ {print $4}')"

# Create image
glance image-create --name baremetal-$DISTRO_NAME-$DIB_RELEASE \
                    --visibility public \
                    --disk-format qcow2 \
                    --container-format bare \
                    --property hypervisor_type=baremetal \
                    --property kernel_id=${VMLINUZ_UUID} \
                    --protected=True \
                    --property ramdisk_id=${INITRD_UUID} < baremetal-$DISTRO_NAME-$DIB_RELEASE.qcow2

With that complete you will have a functional deploy image based on Fedora with all of the needed tools to manage HP proliant servers. You will also have a user image which will automatically come up with nics using the i40e driver and will be available for bonding.

Kevin Carter

I'm me! Principal Engineer, Developer, Operator, Cloud Builder, Lover of Open Source, and hater of Nonsense (I know they're all related). My ramblings are my own.