将 JSON 文件作为环境变量中的字符串传递给 terraform 脚本中的作曲家气流

问题描述 投票:0回答:2

我正在从 terraform 创建一个作曲家,我想在其中传递 json 作为输入变量

Terraform 代码:

software_config{
  env_variables{
   AIRFLOW_VAR_MYJSON ="{'__comment1__': 'This the global section', 'project_id':'testproject', 'gce_zone':'us-east1-c', 'gce_region':'us-east1','networkname':'vpc1', 'subnetwork':'https://www.googleapis.com/compute/v1/projects/testproject/regions/us-east1/subnetworks/subnet1'}"
}
}

我正在尝试读取 DAG 中 AIRFLOW_VAR_MYJSON 的值,但它不起作用,因为该值不被识别为 JSON。 我尝试转换它,然后使用以下代码反序列化它:

JSONList = Variable.get("MYJSON")
jsonvar = json.dumps(JSONList)
setting_var = Variable.set("settings", jsonvar)
dag_config = Variable.get("settings", deserialize_json=True)

但它不起作用。

我也尝试过使用

dag_config =json.loads(jsonvar)

然后将值读取为

project_id = dag_config["project_id"]

但我收到错误:“字符串索引必须是整数”

请提出解决此问题的方法。

注意:我知道 gcloud 命令可以从 json 文件设置变量,但这在我的情况下不起作用,因为该项目位于 VPC 中,并且 kubernetes 集群给出超时或握手错误,所以我排除了使用此选项

airflow google-cloud-composer terraform-provider-gcp
2个回答
0
投票

有效的 JSON 只能是

"
不能是
'
。尝试切换引号。

值可以是双引号中的字符串,或者数字,或者 true 或 false 或 null,或者对象或数组。

software_config{
  env_variables{
   AIRFLOW_VAR_MYJSON ="{\"__comment1__\": \"This the global section\", \"project_id\":\"testproject\", \"gce_zone\":\"us-east1-c\", \"gce_region\":\"us-east1\",\"networkname\":\"vpc1\", \"subnetwork\":\"https://www.googleapis.com/compute/v1/projects/testproject/regions/us-east1/subnetworks/subnet1\"}"
}
}

或者更好一点的方法:

software_config {
  env_variables {
    AIRFLOW_VAR_MYJSON = jsonencode({
      "__comment1__" = "This the global section",
      "project_id" = "testproject",
      "gce_zone" = "us-east1-c",
      "gce_region" = "us-east1",
      "networkname" = "vpc1",
      "subnetwork" = "https://www.googleapis.com/compute/v1/projects/testproject/regions/us-east1/subnetworks/subnet1",
    })
  }
}


0
投票

你能解决这个问题吗? – 乌尔瓦·沙比尔

© www.soinside.com 2019 - 2024. All rights reserved.