使用外部变量导致意外的对象
Using external variable leads to unexpected object
我想从网站获取令牌,然后在后续资源中使用该令牌。我正在使用 external
提供程序从 bash 脚本获取令牌,然后在后期使用它:
data "external" "token" {
program = ["sh", "./token.sh"]
query = {
api_key = var.api_key
}
}
和 token.sh
如下所示:
#!/usr/bin/env sh
####################
set -e
TOKEN=`curl -X POST <some url>`
jq -n --arg token "$TOKEN" '{"token":$token}'
要访问 $TOKEN
,我正在使用 data.external.token
。我收到错误消息:data.external.token is object with 5 attributes
我尝试在脚本中只执行 TOKEN='FOO'
并得到相同的错误,所以我认为我的 curl 字符串不是问题所在。我不明白为什么脚本不起作用...此外,是否有调试 terraform 的好方法,尤其是 运行 时间变量?
让我从这个开始:
Also, is there any good way to debug terraform especially run time variables?
是的,您可以使用 Terraform 输出进行调试。例如:
output "token_output" {
value = data.external.token
}
将输出如下内容:
token_output = {
"id" = "-"
"program" = tolist([
"sh",
"./token.sh",
])
"query" = tomap({
"api_key" = "foo"
})
"result" = tomap({
"token" = "some token"
})
"working_dir" = tostring(null)
}
我认为这可以解释为什么会出现以下错误:
data.external.token is object with 5 attributes
您要查找的是 result
属性(也记录在 attribute references 中)。您可以这样引用它:
output "result" {
value = data.external.token.result
}
为了进一步调试,除了输出,你还可以使用terraform console
命令。这将启动一个 REPL,您可以在其中查看您所在州的资源内容。
我想从网站获取令牌,然后在后续资源中使用该令牌。我正在使用 external
提供程序从 bash 脚本获取令牌,然后在后期使用它:
data "external" "token" {
program = ["sh", "./token.sh"]
query = {
api_key = var.api_key
}
}
和 token.sh
如下所示:
#!/usr/bin/env sh
####################
set -e
TOKEN=`curl -X POST <some url>`
jq -n --arg token "$TOKEN" '{"token":$token}'
要访问 $TOKEN
,我正在使用 data.external.token
。我收到错误消息:data.external.token is object with 5 attributes
我尝试在脚本中只执行 TOKEN='FOO'
并得到相同的错误,所以我认为我的 curl 字符串不是问题所在。我不明白为什么脚本不起作用...此外,是否有调试 terraform 的好方法,尤其是 运行 时间变量?
让我从这个开始:
Also, is there any good way to debug terraform especially run time variables?
是的,您可以使用 Terraform 输出进行调试。例如:
output "token_output" {
value = data.external.token
}
将输出如下内容:
token_output = {
"id" = "-"
"program" = tolist([
"sh",
"./token.sh",
])
"query" = tomap({
"api_key" = "foo"
})
"result" = tomap({
"token" = "some token"
})
"working_dir" = tostring(null)
}
我认为这可以解释为什么会出现以下错误:
data.external.token is object with 5 attributes
您要查找的是 result
属性(也记录在 attribute references 中)。您可以这样引用它:
output "result" {
value = data.external.token.result
}
为了进一步调试,除了输出,你还可以使用terraform console
命令。这将启动一个 REPL,您可以在其中查看您所在州的资源内容。