From b4c05a9b76cd92745ef04badb88912a90ab33e5e Mon Sep 17 00:00:00 2001 From: Michael Balsillie Date: Tue, 8 Sep 2026 12:31:12 -0400 Subject: [PATCH] Archlinux up --- proxmox/archlinux/files/ladmin@archlinux.pub | 1 + proxmox/archlinux/locals.tf | 1 + proxmox/archlinux/providers.tf | 9 +++- proxmox/archlinux/resources_pass.tf | 5 ++ proxmox/archlinux/resources_proxmox.tf | 57 +++++++++----------- proxmox/archlinux/resources_random.tf | 13 +++++ proxmox/archlinux/terraform.tf | 8 +++ proxmox/archlinux/variables.tf | 4 ++ proxmox/archlinux/vars_archlinux.auto.tfvars | 3 +- 9 files changed, 66 insertions(+), 35 deletions(-) create mode 100644 proxmox/archlinux/files/ladmin@archlinux.pub create mode 100644 proxmox/archlinux/resources_pass.tf create mode 100644 proxmox/archlinux/resources_random.tf diff --git a/proxmox/archlinux/files/ladmin@archlinux.pub b/proxmox/archlinux/files/ladmin@archlinux.pub new file mode 100644 index 0000000..db4a7f9 --- /dev/null +++ b/proxmox/archlinux/files/ladmin@archlinux.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGH9QqREEaJkDbOGOdKMBiKn9Kq/tgiz6XL9WXZWI/R+ ladmin@archlinux \ No newline at end of file diff --git a/proxmox/archlinux/locals.tf b/proxmox/archlinux/locals.tf index 48afa78..018305f 100644 --- a/proxmox/archlinux/locals.tf +++ b/proxmox/archlinux/locals.tf @@ -1,3 +1,4 @@ locals { arch_qcow_hash = split(" ", data.http.arch_qcow_hash.response_body)[0] + arch_public_key = file("${path.root}/files/ladmin@archlinux.pub") } \ No newline at end of file diff --git a/proxmox/archlinux/providers.tf b/proxmox/archlinux/providers.tf index b2af1a5..b991a5e 100644 --- a/proxmox/archlinux/providers.tf +++ b/proxmox/archlinux/providers.tf @@ -25,4 +25,11 @@ provider "proxmox" { provider "dns" {} -provider "http" {} \ No newline at end of file +provider "http" {} + +provider "random" {} + +provider "pass" { + refresh_store = false + store_dir = pathexpand("~/.config/pass") +} \ No newline at end of file diff --git a/proxmox/archlinux/resources_pass.tf b/proxmox/archlinux/resources_pass.tf new file mode 100644 index 0000000..739109d --- /dev/null +++ b/proxmox/archlinux/resources_pass.tf @@ -0,0 +1,5 @@ +resource "pass_password" "arch_password" { + for_each = toset([for key,value in var.vm_guests: key]) + password = random_password.this[each.value].result + path = "ansible/become-passwords/${each.value}" +} \ No newline at end of file diff --git a/proxmox/archlinux/resources_proxmox.tf b/proxmox/archlinux/resources_proxmox.tf index c5eae48..72820b6 100644 --- a/proxmox/archlinux/resources_proxmox.tf +++ b/proxmox/archlinux/resources_proxmox.tf @@ -13,13 +13,13 @@ resource "proxmox_download_file" "arch_qcow" { verify = true } -resource "proxmox_virtual_environment_pool" "archlinux" { +resource "proxmox_virtual_environment_pool" "this" { comment = "Container hosts and download client" pool_id = "archlinux" } -resource "proxmox_virtual_environment_vm" "container_hosts" { - for_each = { for key, value in var.vm_guests: key => value if value.role == "container_host" } +resource "proxmox_virtual_environment_vm" "this" { + for_each = var.vm_guests acpi = false agent { enabled = true @@ -53,7 +53,6 @@ resource "proxmox_virtual_environment_vm" "container_hosts" { backup = true cache = "none" datastore_id = "local-lvm" - # path_in_datastore = "${each.key}_root.qcow2" discard = "ignore" file_format = "raw" file_id = proxmox_download_file.arch_qcow[each.value.host].id @@ -62,19 +61,21 @@ resource "proxmox_virtual_environment_vm" "container_hosts" { replicate = true size = 64 } - disk { - aio = "io_uring" - backup = true - cache = "none" - datastore_id = "local-lvm" - # path_in_datastore = "${each.key}_root.qcow2" - discard = "ignore" - file_format = "raw" - interface = "virtio1" - iothread = false - replicate = true - size = 128 - } + dynamic "disk" { + for_each = each.value.role == "container_host" ? [1] : [] + content { + aio = "io_uring" + backup = true + cache = "none" + datastore_id = "local-lvm" + discard = "ignore" + file_format = "raw" + interface = "virtio1" + iothread = false + replicate = true + size = 128 + } + } efi_disk { datastore_id = "local-lvm" file_format = "raw" @@ -105,9 +106,11 @@ resource "proxmox_virtual_environment_vm" "container_hosts" { } } user_account { - keys = [] - password = "" # FIX - username = "" # FIX + keys = [ + local.arch_public_key + ] + password = random_password.this[each.key].result + username = var.arch_username } } keyboard_layout = "en-us" @@ -133,7 +136,7 @@ resource "proxmox_virtual_environment_vm" "container_hosts" { operating_system { type = "l26" } - pool_id = proxmox_virtual_environment_pool.archlinux.pool_id + pool_id = proxmox_virtual_environment_pool.this.pool_id protection = false reboot = false reboot_after_update = true @@ -155,15 +158,3 @@ resource "proxmox_virtual_environment_vm" "container_hosts" { model = "i6300esb" } } - -# resource "proxmox_virtual_environment_vm" "download_clients" { -# for_each = { for key, value in var.vm_guests: key => value if value.role == "download_client" } -# acpi = false -# agent { -# enabled = true -# timeout = "10m" -# trim = false -# type = "virtio" -# } -# node_name = each.value.host -# } \ No newline at end of file diff --git a/proxmox/archlinux/resources_random.tf b/proxmox/archlinux/resources_random.tf new file mode 100644 index 0000000..ca01307 --- /dev/null +++ b/proxmox/archlinux/resources_random.tf @@ -0,0 +1,13 @@ +resource "random_password" "this" { + for_each = toset([for key,value in var.vm_guests: key]) + length = 16 + lower = true + min_lower = 1 + min_numeric = 1 + min_special = 1 + min_upper = 1 + numeric = true + override_special = "!@#%&?-_+" + special = true + upper = true +} \ No newline at end of file diff --git a/proxmox/archlinux/terraform.tf b/proxmox/archlinux/terraform.tf index 4cc457f..3ee70f2 100644 --- a/proxmox/archlinux/terraform.tf +++ b/proxmox/archlinux/terraform.tf @@ -14,6 +14,14 @@ terraform { source = "registry.terraform.io/hashicorp/http" version = ">= 3.6.1" } + random = { + source = "registry.terraform.io/hashicorp/random" + version = ">= 3.9.0" + } + pass = { + source = "registry.terraform.io/digipost/pass" + version = ">= 2.1.1" + } } backend "local" { diff --git a/proxmox/archlinux/variables.tf b/proxmox/archlinux/variables.tf index de0b5f3..78cdf02 100644 --- a/proxmox/archlinux/variables.tf +++ b/proxmox/archlinux/variables.tf @@ -44,4 +44,8 @@ variable "local_domain" { variable "arch_mirror" { type = string +} + +variable "arch_username" { + type = string } \ No newline at end of file diff --git a/proxmox/archlinux/vars_archlinux.auto.tfvars b/proxmox/archlinux/vars_archlinux.auto.tfvars index 93ac122..4ec38b3 100644 --- a/proxmox/archlinux/vars_archlinux.auto.tfvars +++ b/proxmox/archlinux/vars_archlinux.auto.tfvars @@ -1 +1,2 @@ -arch_mirror = "mirrors.kernel.org/archlinux" \ No newline at end of file +arch_mirror = "mirrors.kernel.org/archlinux" +arch_username = "ladmin" \ No newline at end of file