kayobe/playbooks/kayobe-seed-vm-base/pre.yml
Mark Goddard c16597aa2d Add seed VM provisioning CI job
Adds the kayobe-seed-vm-centos8 CI job to configure the Zuul VM as a
seed hypervisor, and use nested virt to provision a seed VM.  This
ensures that the seed hypervisor code paths are tested.

The job uses a Cirros image for the seed VM rather than the usual CentOS
cloud image. This is to reduce bandwidth required to download the image.
It does mean that the resulting seed VM cannot be used as a seed, but
nested virt would make this slow and unreliable anyway. Cirros does not
load cdrom drivers by default, so we add the configdrive as a disk
rather than a cdrom device.

Depends-On: https://review.opendev.org/617161

Change-Id: I2268a1ddf9a2870c713f32a40689e1686365aabd
Story: 2001655
Task: 6683
2020-06-16 17:19:47 +01:00

64 lines
2.2 KiB
YAML

---
- hosts: primary
environment:
KAYOBE_CONFIG_SOURCE_PATH: "{{ kayobe_config_src_dir }}"
tasks:
# NOTE(mgoddard): Use the name zz-overrides.yml to ensure this takes
# precedence over the standard config files.
- name: Ensure kayobe-config override config file exists
template:
src: overrides.yml.j2
dest: "{{ kayobe_config_src_dir }}/etc/kayobe/zz-overrides.yml"
- name: Ensure seed group variables exist
template:
src: seed-group-vars.j2
dest: "{{ kayobe_config_src_dir }}/etc/kayobe/inventory/group_vars/seed/network-interfaces"
# NOTE(mgoddard): The kayobe dev config by default expects a bridge -
# braio - to exist with an IP address of 192.168.33.4.
- name: Ensure all-in-one network bridge interface exists
command: "{{ item }}"
become: true
with_items:
- "ip l add braio type bridge"
- "ip l set braio up"
- "ip a add 192.168.33.4/24 dev braio"
# NOTE(mgoddard): CentOS 8 removes interfaces from their bridge during
# ifdown, and removes the bridge if there are no interfaces left. When
# Kayobe bounces veth links plugged into the bridge, it causes the
# bridge which has the IP we are using for SSH to be removed. Use a
# dummy interface.
- "ip l add dummy1 type dummy"
- "ip l set dummy1 up"
- "ip l set dummy1 master braio"
# NOTE(mgoddard): Configure IP forwarding and NAT to allow communication
# from the seed VM to the outside world.
# FIXME(mgoddard): use a libvirt network?
- name: Ensure NAT is configured
iptables:
chain: POSTROUTING
table: nat
out_interface: "{{ ansible_default_ipv4.interface }}"
jump: MASQUERADE
become: true
# FIXME(mgoddard): use a libvirt network?
- name: Ensure IP forwarding is enabled
sysctl:
name: net.ipv4.conf.all.forwarding
value: 1
become: true
- name: Ensure SELinux is disabled
selinux:
state: disabled
become: True
- name: Ensure kayobe is installed
shell:
cmd: dev/install.sh &> {{ logs_dir }}/ansible/install
chdir: "{{ kayobe_src_dir }}"