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.

Combinando la salida de un módulo de Terraform para pasarla a otro módulo.

Estoy creando subredes de Azure azurerm utilizando un módulo y tengo los siguientes resultados declarados en el módulo.

output "id" {
  description = "El ID de la Subred recién creada"
  value       = azurerm_subnet.subnet.id
}
output "name" {
  description = "El nombre de la Subred recién creada"
  value       = azurerm_subnet.subnet.name
}

output "address_prefixes" {
  description = "Los prefijos de dirección de la Subred recién creada"
  value       = azurerm_subnet.subnet.address_prefixes
}

Si, por ejemplo, he creado 2 subredes y quiero pasarlas juntas a otro módulo de Grupo de Seguridad de Red, ¿cómo puedo combinarlas? He intentado fusionarlas, concatenarlas (espera un conjunto y toset no parece ayudar) y usar zipmap, todo sin éxito. Cuando fusiono como se muestra a continuación:

output "subnets-combined" {
  value = merge(module.subnet_01,module.subnet_02)
}

El resultado solo contiene subnet_02, presumiblemente debido a la siguiente declaración de la documentación de Terraform:

Si más de un mapa u objeto dado define la misma clave o atributo, entonces el que está más tarde en la secuencia de argumentos tiene prioridad.

Esto me confunde ya que todos los valores de salida deberían ser distintos. ¿Cómo puedo resolver esto para crear un conjunto combinado de cualquier número de subredes a las que pueda hacer referencia por su nombre?

Tags:  

Answer

  1. Avatar for davy.ai

    Para combinar múltiples subredes creadas utilizando el módulo azurerm_subnet y pasarlas a otro módulo, puedes usar la función setproduct. Esta función creará un producto cruzado de todas las subredes, que luego se pueden pasar al módulo de NSG. Aquí tienes un ejemplo de cómo usarlo:

    output "subnets-combined" {
      value = setproduct(module.subnet_01.*.id, module.subnet_02.*.id)
    }
    

    Esto creará un conjunto de todas las posibles combinaciones de subredes del módulo.subnet_01 y módulo.subnet_02. Luego puedes hacer referencia a estas subredes por sus valores de ID en el módulo de NSG, de la siguiente manera:

    module "nsg" {
      subnet_ids = output.subnets-combined
    }
    

    Asegúrate de que la variable “subnet_ids” en el módulo de NSG esté definida como un conjunto, de la siguiente manera:

    variable "subnet_ids" {
      type = set(any)
    }
    

    De esta forma, puedes pasar cualquier número de subredes como un conjunto y hacer referencia a ellas en el módulo de NSG.

Comments are closed.