2025-07-14 23:57:35 +02:00
|
|
|
---
|
|
|
|
- name: Ensure QEMU, KVM and dependencies are installed
|
|
|
|
ansible.builtin.apt:
|
|
|
|
name:
|
|
|
|
- qemu-system-x86
|
|
|
|
- qemu-utils
|
|
|
|
- libvirt-daemon-system
|
|
|
|
- libvirt-clients
|
|
|
|
- bridge-utils
|
|
|
|
- virtinst
|
|
|
|
- virt-manager
|
|
|
|
- cpu-checker
|
|
|
|
- unzip
|
|
|
|
- curl
|
|
|
|
state: present
|
|
|
|
become: true
|
|
|
|
|
|
|
|
- name: Download Packer
|
|
|
|
ansible.builtin.get_url:
|
|
|
|
url: "https://releases.hashicorp.com/packer/{{ packer_version }}/packer_{{ packer_version }}_linux_amd64.zip"
|
|
|
|
dest: "/tmp/packer.zip"
|
|
|
|
mode: '0644'
|
|
|
|
|
|
|
|
- name: Unarchive Packer
|
|
|
|
ansible.builtin.unarchive:
|
|
|
|
src: /tmp/packer.zip
|
|
|
|
dest: /usr/local/bin/
|
|
|
|
remote_src: yes
|
|
|
|
become: true
|
|
|
|
|
|
|
|
- name: Ensure packer is executable
|
|
|
|
ansible.builtin.file:
|
|
|
|
path: /usr/local/bin/packer
|
|
|
|
mode: '0755'
|
|
|
|
owner: root
|
|
|
|
group: root
|
|
|
|
become: true
|
|
|
|
|
|
|
|
- name: Create output directory for Packer images
|
|
|
|
ansible.builtin.file:
|
|
|
|
path: "{{ image_output_dir }}"
|
|
|
|
state: directory
|
|
|
|
mode: '0755'
|
|
|
|
become: true
|
|
|
|
|
|
|
|
- name: Create HTTP directory inside output dir for preseed.cfg
|
|
|
|
ansible.builtin.file:
|
|
|
|
path: "{{ image_output_dir }}/http"
|
|
|
|
state: directory
|
|
|
|
mode: '0755'
|
|
|
|
become: true
|
|
|
|
|
|
|
|
- name: Copy preseed.cfg template to HTTP directory
|
|
|
|
ansible.builtin.template:
|
|
|
|
src: preseed.cfg.j2
|
|
|
|
dest: "{{ image_output_dir }}/http/preseed.cfg"
|
|
|
|
mode: '0644'
|
|
|
|
|
2025-08-24 21:00:39 +02:00
|
|
|
- name: Remove old Debian ISO checksums file if exists
|
|
|
|
ansible.builtin.file:
|
|
|
|
path: /tmp/debian_sha256sums.txt
|
|
|
|
state: absent
|
|
|
|
|
|
|
|
- name: Download Debian ISO checksums
|
|
|
|
ansible.builtin.get_url:
|
|
|
|
url: "{{ debian_iso_checksum_url }}"
|
|
|
|
dest: /tmp/debian_sha256sums.txt
|
|
|
|
mode: '0644'
|
|
|
|
|
2025-07-14 23:57:35 +02:00
|
|
|
- name: Download Debian ISO checksums
|
|
|
|
ansible.builtin.get_url:
|
|
|
|
url: "{{ debian_iso_checksum_url }}"
|
|
|
|
dest: /tmp/debian_sha256sums.txt
|
|
|
|
mode: '0644'
|
|
|
|
|
2025-08-24 21:00:39 +02:00
|
|
|
- name: Debug - show checksum file content (with special chars visible)
|
|
|
|
ansible.builtin.shell: cat -A /tmp/debian_sha256sums.txt
|
|
|
|
register: checksum_file_content
|
|
|
|
changed_when: false
|
|
|
|
|
|
|
|
- debug:
|
|
|
|
var: checksum_file_content.stdout_lines
|
|
|
|
|
|
|
|
- name: Debug - show variable value
|
|
|
|
debug:
|
|
|
|
var: debian_iso_filename
|
|
|
|
|
2025-07-14 23:57:35 +02:00
|
|
|
- name: Extract checksum for ISO
|
|
|
|
ansible.builtin.shell: |
|
2025-08-24 21:00:39 +02:00
|
|
|
awk '{gsub(/\r/, ""); if ($2 == "{{ debian_iso_filename }}") {print $1; exit}}' /tmp/debian_sha256sums.txt
|
|
|
|
args:
|
|
|
|
executable: /bin/bash
|
2025-07-14 23:57:35 +02:00
|
|
|
register: debian_iso_checksum_result
|
|
|
|
changed_when: false
|
|
|
|
|
2025-08-24 21:00:39 +02:00
|
|
|
- name: Fail if checksum not found
|
|
|
|
ansible.builtin.fail:
|
|
|
|
msg: "Could not find SHA256 for {{ debian_iso_filename }} in {{ debian_iso_checksum_url }}"
|
|
|
|
when: (debian_iso_checksum_result.stdout | trim) == ""
|
|
|
|
|
2025-07-14 23:57:35 +02:00
|
|
|
- name: Set fact with full checksum string
|
|
|
|
ansible.builtin.set_fact:
|
2025-08-24 21:00:39 +02:00
|
|
|
debian_iso_checksum: "sha256:{{ debian_iso_checksum_result.stdout | trim }}"
|
2025-07-14 23:57:35 +02:00
|
|
|
|
|
|
|
- name: Template Packer HCL config
|
|
|
|
ansible.builtin.template:
|
|
|
|
src: debian_minimal.pkr.hcl.j2
|
|
|
|
dest: "{{ image_output_dir }}/debian_minimal.pkr.hcl"
|
|
|
|
|
|
|
|
- name: Run `packer init`
|
|
|
|
ansible.builtin.command: packer init debian_minimal.pkr.hcl
|
|
|
|
args:
|
|
|
|
chdir: "{{ image_output_dir }}"
|
|
|
|
|
|
|
|
- name: Run `packer build`
|
|
|
|
ansible.builtin.command: >
|
|
|
|
sh -c 'PACKER_LOG=1 PACKER_LOG_PATH=/tmp/packer.log packer build debian_minimal.pkr.hcl'
|
|
|
|
args:
|
|
|
|
chdir: "{{ image_output_dir }}"
|
|
|
|
|
|
|
|
- name: Copy built image to role files directory
|
|
|
|
ansible.builtin.copy:
|
|
|
|
src: "{{ image_output_dir }}/debian-minimal/debian-minimal.qcow2"
|
|
|
|
dest: "{{ role_path }}/files/debian-minimal.qcow2"
|
|
|
|
remote_src: yes
|
|
|
|
become: true
|