project-config/nodepool/elements
Clark Boylan 9e1c44d9a4 Statically cache devstack images and packages
We had been running a script to generate a list of things to cache for
devstack. Unfortunately, we've discovered that this attempts to perform
unsafe actions which illustrates that this is unsafe (and creates
unnecessary relationship between opendev images and openstack/devstack).

Address this by providing a static list of things to cache.

Note this does not do anything for arm64 images (that will need to be
addressed in a follow on but they are largely not running devstack there
yet).

On a Bionic node this is what we have in /opt/cache/files/:

cirros-0.3.2-i386-disk.vmdk
cirros-0.3.4-x86_64-disk.img
cirros-0.3.4-x86_64-disk.vhd.tgz
cirros-0.3.4-x86_64-uec.tar.gz
cirros-0.3.5-x86_64-disk.img
cirros-0.3.5-x86_64-disk.vhd.tgz
cirros-0.3.5-x86_64-uec.tar.gz
cirros-0.4.0-x86_64-disk.img
cirros-0.4.0-x86_64-uec.tar.gz
etcd-v3.1.10-linux-amd64.tar.gz
etcd-v3.2.17-linux-amd64.tar.gz
etcd-v3.3.12-linux-amd64.tar.gz
get-pip.py
stackviz-latest.tar.gz
zanata-cli-4.3.3-dist.tar.gz

I've trimmed out the vmdk, vhd, and tarball based images as we should
all be using qcow2s. Everything under etcd is provided by preexisting
static lists.

Change-Id: Iff741e8ed4c517ccabae6e6d6ba730f0aa37a272
2020-03-13 16:52:21 -07:00
..
cache-devstack Statically cache devstack images and packages 2020-03-13 16:52:21 -07:00
control-plane-minimal Fix new dib-lint errors 2020-03-11 10:10:57 +11:00
infra-package-needs Install tox into a virtualenv on our images 2020-03-13 09:27:30 -07:00
initialize-urandom Fix flake8 2017-10-21 18:37:10 +02:00
nodepool-base nodepool-elements: Use venv for utilities 2020-03-11 10:12:00 +11:00
openstack-repos Fix new dib-lint errors 2020-03-11 10:10:57 +11:00
zuul-worker zuul-worker: no selinux python2 libs on CentOS 8 2019-10-09 03:07:05 +00:00
README.rst Update doc to have 'debootstrap' dep and describe minimal 2016-10-12 19:27:05 -07:00
bindep-fallback.txt Remove references to OpenSUSE 423 2019-10-14 09:14:08 -07:00

README.rst

Using diskimage-builder to build devstack-gate nodes

In addition to being able to just download and consume images that are the same as what run devstack-gate, it's easy to make your own for local dev or testing - or just for fun.

Install diskimage-builder

Install the dependencies:

sudo apt-get install kpartx qemu-utils curl python-yaml debootstrap

Install diskimage-builder:

sudo -H pip install diskimage-builder

Build an image

Building an image is simple, we have a script!

bash tools/build-image.sh

See the script for environment variables to set distribution, etc. By default it builds an ubuntu-minimal based image. You should be left with a .qcow2 image file of your selected distribution.

Infra uses the -minimal build type for building Ubuntu/CentOS/Fedora. For example: ubuntu-minimal.

It is a good idea to set TMP_DIR to somewhere with plenty of space to avoid the disappointment of a full-disk mid-way through the script run.

While testing, consider exporting DIB_OFFLINE=true, to skip updating the cache.

Mounting the image

If you would like to examine the contents of the image, you can mount it on a loopback device using qemu-nbd.

sudo apt-get install qemu-utils
sudo modprobe nbd max_part=16
sudo mkdir -p /tmp/newimage
sudo qemu-nbd -c /dev/nbd1 /path/to/devstack-gate-precise.qcow2
sudo mount /dev/nbd1p1 /tmp/newimage

or use the scripts

sudo apt-get install qemu-utils
sudo modprobe nbd max_part=16
sudo tools/mount-image.sh devstack-gate-precise.qcow2
sudo tools/umount-image.sh

Other things

It's a qcow2 image, so you can do tons of things with it. You can upload it to glance, you can boot it using kvm, and you can even copy it to a cloud server, replace the contents of the server with it and kexec the new kernel.