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.
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
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