web-dev-qa-db-fra.com

Carte dans une carte dans Terraform Variables

Est-ce que quelqu'un sait s'il est possible avec éventuellement des snipits de code représentant si je peux créer une variable de carte dans une variable de carte dans les variables TerraForm?

variable "var" {
  type = map
  default = {
    firstchoice = {
      firstAChoice ="foo"
      firstBChoice = "bar"
    }
    secondchoice = {
      secondAChoice = "foobar"
      secondBChoice = "barfoo"
    }
  }
}

Si quelqu'un a un aperçu de la question de savoir si cela est possible ou toute documentation qui élabore ce serait formidable.

7
IsaacD

Oui, il est possible d'avoir une variable de carte en tant que valeur de la carte variable de la carte. Votre variable a juste besoin d'une indentation droite. Je mettant également des moyens d'accéder à cette variable.

variable "var" {
  default = {
    firstchoice = {
      firstAChoice = "foo"
      firstBChoice = "bar"
    }

    secondchoice = {
      secondAChoice = "foobar"
      secondBChoice = "barfoo"
    }
  }
}

Pour accéder à une valeur de carte complète d'une clé de carte firstchoice, vous pouvez essayer de suivre

value = "${var.var["firstchoice"]}"

output:
{
  firstAChoice = foo
  firstBChoice = bar
}

Pour accéder à une clé spécifique de cette clé de carte (exemple firstAChoice), vous pouvez essayer

value = "${lookup(var.var["firstchoice"],"firstAChoice")}"

output: foo
3
Avichal Badaya

Cette syntaxe serait-elle possible? $ {var.var [firstchoice [firstachoice]]}

Avec TerraForm 0.12+ Les blocs imbriqués sont pris en charge de manière transparente. Extension de la réponse de @avichal Badaya pour l'expliquer à l'aide d'un exemple:

# Nested Variable

variable "test" {
  default = {
    firstchoice = {
      firstAChoice = "foo"
      firstBChoice = "bar"
    }

    secondchoice = {
      secondAChoice = "foobar"
      secondBChoice = "barfoo"
    }

    thirdchoice = {
      thirdAChoice = {
          thirdBChoice = {
              thirdKey = "thirdValue"
        }
      }
    }
  }
}


# Outputs

output "firstchoice" {
  value = var.test["firstchoice"]
}

output "FirstAChoice" {
  value = var.test["firstchoice"]["firstAChoice"]
}

output "thirdKey" {
  value = var.test["thirdchoice"]["thirdAChoice"]["thirdBChoice"]["thirdKey"]
}

En appliquant ce qui précède, vous pouvez vérifier que Terraform Map Narding est maintenant assez puissant et cela facilite beaucoup de choses.

# Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

# Outputs:

firstchoice = {
  "firstAChoice" = "foo"
  "firstBChoice" = "bar"
}

thirdKey = thirdValue 

Pour des structures plus complexes et des types de valeur riche, voir HASHICORP TERAFORM 0.12 Aperçu: Types de valeur riche

2
Amit Yadav