150 lines
5.8 KiB
HCL
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'"
|
|
]
|
|
}
|
|
}
|
|
|