元数据中的Terraform外部数据_startup_script

时间:2019-07-15 11:49:21

标签: terraform kube-proxy

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

我试图从link到这个article

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")}。似乎不起作用。

1 个答案:

答案 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}\"}"