我要将令牌值从其他.tf文件解析为其他.tf文件
data.tf
data "external" "get_token" {
program = ["/bin/sh", "${path.module}/get-token.sh"]
}
get-token.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}'
proxy.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
的值与certificate-authority-data
相同。
certificate-authority-data
的值与我期望的相同,但是token
为零或空白。
我手动运行了get-token.sh
,这很好。但是当terraform要解析它时,该值将无法成功解析。我在变量'
之前和之后添加了${lookup(data.external.get_token.result, "token")}
。似乎不起作用。
答案 0 :(得分: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}\"}"