TPTito Pinardo Gutiérrez
← Artículos
English

Terraform y Proxmox: un cambio de claves SSH que iba a destruir cuatro contenedores

Quería añadir la clave SSH del portátil a todos los contenedores desde una lista común. El plan dijo «4 to add, 4 to destroy». Entre ellos, la mensajería con toda su base de datos y la puerta pública de las webs.

  • Terraform
  • Proxmox VE

El cambio

Cada fichero de contenedor repetía su lista de claves de administración. Lo lógico era centralizarla en un local de Terraform y que todos la usaran. Un cambio de una línea.

locals {
  admin_ssh_keys = [var.key_pc, var.key_portatil]
}
# y en cada contenedor:
user_account { keys = local.admin_ssh_keys }

Lo que dijo el plan

terraform plan respondió con 4 recursos para crear y 4 para destruir. En el proveedor bpg/proxmox, las claves de la cuenta del contenedor solo se aplican al crearlo: cualquier cambio en ese campo obliga a recrear el contenedor entero.

Recrear la mensajería habría borrado sus mensajes y la identidad cifrada de sus bots. Recrear el proxy habría tumbado todas las webs.

Qué se hizo

  • No aplicar ese plan.
  • Añadir la clave nueva a mano en los contenedores que ya existían (en su authorized_keys, a través del hipervisor).
  • Dejar la lista común en el código para los contenedores que se creen desde ahora, y comprobar que el plan sobre los existentes quedaba sin cambios.

Primo hermano: renombrar un recurso

Lo mismo pasa al renombrar un recurso en el código: para Terraform es otro recurso y quiere destruir el viejo. Antes hay que moverlo en el estado (terraform state mv o un bloque moved) y comprobar que el plan sale vacío.