Files
hcornet ee0a1766f4
Terraform - plan / plan (push) Failing after 6s
first
2026-09-16 10:16:01 +02:00

125 lines
3.2 KiB
Terraform

resource "proxmox_virtual_environment_download_file" "ubuntu_cloud_image" {
content_type = "import"
datastore_id = var.image_datastore_id
node_name = var.pve_node
url = var.ubuntu_image_url
file_name = var.ubuntu_image_file_name
checksum = var.ubuntu_image_checksum
checksum_algorithm = var.ubuntu_image_checksum == null ? null : var.ubuntu_image_checksum_algorithm
# L'image n'est pas retéléchargée à chaque apply, mais un fichier déjà
# présent et non géré par Terraform est repris plutôt que de faire échouer le plan.
overwrite = false
overwrite_unmanaged = true
upload_timeout = 1800
}
resource "proxmox_virtual_environment_vm" "serveur" {
name = var.vm_hostname
description = "Serveur Ubuntu - gere par Terraform, ne pas modifier a la main"
tags = ["terraform", "ubuntu2404"]
node_name = var.pve_node
vm_id = var.vm_id
on_boot = true
started = true
stop_on_destroy = true
# i440fx et non q35 : sur q35, Proxmox presente le lecteur cloud-init (ide2)
# via AHCI, que le noyau de l'image genericcloud ne detecte pas. ds-identify
# ne trouve alors aucune source NoCloud et desactive cloud-init en silence.
machine = "pc"
bios = "seabios"
scsi_hardware = "virtio-scsi-single"
boot_order = ["scsi0"]
operating_system {
type = "l26"
}
agent {
enabled = true
trim = true
}
cpu {
cores = var.vm_cores
type = "host"
}
memory {
dedicated = var.vm_memory
}
disk {
datastore_id = var.vm_datastore_id
import_from = proxmox_virtual_environment_download_file.ubuntu_cloud_image.id
interface = "scsi0"
size = var.vm_disk_size
file_format = "qcow2"
discard = "on"
iothread = true
ssd = true
}
network_device {
bridge = var.vm_bridge
model = "virtio"
}
# Console série : permet un « qm terminal 120 » depuis le nœud si le réseau
# de la VM est cassé, sans ouvrir de service supplémentaire.
serial_device {}
initialization {
datastore_id = var.vm_datastore_id
interface = "ide2"
dns {
domain = var.dns_domain
servers = var.dns_servers
}
ip_config {
ipv4 {
address = "${var.vm_ipv4_address}/${var.vm_ipv4_prefix}"
gateway = var.vm_ipv4_gateway
}
}
user_data_file_id = proxmox_virtual_environment_file.user_data.id
}
lifecycle {
# Proxmox renvoie un type de machine versionné (pc-i440fx-11.0+pve2) et
# réordonne le boot : sans cela, chaque plan proposerait une modification.
ignore_changes = [
machine,
boot_order,
]
}
}
resource "local_file" "ansible_inventory" {
filename = coalesce(var.ansible_inventory_path, "generated/${var.vm_hostname}-inventory.yml")
file_permission = "0644"
content = yamlencode({
all = {
children = {
(var.ansible_group) = {
hosts = {
(var.vm_hostname) = {
ansible_host = var.vm_ipv4_address
ansible_user = var.ansible_remote_user
}
}
}
}
}
})
depends_on = [proxmox_virtual_environment_vm.serveur]
}