From debf7ad5e6418a008c6220174a1308c71826e35b Mon Sep 17 00:00:00 2001 From: Leander Hutton Date: Fri, 6 Mar 2026 17:33:49 -0500 Subject: [PATCH] Updated to use cloud-init images --- tasks/main.yml | 49 ++++++++++++++++++++++++----- templates/cloud-init-network.yml.j2 | 17 ++++++++++ templates/cloud-init.yml.j2 | 23 ++++++++++++++ 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 templates/cloud-init-network.yml.j2 create mode 100644 templates/cloud-init.yml.j2 diff --git a/tasks/main.yml b/tasks/main.yml index 7dbb717..1f9d7f2 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -26,20 +26,53 @@ remote_src: yes mode: 0660 register: copy_results - - name: Define vm - community.libvirt.virt: - command: define - xml: "{{ lookup('template', 'vm-template.xml.j2') }}" + + - name: Generate cloud-init user-data from template + delegate_to: localhost + ansible.builtin.copy: + src: files/leander.pub + dest: /tmp/ansible_cloudinit_ssh.pub + + - name: Generate cloud-init user-data from template + delegate_to: localhost + ansible.builtin.template: + src: cloud-init.yml.j2 + dest: /tmp/ansible_cloudinit_userdata.config + + - name: Copy network-config from file + delegate_to: localhost + ansible.builtin.template: + src: templates/cloud-init-network.yml.j2 + dest: /tmp/ansible_cloudinit_network.config + - name: Configure the image command: | virt-customize -a {{ libvirt_pool_dir }}/{{ vm_name }}.qcow2 \ --hostname {{ vm_name }} \ - --password {{ vm_user }}:password:{{ vm_pass }} \ + --root-password password:{{ root_passwd }} \ --firstboot-command '/usr/bin/ssh-keygen -A' when: copy_results is changed - - when: "vm_name not in existing_vms.list_vms" - + +- name: Install the vm via virt-install + ansible.builtin.command: | + virt-install \ + --name "{{ vm_name }}" \ + --boot uefi \ + --machine q35 \ + --memory "{{ vm_ram_mb }}" \ + --vcpus "{{ vm_vcpus }}" \ + --disk "path={{ vm_pool_dir }}/{{ vm_name }}.qcow2" \ + --import \ + --os-variant "debian11" \ + --network "network={{ vm_net }},model=virtio,driver.iommu=on" \ + --rng /dev/urandom,driver.iommu=on \ + --memballoon driver.iommu=on \ + --virt-type kvm \ + --graphics vnc \ + --noautoconsole \ + --cloud-init user-data=/tmp/ansible_cloudinit_userdata.config,network-config=/tmp/ansible_cloudinit_network.config + --noreboot \ + --qemu-commandline="-smbios type=1,serial=ds=nocloud;h={{ vm_name }}" - name: Ensure VM is started community.libvirt.virt: diff --git a/templates/cloud-init-network.yml.j2 b/templates/cloud-init-network.yml.j2 new file mode 100644 index 0000000..f367956 --- /dev/null +++ b/templates/cloud-init-network.yml.j2 @@ -0,0 +1,17 @@ +#cloud-config +network: + version: 2 + ethernets: + all-en: + match: + name: {{ iface }} + dhcp4: false + addresses: + - {{ ip_addr }} + routes: + - to: default + via: {{ gateway }} + nameservers: + addresses: + - {{ dns_server_1 }} + - {{ dns_server_2 }} diff --git a/templates/cloud-init.yml.j2 b/templates/cloud-init.yml.j2 new file mode 100644 index 0000000..9daf074 --- /dev/null +++ b/templates/cloud-init.yml.j2 @@ -0,0 +1,23 @@ +#cloud-config +users: + - name: {{ ci_user_name }} + shell: /bin/bash + groups: [sudo] + ssh-authorized-keys: + - "{{ ssh_public_key }}" + +chpasswd: + list: | + {{ ci_user_name }}:{{ ci_user_passwd_hash}} + expire: False + +ssh_pwauth: True +disable_root: True + +package_update: true +package_upgrade: true +packages: + - htop + - nftables + - vim + - git