0

我要将其他 .tf 文件中的令牌值解析为其他 .tf 文件

我试图理解这个链接 以及这篇文章

数据.tf

data "external" "get_token" {
  program = ["/bin/sh", "${path.module}/get-token.sh"]
}

获取令牌.sh

#!/bin/bash
token=$(kubectl -n kube-system exec [POD_NAME] cat /var/lib/kube-proxy/kubeconfig 2>/dev/null | grep token | awk '{print $2}'

代理.tf

...
metadata_startup_script = <<-EOT
- name: kube-proxy
  user:
    token: ${lookup(data.external.get_token.result, "token")}
    certificate-authority-data: ${google_container_cluster.new_container_cluster.master_auth.0.cluster_ca_certificate}
...
EOT

我的期望是 token具有与 with 相同的值certificate-authority-datacertificate-authority-data有一个我期望的精确值,但它token是 nil 或空白。我已经get-token.sh手动运行了,这很好。但是当 terraform 要解析它时,该值没有解析成功。我'在变量之前和之后添加了${lookup(data.external.get_token.result, "token")}. 似乎不起作用。

4

1 回答 1

2

https://www.terraform.io/docs/providers/external/data_source.html

然后程序必须在 stdout 上生成一个有效的 JSON 对象,该对象将用于填充导出到 Terraform 配置其余部分的结果属性。此 JSON 对象必须再次将其所有值作为字符串。成功完成后,它必须以状态零退出。

所以脚本应该返回一个 json 对象。

#!/bin/bash
...
# add below line for make a json result
jq -n --arg token "$token" '{"token":$token}'

或者如果没有 jq,

#!/bin/bash
...
#add below
echo -n "{\"token\":\"${token}\"}"
于 2019-07-15T14:29:50.380 回答