DVOP2025_Exercise/NERD_Debian_Exercise.pkr.hcl
2025-02-21 16:54:41 +09:00

150 lines
5.8 KiB
HCL

# 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 = ["<esc><wait>install <wait> preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg <wait>debian-installer=en_US.UTF-8 <wait>auto <wait>locale=en_US.UTF-8 <wait>kbd-chooser/method=us <wait>keyboard-configuration/xkb-keymap=us <wait>netcfg/get_hostname={{ .Name }} <wait>netcfg/get_domain=solve.me <wait>fb=false <wait>debconf/frontend=noninteractive <wait>console-setup/ask_detect=false <wait>console-keymaps-at/keymap=us <wait>grub-installer/bootdev=default <wait><enter><wait>"]
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'"
]
}
}