我正在从 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 集群给出超时或握手错误,所以我排除了使用此选项
有效的 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",
})
}
}
你能解决这个问题吗? – 乌尔瓦·沙比尔