Получить данные токена из учетной записи службы Kubernetes в Terraform - PullRequest
3 голосов
/ 10 мая 2019

Я создаю учетную запись службы 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.

1 Ответ

3 голосов
/ 14 мая 2019

Это работает:

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 = "${lookup(data.kubernetes_secret.ci.data, "token")}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...