125 lines
3.2 KiB
Terraform
125 lines
3.2 KiB
Terraform
resource "proxmox_virtual_environment_download_file" "debian_cloud_image" {
|
|
content_type = "import"
|
|
datastore_id = var.image_datastore_id
|
|
node_name = var.pve_node
|
|
url = var.debian_image_url
|
|
file_name = var.debian_image_file_name
|
|
checksum = var.debian_image_checksum
|
|
checksum_algorithm = var.debian_image_checksum == null ? null : var.debian_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" "centreon" {
|
|
name = var.vm_hostname
|
|
description = "Serveur central Centreon - gere par Terraform, ne pas modifier a la main"
|
|
tags = ["terraform", "debian12", "centreon"]
|
|
|
|
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.debian_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 = {
|
|
centreon_central = {
|
|
hosts = {
|
|
(var.vm_hostname) = {
|
|
ansible_host = var.vm_ipv4_address
|
|
ansible_user = var.ansible_remote_user
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
depends_on = [proxmox_virtual_environment_vm.centreon]
|
|
}
|