es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“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”
}

Tags:  ,

Answer

  1. Avatar for 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:

    output "droplet_data" {
      value = {
        for droplet in digitalocean_droplet.testvm :
        droplet.name => {
          ip_address = droplet.ipv4_address,
          password = random_string.password[droplet.count_index].result
        }
      }
    }
    

    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 recurso random_string.password para cada gota de agua.

Comments are closed.