Terraform Proxmox Provider
Liens utiles :
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 |