“Salida de valor múltiple de Terraform”
Creo múltiples recursos de Digital Ocean Droplet (VM) utilizando Terraform (TF) y configuro cada VM con una contraseña de cadena aleatoria de un recurso común de TF utilizando el aprovisionamiento remoto.
Recurso “digitalocean_droplet” “testvm” {
count = var.count_of_droplets
image = “ubuntu-20-04-x64”
name = “testvm-${count.index}”
region = “nyc3”
size = “s-1vcpu-1gb”
ssh_keys = [data.digitalocean_ssh_keys.keys.ssh_keys[0].id]
Provisioner “remote-exec” {
connection {
type = "ssh"
user = "root"
private_key = file("${var.my_ssh_private_key}")
host = self.ipv4_address
}
inline = [
"echo '${var.os_user}:${random_string.password[count.index].result}' | sudo chpasswd",
"sed -i '/PermitRootLogin/c PermitRootLogin yes' /etc/ssh/sshd_config",
"systemctl restart sshd"
]
}
tags = [“dev”]
}
Y el generador de contraseñas aleatorias:
Recurso “string aleatorio” “password” {
cuenta = var.count_of_droplets
longitud = 16
especial = verdadero
override_special = “_%@”
}
Imprimo la dirección IP pública de cada VM creada junto con el nombre de la VM mediante la salida de Terraform:
Salida “direcciones_ip_droplet” {
valor = {
para droplet en digitalocean_droplet.testvm :
droplet.name => droplet.ipv4_address
}
}
Salida:
direcciones_ip_droplet = {
– testvm-0 = “1.1.1.1”
– testvm-1 = “2.2.2.2”
}
¿Cómo puedo agregar la contraseña generada a la salida anterior? Como:
datos de droplets = {
testvm-0 = “1.1.1.1” = “5j1dYBZzqDd30yhJ”
testvm-1 = “2.2.2.2” = “6R%wj4zebwd9FiAt”
}
davy.ai
Para agregar la contraseña generada a la salida de Terraform, puede modificar el bloque de salida existente para incluir el recurso
random_string.password
:El bloque de salida ahora devuelve un mapa de nombres de gota de agua, donde cada nombre de gota de agua se asigna a un mapa que contiene la dirección IP y la contraseña para esa gota de agua. El atributo
droplet.count_index
se utiliza para acceder al índice correspondiente del recursorandom_string.password
para cada gota de agua.