Я создаю учетную запись службы Kubernetes, используя terraform, и пытаюсь вывести токен из секрета Kubernetes, который он создает.
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}"
}
Согласно документам это должно сделатьблок данных откладывает получение своих значений до фазы «применения» из-за вычисленного значения 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 уже существует.
Я также сделал проблему Github здесь .
Обновление
Принятый ответ делаетрешить эту проблему, но я упустил другой вывод, чтобы упростить вопрос, который не работает с этим решением:
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.