Files
resf-testing-repo/ansible/roles/bootstrap_sparrowdo/tasks/main.yml
Stephen Simpson ec04f0bec5 Implement Ansible roles for Rocky Linux Testing Framework
- Added `bootstrap_sparrowdo` role for bootstrapping Sparrowdo on a VM.
- Introduced `cleanup_vm` role for cleaning up VMs and disk images.
- Created `download_image` role to download and cache QCOW2 images.
- Developed `golden_image` role for creating and customizing golden images.
- Implemented `provision_vm` role for provisioning VMs as linked clones.
- Added `run_test` role for executing tests with Sparrowdo.
- Created playbooks for building golden images, running single tests, and running test suites.
- Enhanced documentation with usage examples, configuration details, and troubleshooting tips.
- Added support for multiple cloud providers (AWS, Azure) in the test execution workflow.

Signed-off-by: Stephen Simpson <ssimpson89@users.noreply.github.com>
2025-12-29 16:02:39 -06:00

101 lines
2.8 KiB
YAML

---
- name: Verify golden image exists
stat:
path: "{{ golden_image_path }}"
register: golden_stat
failed_when: not golden_stat.stat.exists
- name: Set bootstrap VM name
set_fact:
bootstrap_vm: "bootstrap-{{ ansible_date_time.epoch }}"
- name: Bootstrap Sparrowdo
block:
- name: Create overlay disk
command: >
qemu-img create -f qcow2
-b {{ golden_image_path }} -F qcow2
/var/lib/libvirt/images/{{ bootstrap_vm }}.qcow2
become: true
- name: Start bootstrap VM
command: >
virt-install
--name {{ bootstrap_vm }}
--memory {{ vm_memory }}
--vcpus {{ vm_vcpus }}
--disk path=/var/lib/libvirt/images/{{ bootstrap_vm }}.qcow2,format=qcow2
--import
--os-variant rocky9-unknown
--network network=default
--noautoconsole
--wait 0
become: true
- name: Wait for VM IP
shell: >
virsh -c qemu:///system domifaddr {{ bootstrap_vm }} --source lease 2>/dev/null |
awk '/ipv4/ {print $4}' | cut -d/ -f1 | head -1
become: true
register: vm_ip
until: vm_ip.stdout != "" and vm_ip.stdout != "0.0.0.0"
retries: "{{ vm_boot_timeout }}"
delay: 2
changed_when: false
- name: Wait for SSH
wait_for:
host: "{{ vm_ip.stdout }}"
port: 22
timeout: "{{ ssh_port_timeout }}"
- name: Run Sparrowdo bootstrap
command:
argv:
- "~/.raku/bin/sparrowdo"
- "--host={{ vm_ip.stdout }}"
- "--ssh_user={{ ssh_user }}"
- "--ssh_private_key={{ ssh_private_key_path }}"
- "--bootstrap"
timeout: "{{ bootstrap_timeout }}"
register: bootstrap_result
retries: 3
delay: 5
until: bootstrap_result.rc == 0
- name: Shutdown VM
command: >
ssh -i {{ ssh_private_key_path }}
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
{{ ssh_user }}@{{ vm_ip.stdout }} 'sudo shutdown -h now'
ignore_errors: true
- name: Wait for shutdown
shell: virsh -c qemu:///system list --name | grep -q "{{ bootstrap_vm }}"
become: true
register: vm_running
until: vm_running.rc != 0
retries: 30
delay: 2
failed_when: false
always:
- name: Force stop VM if running
command: "virsh -c qemu:///system destroy {{ bootstrap_vm }}"
become: true
ignore_errors: true
changed_when: false
- name: Undefine VM
command: "virsh -c qemu:///system undefine {{ bootstrap_vm }}"
become: true
ignore_errors: true
changed_when: false
- name: Remove overlay disk
file:
path: "/var/lib/libvirt/images/{{ bootstrap_vm }}.qcow2"
state: absent
become: true
ignore_errors: true