Marvin Pascale

[B.Log]

17 Aprile 2021

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: