Fedora 33 image

Now, this one was funny. First of all, `virt-builder` appears to be
really broken with Fedora 33. Whenever a new kernel version gets
insatlled within the VM (most often via the `--update` option to, say,
`virt-builder` or even `virt-customize`), then "something" within the VM
assumes that the Grub's configuration should actually use the UUID of
libguestfs' own appliance image. The result is of course unbootable, it
gets stuck at systemd waiting for a `/dev/disk/by-uuid/*` which just
won't come.

Solve that by not using `virt-builder` in the first place. Just get the
official VM image of Fedora for OpenStack, and then install a bunch of
packages. Also, *hope* that this will never ever result in a kernel
upgrade. If it does, then we're screwed.

As a nice bonus, Fedora 33 switched to Python 3.9 which removed
threading.Thread.isAlive() that used to be deprecated since Python2
times. That's a problem because Zuul is still using that, only the
upstream master is fixed. In the end I decided to patch this around in
Zuul. At first I wanted to redirect Ansible on F33 to use the
`python3.8` package, but that caused all sorts of <expletive> -- the
`python3-selinux` is only for the systemwide version, not for 3.8. After
disabling SELinux (it's a throwaway build VM!), it turned out that I
*still* need relabeling of the rootfs anyway, and that Ansible wants to
use host's Python for `import dnf`, which is only in 3.9 site-packages.
Nope, not going there today, sorry, back to patching Zuul (see the
previous commit).

Change-Id: I56cb1253200fd983eb816b5ae1e1eba0a4e493ef
3 files changed
tree: 2749062949b8b8c7b807810335825160aaed238a
  1. README.md
  2. ansible.cfg
  3. doc/
  4. files/
  5. group_vars/
  6. production
  7. requirements.yml
  8. roles/
  9. site.yml
README.md

Continuous Integration (CI) Setup via Ansible

This is what is currently powering the CI infrastructure tied to our Gerrit. It's mostly about Zuul v3 with Nodepool, log storage, etc.

Note that some pieces (Gerrit itself in particular) are still deployed via Puppet for legacy reasons. That configuration is internal.

# Example: provision the Zuul server
ansible-playbook -i production site.yml -l zuul-server