Proxmox Ansible Terraform
Questa settimana ho visto un webinar proposto da “Frankfurt HashiCorp User Group”. L’intero talk è stato molto interessante e ha fornito più di uno spunto di riflessione.
Lo speaker ha prima creato un’infrastruttura Proxmox, in seguito ha configurato un template Ubuntu 20.04 pronto per cloud-init con Ansible ed infine ha realizzato un’infrastruttura con Terraform.
Partendo dal codice che ha rilasciato sul suo profilo Github ho realizzato a mia volta un piccolo progetto per fruttare queste tecnologie.
Le tecnologie
Proxmox
Ho parlato già più volte di Proxmox (andate a leggere i post a riguardo) ed è ad oggi il mio ambiente di virtualizzazione preferito.
Ansible e Terraform
Questi due strumenti, di cui ho già parlato, offrono importanti armi contro la noia e la ripetitività.
Terraform permette di mettere in piedi intere infrastrutture in modo agnostico.
Andible permette di configurare, monitorare e manipolare istanze senza bisogno di un agent.
Il progetto
Prerequisiti
Chiaramente dobbiamo avere un’installazione di Proxmox funzionante, un pool chiamato Terraform e il template LXC di Debian 10 già scaricato.
Il codice sarà messo a disposizione sul mio Github .
Ansible
Spostandoci nella cartella ansible troveremo tutto il necessario per create il template di Ubuntu 20.04 LTS. Dopo aver configurato le variabili e l’inventory sarà possibile avviare il playbook:
# ansible-playbook playbook-setup-proxmox.yml
Al termine avremo a disposizione un template pronto per il prossimo step.
Terraform
Spostandoci nella cartella terraform avremo a disposizione due moduli: il primo per la creazione di container LXC (lxc-container) ed il secondo per la creazione di macchine virtuali (pve-vm).
Le variabili
variable "pm_api_url" {
default = "https://192.168.1.15:8006/api2/json"
}
variable "pm_user" {
default = "root@pam"
}
variable "pm_password" {
default = ""
sensitive = true
}
variable "target_node" {
default = "proxmox"
}
variable "target_lan" {
default = "192.168.1"
}
variable "target_gw" {
default = "192.168.1.1"
}
Creiamo un file terraform.tfvars e inseriamo la password dell’utente scelto
pm_password = "SuperSecretPWD"
nel main.tf ho inserito un esempio per la creazione di un container LXC e uno per la creazione di una VM.
module "ubuntu" {
source = "./pve-vm"
vmid = "201"
hostname = "ubuntu01"
cores = 2
memory = 512
target_br = "vmbr0"
target_node = "gamora"
storage = "qnap_nfs"
pm_api_url = var.pm_api_url
pm_user = var.pm_user
pm_password = var.pm_password
}
module "web-server" {
source = "./lxc-container"
vmid = "202"
os_image_id = "bk:vztmpl/debian-10-standard_10.5-1_amd64.tar.gz"
cores = 2
memory = 512
storage_size = "10GB"
hostname = "lxc-web-server"
target_br = "vmbr0"
target_node = "gamora"
storage = "qnap_nfs"
pm_api_url = var.pm_api_url
pm_user = var.pm_user
pm_password = var.pm_password
}
Impostiamo i parametri corretti e diamo il via alla creazione:
# terraform apply
Se tutto va come dovrebbe ora dovreste avere una vm e un container in più. L’indirizzo ip, assegnato in modo statico, è dato dal target_lan + l’id dell’istanza es: 192.168.1.201.
Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.
Risorse: