Terraform Proxmox Provider

Liens utiles :

Doc officielle du provider

D’autres exemples de config

Une fois l’utilisateur terraform créée sur Proxmox et le token de connexion récupéré, on peut passer à la partie de création des fichiers hcl Terraform.

Créer le répertoire

mkdir -p terraform/debian-12

A l’intérieur du répertoire debian-12 il faut créer 3 fichier, main.tf contenant la configuration de la VM, vars.tf pour les variables et outputs.tf pour récupérer les infos une fois la VM créée.

touch ~/terraform/debian-12/{main.tf,vars.tf,outputs.tf}

Contenu du fichier main.tf

 

terraform {
  required_providers {
    proxmox = {
      source  = "Telmate/proxmox"
      version = "3.0.1-rc1"
    }
  }
}

provider "proxmox" {
  pm_api_url      =  "https://proxmox-ip:8006/api2/json"
  pm_api_token_id = "yourtokenid"
  pm_api_token_secret = "yourtokensecret"
  pm_tls_insecure = true
}


resource "proxmox_vm_qemu" "proxmox" {


  name        = var.name
  vmid        = var.id
  target_node = var.target_node
  clone       = var.clone
  desc        = "VM clonée à partir de ${var.clone}"

  # VM System Settings
  agent = 1

  # CPU Configuration
  cores   = var.cores
  sockets = 1
  cpu     = "host"

  # Boot
  onboot   = false

  # Memory Configuration
  memory = var.memory

  # Network Configuration
  network {
    bridge = "vmbr1,tag=1000"
    model  = "virtio"
  }

  ipconfig0  = "ip=dhcp" 
  nameserver = var.dns
  searchdomain = var.name


  # Disk Configuration
  scsihw                 = "virtio-scsi-single"
  cloudinit_cdrom_storage = "vmdata"

  disks {
    scsi {
      scsi0 {
        disk {
          size     = var.disk
          storage  = "vmdata"
        }
      }
    }
  }

  # Cloud-Init Configuration
  os_type    = "cloud-init"
  ciuser     = var.user
  cipassword = var.password

  sshkeys = var.ssh_public_key

}

Contenu du fichier vars.tf

variable "ssh_public_key" {
  type    = string
  default = <<EOF
yoursshpublickey
EOF
}

variable "target_node" {
  type    = string
  default = "proxmox-node-name"
}

variable "dns" {
  type    = string
  default = "8.8.8.8,1.1.1.1"
}

variable "clone" {
  type    = string
  default = "cloudinit-debian"
}

variable "id" {
  type    = string
  default = "505"
}

variable "name" {
  type    = string
  default = "vm-debian12"
}

variable "cores" {
  type    = string
  default = "4"
}

variable "memory" {
  type    = string
  default = "4096"
}

variable "disk" {
  type    = string
  default = "20"
}


variable "user" {
  type    = string
  default = "linuxrnnk"
}

variable "password" {
  type    = string
  default = "YourSuperPassword"
}

Contenu du fichier outputs.tf

output "vm_ID" {
  description = "ID de la VM"
  value       = proxmox_vm_qemu.proxmox.vmid
}

output "vm_name" {
  description = "Nom de la VM"
  value       = proxmox_vm_qemu.proxmox.name
}

output "clone" {
  description = "Nom du template utilisé"
  value       = proxmox_vm_qemu.proxmox.clone
}

output "vm_IP" {
  description = "IP de la VM"
  value       = proxmox_vm_qemu.proxmox.ssh_host
}

Lancer Terraform

Initialisation

terraform init

Planification et vérifier si tout est OK

terraform plan

Démarrer la création

terraform apply