【发布时间】:2019-09-28 12:37:19
【问题描述】:
我正在使用 terraform 创建一个 Kubernetes 服务帐户,并尝试从它创建的 Kubernetes Secret 中输出令牌。
resource "kubernetes_service_account" "ci" {
metadata {
name = "ci"
}
}
data "kubernetes_secret" "ci" {
metadata {
name = "${kubernetes_service_account.ci.default_secret_name}"
}
}
output "ci_token" {
value = "${data.kubernetes_secret.ci.data.token}"
}
根据the docs,由于default_secret_name 的计算值,这应该使数据块延迟获取其值直到“应用”阶段,但是当我运行terraform apply 时,它给了我这个错误:
Error: Error running plan: 1 error(s) occurred:
* output.ci_token: Resource 'data.kubernetes_secret.ci' does not have attribute 'data.token' for variable 'data.kubernetes_secret.ci.data.token'
将depends_on 添加到kubernetes_secret 数据块没有任何区别。
如果我注释掉 output 块,它会很好地创建资源,然后我可以取消注释,再次应用,一切正常,因为 Kubernetes Secret 已经存在。
我还提出了一个 Github 问题 here。
更新
接受的答案确实解决了这个问题,但我省略了另一个输出以简化问题,这不适用于此解决方案:
output "ci_crt" {
value = "${data.kubernetes_secret.ci.data.ca.crt}"
}
* output.ci_ca: lookup: lookup failed to find 'ca.crt' in:
${lookup(data.kubernetes_secret.ci.data, "ca.crt")}
由于a bug in Terraform,此特定问题是reported here,已在版本0.12 中修复。
【问题讨论】:
标签: kubernetes terraform