从Terraform的Kubernetes服务帐户中检索令牌数据



我正在使用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}"
}

根据文档,这应该使数据块defer获得其值,直到"应用"阶段,因为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问题。

update

所接受的答案确实解决了这个问题,但是我省略了另一个输出来简化该问题,该问题与此解决方案无效:

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")}

由于Terraform中的错误,此处报告了此特定问题,该错误已在0.12版中修复。

这有效:

resource "kubernetes_service_account" "ci" {
  metadata {
    name = "ci"
  }
}
data "kubernetes_secret" "ci" {
  metadata {
    name = kubernetes_service_account.ci.default_secret_name
  }
}
output "ci_token" {
  sensitive = true
  value = lookup(data.kubernetes_secret.ci.data, "token")
}

最新更新