openstack-ansible-ops/scripts/ironic_generate-images.sh

149 lines
5.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script is set up to be run on infra01 and on ubunut xenial (16.04), but could be run on any node as long as the infra01_util node is in the hosts file.
# You can also define/export the UTILITY01_HOSTNAME yourself.
set -e -u
function cleanup {
# it's ok if we have some errors on cleanup
set +e
unset DIB_DEV_USER_USERNAME DIB_DEV_USER_PASSWORD DIB_DEV_USER_PWDLESS_SUDO
unset ELEMENTS_PATH DIB_CLOUD_INIT_DATASOURCES DIB_RELEASE DISTRO_NAME
unset DIB_HPSSACLI_URL IRONIC_AGENT_VERSION
unset -f make-base-image
unset -f cleanup
deactivate
}
# clean up our variables on exit, even exit on error
trap cleanup EXIT
function make-base-image {
disk-image-create -o baremetal-$DISTRO_NAME-$DIB_RELEASE $DISTRO_NAME baremetal bootloader dhcp-all-interfaces local-config proliant-tools slow-network ${DEBUG_USER_ELEMENT:-""}
rm -R *.d/
scp -o StrictHostKeyChecking=no baremetal-$DISTRO_NAME-$DIB_RELEASE* "${UTILITY01_HOSTNAME}":~/images
rm baremetal-$DISTRO_NAME-$DIB_RELEASE* # no reason to keep these around
VMLINUZ_UUID=$(ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "source ~/openrc; openstack image create \
--public \
--disk-format aki \
--property hypervisor_type=baremetal \
--protected \
--container-format aki \
baremetal-$DISTRO_NAME-$DIB_RELEASE.vmlinuz < ~/images/baremetal-$DISTRO_NAME-$DIB_RELEASE.vmlinuz" | awk '/\| id/ {print $4}')
INITRD_UUID=$(ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "source ~/openrc; openstack image create \
--public \
--disk-format ari \
--property hypervisor_type=baremetal \
--protected \
--container-format ari \
baremetal-$DISTRO_NAME-$DIB_RELEASE.initrd < ~/images/baremetal-$DISTRO_NAME-$DIB_RELEASE.initrd" | awk '/\| id/ {print $4}')
ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "source ~/openrc; openstack image create \
--public \
--disk-format qcow2 \
--container-format bare \
--property hypervisor_type=baremetal \
--property kernel_id=${VMLINUZ_UUID} \
--protected \
--property ramdisk_id=${INITRD_UUID} \
baremetal-$DISTRO_NAME-$DIB_RELEASE < ~/images/baremetal-$DISTRO_NAME-$DIB_RELEASE.qcow2"
}
# install needed binaries
apt-get install -y kpartx parted qemu-utils virtualenv
mkdir -p ~/dib
pushd ~/dib
virtualenv env
set +u
source env/bin/activate
set -u
# newton pip.conf sucks
if [[ -f ~/.pip/pip.conf ]]; then
mv ~/.pip/pip.conf{,.bak}
fi
# install dib
pip install pbr # newton pbr is too old
if [[ ! -d ~/dib/diskimage-builder ]]; then
git clone https://github.com/openstack/diskimage-builder/ -b 2.10.1
fi
# let's use a newer kernel for interfaces we may need
if ! grep -q linux-image-generic-lts-xenial ~/dib/diskimage-builder/diskimage_builder/elements/ubuntu/package-installs.yaml; then
echo 'linux-image-generic-lts-xenial:' > ~/dib/diskimage-builder/diskimage_builder/elements/ubuntu/package-installs.yaml
fi
pushd diskimage-builder
pip install .
popd
if [[ -f ~/.pip/pip.conf.bak ]]; then
mv ~/.pip/pip.conf.bak ~/.pip/pip.conf
fi
if [[ ! -e ~/dib/openstack-ansible-ops ]]; then
git clone https://github.com/openstack/openstack-ansible-ops ~/dib/openstack-ansible-ops
fi
UTILITY01_HOSTNAME="${UTILITY01_HOSTNAME:-$(grep infra01_util /etc/hosts | awk '{print $NF}')}"
# create image directory in util01 container
ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "mkdir -p ~/images"
# set up envars for the deploy image debug user
export DIB_DEV_USER_USERNAME=debug-user
export DIB_DEV_USER_PASSWORD=secrete
export DIB_DEV_USER_PWDLESS_SUDO=yes
# Uncomment the following line to enable a debug user login
#export DEBUG_USER_ELEMENT=devuser
# set up envars for all images
export DIB_CLOUD_INIT_DATASOURCES="Ec2, ConfigDrive, OpenStack"
export ELEMENTS_PATH=~/dib/openstack-ansible-ops/elements
# default to ubuntu xenial
export DIB_RELEASE=xenial
export DISTRO_NAME=ubuntu
# set up envars for the deploy image ironic agent
# export DIB_HPSSACLI_URL="http://downloads.hpe.com/pub/softlib2/software1/pubsw-linux/p1857046646/v109216/hpssacli-2.30-6.0.x86_64.rpm"
export IRONIC_AGENT_VERSION="stable/rocky"
# create the deploy image
disk-image-create --install-type source -o ironic-deploy ironic-agent ubuntu proliant-tools ${DEBUG_USER_ELEMENT:-""}
rm ironic-deploy.vmlinuz # not needed or uploaded
rm -R *.d/ # don't need dib dirs
scp -o StrictHostKeyChecking=no ironic-deploy* "${UTILITY01_HOSTNAME}":~/images
rm ironic-deploy* # no reason to keep these around
ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "source ~/openrc; openstack image create \
--public \
--disk-format aki \
--property hypervisor_type=baremetal \
--protected \
--container-format aki < ~/images/ironic-deploy.kernel \
ironic-deploy.kernel"
ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "source ~/openrc; openstack image create \
--public \
--disk-format ari \
--property hypervisor_type=baremetal \
--protected \
--container-format ari < ~/images/ironic-deploy.initramfs \
ironic-deploy.initramfs"
# Ubuntu Xenial final image
make-base-image
# Ubuntu Trusty final image
export DIB_RELEASE=trusty
export DISTRO_NAME=ubuntu
make-base-image
# CentOS 7 final image
export DIB_RELEASE=7
export DISTRO_NAME=centos7
make-base-image
popd
# utility container doesn't have much space...
ssh -o StrictHostKeyChecking=no "${UTILITY01_HOSTNAME}" "rm ~/images -R"