# file: NERD_Debian_Exercise.pkr.hcl packer { required_plugins { vmware = { version = ">= 1.1.0" source = "github.com/hashicorp/vmware" } virtualbox = { version = ">= 1.1.1" source = "github.com/hashicorp/virtualbox" } qemu = { version = ">= 1.1.1" source = "github.com/hashicorp/qemu" } } } variable "no_proxy" { type = string default = "${env("no_proxy")}" } locals { name = "NERD-Debian-Exercise" version = "TIMESTAMP" build_directory = "build" boot_command = ["install preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg debian-installer=en_US.UTF-8 auto locale=en_US.UTF-8 kbd-chooser/method=us keyboard-configuration/xkb-keymap=us netcfg/get_hostname={{ .Name }} netcfg/get_domain=solve.me fb=false debconf/frontend=noninteractive console-setup/ask_detect=false console-keymaps-at/keymap=us grub-installer/bootdev=default "] build_timestamp = "timestamp()" http_directory = "${path.root}/http" ssh_user = "nerd" ssh_password = "dvop2025" cpus = "4" disk_size = "16384" memory = "1024" iso_checksum = "04396d12b0f377958a070c38a923c227832fa3b3e18ddc013936ecf492e9fbb3" iso_name = "debian-12.8.0-amd64-netinst.iso" mirror = "http://cdimage.debian.org/cdimage/archive" mirror_directory = "12.8.0/amd64/iso-cd" } source "virtualbox-iso" "primary" { boot_command = "${local.boot_command}" boot_wait = "5s" cpus = "${local.cpus}" disk_size = "${local.disk_size}" guest_additions_path = "VBoxGuestAdditions_{{ .Version }}.iso" guest_additions_url = "" guest_os_type = "Debian_64" hard_drive_interface = "sata" http_directory = "${local.http_directory}" iso_checksum = "${local.iso_checksum}" iso_url = "${local.mirror}/${local.mirror_directory}/${local.iso_name}" memory = "${local.memory}" output_directory = "${local.build_directory}/packer-${local.name}-virtualbox" ssh_password = "${local.ssh_password}" ssh_port = 22 ssh_timeout = "10000s" ssh_username = "${local.ssh_user}" virtualbox_version_file = ".vbox_version" vm_name = "${local.name}" } source "vmware-iso" "primary" { boot_command = "${local.boot_command}" boot_wait = "5s" cpus = "${local.cpus}" disk_size = "${local.disk_size}" guest_os_type = "debian12-64" http_directory = "${local.http_directory}" iso_checksum = "${local.iso_checksum}" iso_url = "${local.mirror}/${local.mirror_directory}/${local.iso_name}" memory = "${local.memory}" output_directory = "${local.build_directory}/packer-${local.name}-vmware" ssh_password = "${local.ssh_password}" ssh_port = 22 ssh_timeout = "10000s" ssh_username = "${local.ssh_user}" vm_name = "${local.name}" } source "qemu" "primary" { # This source was not tested. iso_url = "${local.mirror}/${local.mirror_directory}/${local.iso_name}" iso_checksum = "${local.iso_checksum}" output_directory = "${local.build_directory}/packer-${local.name}-qemu" disk_size = "${local.disk_size}" cpus = "${local.cpus}" memory = "${local.memory}" format = "qcow2" # accelerator = "kvm" http_directory = "${local.http_directory}" ssh_username = "${local.ssh_user}" ssh_password = "${local.ssh_password}" ssh_timeout = "10000s" vm_name = "${local.name}" net_device = "virtio-net" disk_interface = "virtio" boot_wait = "5s" boot_command = "${local.boot_command}" use_default_display = true } source "null" "local" { communicator = "none" } source "null" "wsl" { communicator = "none" } build { sources = ["source.virtualbox-iso.primary", "source.vmware-iso.primary", "source.qemu.primary", "source.null.local", "source.null.wsl"] provisioner "file" { only = ["virtualbox-iso.primary", "vmware-iso.primary", "qemu.primary"] source = "${path.root}/scripts/bootstrap.sh" destination = "/home/${local.ssh_user}/bootstrap.sh" } provisioner "shell" { only = ["virtualbox-iso.primary", "vmware-iso.primary", "qemu.primary"] inline = [ "echo '${local.ssh_password}' | sudo -S -E bash -x /home/${local.ssh_user}/bootstrap.sh ${source.name} ${source.type} /etc/facter/facts.d/nerd_packer.json" ] } provisioner "shell-local" { only = ["null.local", "null.wsl"] inline = [ "sudo bash -xc './scripts/bootstrap.sh ${source.name} ${source.type} /etc/facter/facts.d/nerd_packer.json'" ] } provisioner "file" { only = ["virtualbox-iso.primary", "vmware-iso.primary", "qemu.primary"] source = "${path.root}/puppet" destination = "/home/${local.ssh_user}/" } provisioner "shell" { only = ["virtualbox-iso.primary", "vmware-iso.primary", "qemu.primary"] inline = [ "echo '${local.ssh_password}' | sudo -S -E bash -xc 'r10k puppetfile install --puppetfile=/home/${local.ssh_user}/puppet/Puppetfile --moduledir=/home/${local.ssh_user}/puppet/modules; puppet apply /home/${local.ssh_user}/puppet/site.pp --modulepath /home/${local.ssh_user}/puppet/modules; puppet apply /home/${local.ssh_user}/puppet/site.pp --modulepath /home/${local.ssh_user}/puppet/modules'" ] } provisioner "shell-local" { only = ["null.local", "null.wsl"] inline = [ "sudo -S -E bash -xc 'r10k puppetfile install --puppetfile=puppet/Puppetfile --moduledir=puppet/modules; puppet apply puppet/site.pp --modulepath puppet/modules; puppet apply puppet/site.pp --modulepath puppet/modules'" ] } }