From 2d1792d0dd5e0687ddbb7d1240ba9fda716da8da Mon Sep 17 00:00:00 2001 From: fenix-gitea-admin Date: Tue, 26 Aug 2025 16:59:44 +0000 Subject: [PATCH 1/3] create cloud-init-vm.yaml.tftpl --- cloud-init-vm.yaml.tftpl | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 cloud-init-vm.yaml.tftpl diff --git a/cloud-init-vm.yaml.tftpl b/cloud-init-vm.yaml.tftpl new file mode 100644 index 0000000..d8b55d0 --- /dev/null +++ b/cloud-init-vm.yaml.tftpl @@ -0,0 +1,31 @@ +#cloud-config +package_update: true +packages: +%{ for pkg in each.value.extra_packages ~} + - ${pkg} +%{ endfor ~} + +users: +%{ if length(each.value.extra_users) > 0 ~} + +%{ for u in each.value.extra_users ~} +- name: ${u.name} + groups: [${join(", ", u.groups)}] + shell: /bin/bash + sudo: ALL=(ALL) NOPASSWD:ALL +%{ endfor ~} + +chpasswd: + list: | + %{ for u in each.value.extra_users ~} + ${u.name}:${u.password} + %{ endfor ~} + expire: false + +%{ endif ~} +runcmd: +%{ if length(each.value.extra_runcmd) > 0 ~} +%{ for cmd in each.value.extra_runcmd ~} + - ${cmd} +%{ endfor ~} +%{ endif ~} \ No newline at end of file From 084189f173a8e63d02b86d859831676d4ef4f832 Mon Sep 17 00:00:00 2001 From: fenix-gitea-admin Date: Tue, 26 Aug 2025 17:01:39 +0000 Subject: [PATCH 2/3] create cloud-init-base.yaml --- cloud-init-base.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 cloud-init-base.yaml diff --git a/cloud-init-base.yaml b/cloud-init-base.yaml new file mode 100644 index 0000000..db29864 --- /dev/null +++ b/cloud-init-base.yaml @@ -0,0 +1,20 @@ +locale: "pt_PT.UTF-8" +keyboard: + layout: "pt" + variant: "nodeadkeys" + +#cloud-config +users: + - default + +ssh_pwauth: true + +package_update: true +packages: + - qemu-guest-agent + - net-tools + - curl +runcmd: + - systemctl enable qemu-guest-agent + - systemctl start qemu-guest-agent + - echo "done" > /tmp/cloud-config.done \ No newline at end of file From b36eaf88db50a6f08020e282f7d6c07383291170 Mon Sep 17 00:00:00 2001 From: fenix-gitea-admin Date: Tue, 26 Aug 2025 17:02:22 +0000 Subject: [PATCH 3/3] Update proxmox.tf --- proxmox.tf | 100 ++++++++++++++++++++++++----------------------------- 1 file changed, 46 insertions(+), 54 deletions(-) diff --git a/proxmox.tf b/proxmox.tf index d62dff9..e121ff9 100644 --- a/proxmox.tf +++ b/proxmox.tf @@ -30,28 +30,7 @@ resource "proxmox_virtual_environment_file" "cloud_init_yaml" { source_raw { file_name = "user-data-cloud-config.yaml" - data = <<-EOF - locale: "pt_PT.UTF-8" - keyboard: - layout: "pt" - variant: "nodeadkeys" - - #cloud-config - users: - - default - - ssh_pwauth: true - - package_update: true - packages: - - qemu-guest-agent - - net-tools - - curl - runcmd: - - systemctl enable qemu-guest-agent - - systemctl start qemu-guest-agent - - echo "done" > /tmp/cloud-config.done - EOF + data = yamldecode(file("${path.module}/cloud-init-base.yaml")) } } @@ -59,47 +38,60 @@ resource "proxmox_virtual_environment_file" "cloud_init_yaml" { # Gerar um snippet cloud-init por VM resource "proxmox_virtual_environment_file" "vm_user_data" { - for_each = { for vm in var.proxmox_k8s_vms : vm.name => vm } + for_each = local.merged_cloudinit node_name = "fenix" datastore_id = "local-snippets" content_type = "snippets" source_raw { - file_name = "cloud-init-iac-k8s-${each.value.name}.yaml" - data = <<-EOF - #cloud-config - package_update: true - packages: - %{ for pkg in each.value.extra_packages ~} - - ${pkg} - %{ endfor ~} + file_name = "cloud-init-iac-k8s-${each.key}.yaml" + data = yamlencode(each.value) + } +} - users: - %{ if length(each.value.extra_users) > 0 ~} - - %{ for u in each.value.extra_users ~} - - name: ${u.name} - groups: [${join(", ", u.groups)}] - shell: /bin/bash - sudo: ALL=(ALL) NOPASSWD:ALL - %{ endfor ~} +locals { + # Lê o ficheiro base (que está no mesmo módulo) + base_cloudinit = yamldecode(file("${path.module}/cloud-init-base.yaml")) - chpasswd: - list: | - %{ for u in each.value.extra_users ~} - ${u.name}:${u.password} - %{ endfor ~} - expire: false + # Renderiza cada ficheiro por VM + vm_cloudinits = { + for vm in var.proxmox_k8s_vms : vm.name => yamldecode( + templatefile("${path.module}/cloud-init-vm.yaml.tftpl", { + hostname = vm.hostname + extra_packages = try(vm.extra_packages, []) + extra_users = try(vm.extra_users, []) + extra_runcmd = try(vm.extra_runcmd, []) + }) + ) + } - %{ endif ~} - runcmd: - %{ if length(each.value.extra_runcmd) > 0 ~} - %{ for cmd in each.value.extra_runcmd ~} - - ${cmd} - %{ endfor ~} - %{ endif ~} - EOF + # Função recursiva para deep merge + deep_merge = function("deep_merge", [map(string), map(string)], map(string), < local.deep_merge(local.base_cloudinit, vm_cfg) } }