Terraform外部提供程序资源在计划阶段期间没有变量属性

时间:2018-05-31 09:09:11

标签: terraform

使用以下脚本运行terraform计划时,我会发出以下错误消息:

Error: Error running plan: 1 error(s) occurred:

* output.foobaz: Resource 'data.external.example' does not have attribute 'result.foobaz' for variable 'data.external.example.result.foobaz'

测试中没有出现外部脚本在计划阶段实际执行的情况,但是,计划阶段似乎试图插入预期的响应,这对我来说似乎是不正确的。有什么我想念的吗?

provider "scaleway" {
  region = "ams1"
}

resource "scaleway_ip" "swarm_manager_ip" {
  count = 1
}

data "external" "example" {
  program = ["./scripts/test.sh"]

  query = {
    # arbitrary map from strings to strings, passed
    # to the external program as the data query.
    foo = "${scaleway_ip.swarm_manager_ip.0.ip}"
    baz = "i-am-baz"
  }
}

output "foobaz" {
  value = "${data.external.example.result.foobaz}"
}

output "scaleway_ip_address" {
  value = "${scaleway_ip.swarm_manager_ip.0.ip}"
}

这是外部脚本:

#!/bin/bash

# Exit if any of the intermediate steps fail
set -e

# Extract "foo" and "baz" arguments from the input into
# FOO and BAZ shell variables.
# jq will ensure that the values are properly quoted
# and escaped for consumption by the shell.
eval "$(jq -r '@sh "FOO=\(.foo) BAZ=\(.baz)"')"

# Placeholder for whatever data-fetching logic your script implements
FOOBAZ="$FOO BAZ"

# Safely produce a JSON object containing the result value.
# jq will ensure that the value is properly quoted
# and escaped to produce a valid JSON string.
jq -n --arg foobaz "$FOOBAZ" '{"foobaz":$foobaz}'

1 个答案:

答案 0 :(得分:0)

您的Terraform语法不正确。 data.external.example.result是一张地图。要访问其条目foobaz,您需要进行编码

"${data.external.example.result["foobaz"]}"

请参见https://www.terraform.io/docs/configuration/interpolation.html