Сохранение вывода Terraform в локальный файл - PullRequest
2 голосов
/ 14 января 2020

Я хочу создать файл (credentials.json) в каталоге, скажем content, используя Terraform.

Содержимое будет выводом ключа учетной записи частной службы.

Я использую следующий код для создания учетной записи службы и получения ее ключа для data:

resource "google_service_account" "my-account" {
  account_id = "${var.account_id}"
  project    = "${var.project_id}"
}

resource "google_service_account_key" "my-account" {
  service_account_id = "${google_service_account.my-account.name}"
}

data "google_service_account_key" "my-account" {
  name            = "${google_service_account_key.cd.name}"
  public_key_type = "TYPE_X509_PEM_FILE"
}

Как я могу затем вывести ее в локальный файл?

Мой вариант использования что я хочу создать credentials.json, чтобы включить периодические c резервные копии из jenkins в корзину облачного хранилища Google.

Ответы [ 2 ]

3 голосов
/ 14 января 2020

Вы можете использовать ресурс local_file для записи данных на диск в прогоне Terraform.

Таким образом, вы можете сделать что-то вроде следующего:

resource "google_service_account" "my-account" {
  account_id = "${var.account_id}"
  project    = "${var.project_id}"
}

resource "google_service_account_key" "my-account" {
  service_account_id = "${google_service_account.my-account.name}"
}

resource "local_file" "key" {
  filename = "/path/to/key/output"
  content  = "${base64decode(google_service_account_key.my-account.private_key)}"
}

Обратите внимание, что вам никогда не потребуется источник данных для просмотра выходных данных ресурса, который вы создаете в той же команде Terraform. В этом случае вы можете отказаться от источника данных google_service_account_key, потому что у вас есть ресурс, доступный для вас.

Преимущество источников данных заключается в том, что вам нужно искать какое-то сгенерированное значение ресурса, либо не созданного Terraform. или в другом файле состояния.

0 голосов
/ 14 января 2020

Лучше всего было бы создать выходные данные для вашей учетной записи службы:

output "google_service_account_key" {
  value = "${base64decode(data.google_service_account_key.my-account.private_key)}"
}

С помощью команды terraform output вы можете запросить ключ, объединенный с jq (или другим парсером json). ) чтобы найти правильный вывод:

terraform output -json google_service_account_key | jq '.value[0]' > local_file.json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...