aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/sample-environment.yml15
-rw-r--r--roles/libvirt/defaults/main.yml4
-rw-r--r--roles/libvirt/tasks/vm-install.yml2
-rw-r--r--roles/libvirt/templates/kickstart/f38.ks50
-rw-r--r--roles/libvirt/vars/main.yml2
5 files changed, 66 insertions, 7 deletions
diff --git a/docs/sample-environment.yml b/docs/sample-environment.yml
index b699bfc..dc39165 100644
--- a/docs/sample-environment.yml
+++ b/docs/sample-environment.yml
@@ -1,21 +1,26 @@
all:
hosts:
- test1:
- vm_name: "test1"
+ test-el8:
+ vm_name: "test-el8"
os: "rhel8-unknown"
kickstart: "el8.ks"
iso_path: "/path/to/ios/AlmaLinux-8.7-x86_64-dvd.iso"
- test2:
- vm_name: "test2"
+ test-el9:
+ vm_name: "test-el9"
os: "rhel9-unknown"
kickstart: "el9.ks"
iso_path: "/path/to/isos/AlmaLinux-9.1-x86_64-dvd.iso"
+ test-f38:
+ vm_name: "test-f38"
+ os: "fedora-unknown"
+ kickstart: "f38.ks"
+ iso_path: "/path/to/isos/Fedora-Server-dvd-x86_64-38-1.6.iso"
+ libvirt_vm_location_arguments: ",kernel=images/pxeboot/vmlinuz,initrd=images/pxeboot/initrd.img" #https://bugzilla.redhat.com/show_bug.cgi?id=2144105
vars:
memory_mb: 1024
cpus: 1
disk_gb: 20
disk_format: "raw"
- os: "rhel-unknown"
timezone: "America/New_York"
hypervisor_host: "hypervisor.fqdn"
parent_dataset: "zfs-parent-dataset/zfs-child-dataset"
diff --git a/roles/libvirt/defaults/main.yml b/roles/libvirt/defaults/main.yml
new file mode 100644
index 0000000..4fbd9d5
--- /dev/null
+++ b/roles/libvirt/defaults/main.yml
@@ -0,0 +1,4 @@
+# This variable is only needed for custom virt-install --location arguments, such as finding the kernel
+# Example usage would be libvirt_vm_location_arguments: ",kernel=/mnt/path/to/vmlinuz,initrd=/mnt/path/to/initrd.img"
+# ',' at the beginning is necessary, as this is attached to the virt-install --location /path/to/location command
+libvirt_vm_location_arguments: ""
diff --git a/roles/libvirt/tasks/vm-install.yml b/roles/libvirt/tasks/vm-install.yml
index 1582e30..b1d9de8 100644
--- a/roles/libvirt/tasks/vm-install.yml
+++ b/roles/libvirt/tasks/vm-install.yml
@@ -4,7 +4,7 @@
dest: "/{{ libvirt_vm_destination }}/{{ libvirt_vm_kickstart_file }}"
- name: Create VM in destination filesystem
- ansible.builtin.command: 'virt-install --name {{ libvirt_vm_name }} --memory {{ libvirt_vm_memory }} --vcpus {{ libvirt_vm_vcpus }} --network {{ libvirt_vm_network }} --disk size={{ libvirt_vm_disk_size }},path=/{{ libvirt_vm_destination }}/{{ libvirt_vm_name }}.img,format={{ libvirt_vm_disk_format }} --location {{ libvirt_vm_iso_path }} --os-variant {{ libvirt_vm_os }} --initrd-inject=/{{ libvirt_vm_destination }}/{{ libvirt_vm_kickstart_file }} --extra-args="inst.ks=file:/{{ libvirt_vm_kickstart_file }}"'
+ ansible.builtin.command: 'virt-install --name {{ libvirt_vm_name }} --memory {{ libvirt_vm_memory }} --vcpus {{ libvirt_vm_vcpus }} --network {{ libvirt_vm_network }} --disk size={{ libvirt_vm_disk_size }},path=/{{ libvirt_vm_destination }}/{{ libvirt_vm_name }}.img,format={{ libvirt_vm_disk_format }} --location {{ libvirt_vm_location_path }}{{ libvirt_vm_location_arguments }} --os-variant {{ libvirt_vm_os }} --initrd-inject=/{{ libvirt_vm_destination }}/{{ libvirt_vm_kickstart_file }} --extra-args="inst.ks=file:/{{ libvirt_vm_kickstart_file }}"'
- name: Remove kickstart file from destination filesystem
ansible.builtin.file:
diff --git a/roles/libvirt/templates/kickstart/f38.ks b/roles/libvirt/templates/kickstart/f38.ks
new file mode 100644
index 0000000..2264720
--- /dev/null
+++ b/roles/libvirt/templates/kickstart/f38.ks
@@ -0,0 +1,50 @@
+#version=F38
+text
+reboot
+
+# Keyboard layouts
+keyboard --vckeymap=us --xlayouts='us'
+# System language
+lang en_US.UTF-8
+
+# Use CDROM installation media
+cdrom
+
+%packages
+@^server-product-environment
+
+%end
+
+# Network information
+network --bootproto=dhcp --device=enp1s0 --noipv6 --activate
+network --hostname={{ libvirt_kickstart_hostname }}
+
+# Run the Setup Agent on first boot
+firstboot --enable
+
+# Generated using Blivet version 3.7.1
+ignoredisk --only-use=vda
+autopart
+# Partition clearing information
+clearpart --none --initlabel
+
+# System timezone
+timezone {{ libvirt_kickstart_timezone }} --isUtc
+
+# Root password
+rootpw --iscrypted {{ libvirt_kickstart_root_password | password_hash("sha512") }}
+
+%post
+mkdir -m0700 /root/.ssh/
+
+cat <<EOF >/root/.ssh/authorized_keys
+{{ libvirt_kickstart_root_ssh_key }}
+EOF
+
+### set permissions
+chmod 0600 /root/.ssh/authorized_keys
+
+### fix up selinux context
+restorecon -R /root/.ssh/
+
+%end
diff --git a/roles/libvirt/vars/main.yml b/roles/libvirt/vars/main.yml
index e809f48..82140c5 100644
--- a/roles/libvirt/vars/main.yml
+++ b/roles/libvirt/vars/main.yml
@@ -5,7 +5,7 @@ libvirt_vm_disk_size: "{{ disk_gb }}"
libvirt_vm_disk_format: "{{ disk_format }}"
libvirt_vm_os: "{{ os }}"
libvirt_vm_kickstart_file: "{{ kickstart }}"
-libvirt_vm_iso_path: "{{ iso_path }}"
+libvirt_vm_location_path: "{{ iso_path }}"
libvirt_vm_destination: "{{ parent_dataset }}/{{ vm_name }}"
libvirt_vm_network: "{{ network }}"
libvirt_kickstart_hostname: "{{ vm_name }}"