Add Cloud-Init automation with Tailscale

The commit rephrases the README to focus on Cloud-Init setup and removes
unused Ansible code, making Tailscale configuration automatic.

Subject line: Replace Ansible with automated Cloud-Init configuration

Body: Refactors infrastructure bootstrapping to leverage Cloud-Init
instead of Ansible for initial VM setup, particularly with respect to
Tailscale installation and authentication.

This simplifies the architecture by: - Removing manual post-provisioning
Ansible steps - Automating Tailscale setup via Cloud-Init - Updating
documentation to reflect new workflow
This commit is contained in:
darnodo
2025-07-03 09:28:09 +02:00
parent 26d97cbcfb
commit 7cd93ba978
23 changed files with 119 additions and 797 deletions

View File

@@ -7,7 +7,7 @@ data "proxmox_virtual_environment_vms" "templates" {
tags = ["template"]
}
# 2. Mapping des templates et préparation des données pour Ansible
# 2. Mapping des templates
locals {
# OS supportés
supported_os = toset(["ubuntu", "debian", "alpine", "rocky", "centos"])
@@ -18,18 +18,6 @@ locals {
one(setintersection(local.supported_os, template.tags)) => template
if length(setintersection(local.supported_os, template.tags)) > 0
}
ansible_vms = {
for key, vm in proxmox_virtual_environment_vm.vms : key => {
# Données issues de la ressource VM créée
name = vm.name
proxmox_node = vm.node_name
# Données issues de vos variables d'entrée
ip_address = var.virtual_machines[key].ip
os_distro = var.virtual_machines[key].os
}
}
}
# 3. Création des machines virtuelles
@@ -87,8 +75,7 @@ resource "proxmox_virtual_environment_vm" "vms" {
vm_id = local.template_map[each.value.os].vm_id
}
# On utilise le bloc 'initialization' pour configurer directement
# le réseau et l'utilisateur, sans fichier user_data externe.
# On utilise le bloc 'initialization' pour configurer Cloud-Init
initialization {
# Configuration IP
ip_config {
@@ -98,15 +85,12 @@ resource "proxmox_virtual_environment_vm" "vms" {
}
}
# Configuration utilisateur
user_account {
username = lookup(each.value, "username", var.default_vm_user)
keys = [file(var.admin_ssh_public_key_path)]
}
# Données Cloud-Init via le fichier de template
user_data_file_id = proxmox_virtual_environment_file.cloud_config[each.key].id
}
}
# 5. Outputs pour récupérer les informations des VMs
# 4. Outputs pour récupérer les informations des VMs
output "vm_info" {
description = "Informations des machines virtuelles créées"
value = {
@@ -119,14 +103,3 @@ output "vm_info" {
}
}
}
# Génération automatique de l'inventaire Ansible
resource "local_file" "ansible_inventory" {
filename = "${path.module}/../../ansible/inventory/01_lab_hosts.yml"
content = templatefile("${path.module}/templates/inventory.tftpl", {
vms = local.ansible_vms
})
depends_on = [proxmox_virtual_environment_vm.vms]
}