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.