我想使用terraform的外部数据源来标识某些AWS EC2实例:
data "external" "monitoring_instances" {
program = ["bash", "${path.module}/../bash/tf_datasource_monitoring.sh"]
query = {
env = var.env_stage
}
}
bash脚本使用AWS返回实例ID的列表。
但我一直收到这个Error: command "bash" produced invalid JSON: json: cannot unmarshal array into Go value of type string
我不明白我的脚本的STDOUT的预期语法对于terraform来说是什么来理解结果。
因此,让我们假设脚本应该返回3个实例ID i-1
、i-2
和i-3
。
返回给terraform的正确JSON语法是什么?
例如,不起作用的例子:
{
"instances": [
"i-1",
"i-2",
"i-3"
]
}
[
"i-1",
"i-2",
"i-3"
]
发布于 2021-11-25 12:46:57
这是provider-external
:https://github.com/hashicorp/terraform-provider-external/issues/2在Terraform中的一个已知问题。它是在一段时间前打开的,不幸的是,最新版本仍然存在(Terraformv1.011)。
您可能希望避免返回包含数组的JSON对象。
发布于 2022-10-12 03:50:10
在执行python脚本生成动态bigquery模式时,我也遇到了同样的问题,根据定义,这是一个JSON数组。
我通过将模式作为字符串值来实现包装器JSON来解决这个问题(请参阅下面的虚拟代码)。
# get_dynamic_bigquery_schema.py
import json
bigquery_schema = [
{"name": "int_field", "type": "INTEGER", "mode": "NULLABLE", "description": "int_field"},
{"name": "int_field_repeated", "type": "INTEGER", "mode": "REPEATED", "description": "int_field_repeated"}
]
wrapper_json = {'actual_output': str(json.dumps(bigquery_schema))}
print(json.dumps(wrapper_json))
然后我就可以在陆地上访问
# main.tf
data "external" "bigquery_schema" {
program = ["python", "${path.module}/get_dynamic_bigquery_schema.py"]
}
locals {
bigquery_schema= data.external.bigquery_schema.result['actual_output']
}
https://stackoverflow.com/questions/70116038
复制