web-dev-qa-db-fra.com

Décodage de la chaîne JSON en carte terraform

J'utilise source de données HTTP pour récupérer les données d'un service interne. Le service renvoie des données JSON.

Je ne peux pas interpoler les données JSON retournées et y rechercher des données.

Par exemple:

module A

data "http" "json_data" {
    url = "http://myservice/jsondata"

    # Optional request headers
    request_headers {
       "Accept" = "application/json"
    }
}

output "json_data_key" {
    value = "${lookup(data.http.json_data.body, "mykey")}"
}

main.tf

provider "aws" {
   region = "${var.region}"
   version = "~> 0.1"
}

module "moduleA" {
   source = "../../../terraform-modules/moduleA"
}

resource "aws_instance" "example" {
    AMI = "AMI-2757f631"
    instance_type = "${module.moduleA.json_data_key}"
}

La fonction de recherche ne parviendra pas à extraire la clé dans les données JSON.

Existe-t-il un moyen de décoder les données JSON en une carte terraform?

10
Ofer Velich

Ok, il semble donc que la façon de procéder consiste à utiliser les données externes, car elle renvoie une carte à partir d'une réponse json. https://www.terraform.io/docs/providers/external/data_source.html

version terraform v0.10.6

5
Ofer Velich
data "external" "json" {
  program = ["echo", "${var.json}"]
}

output "map" {
  value = "${data.external.json.result}"
}
15
victor m

Depuis la version 0.12 de Terraform, vous pouvez utiliser la fonction jsondecode pour décoder json en une carte Terraform. Plus de détails sur: https://www.terraform.io/docs/configuration/functions/jsondecode.html

exemple de la page ci-dessus:

> jsondecode("{\"hello\": \"world\"}")
{
  "hello" = "world"
}
> jsondecode("true")
true
1
mlysiu