Terraform внешний источник данных как вход для провайдера - PullRequest
0 голосов
/ 17 января 2019

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

Я читаю учетные данные из AWS Secrets Manager, используя небольшой скрипт bash. Скрипт работает и возвращает JSON в подходящем формате.

Когда я впервые протестировал мой скрипт, он работал! Ну, не совсем - имя пользователя было неверным. Я исправил мой скрипт, чтобы он возвращал правильное имя пользователя, но terraform продолжал использовать старое имя пользователя

План терраформ:

provider "postgresql" {
    alias    = "db_admin"
    host     = "${data.external.root_password.result.host}"
    sslmode  = "disable"
    port     = 5432
    database = "postgres"
    username = "${data.external.root_password.result.username}"
    password = "${data.external.root_password.result.password}"
}

data "external" "root_password" {
    program = ["bash", "${path.module}/get_root_password.sh"]

    query = {
        secret_name = "${var.root_password_name}"
        assume_role = "${terraform.workspace}"
    }
}

И скрипт bash:

    #!/bin/bash

    set -e

    # This is a simplified version of the script for debugging purposes
    # The first version had username = martin, but then got changed to root
    echo {\"password\": \"not_the_password\", \"host\": \"some_db\", \"username\": \"root\"}

Вывод terraform выглядит следующим образом (обратите внимание, что имя пользователя martin не root):

Error: Error refreshing state: 1 error(s) occurred:

* module.db_roles.provider.postgresql.db_admin: Error initializing PostgreSQL client: error detecting capabilities: error PostgreSQL version: pq: password authentication failed for user "martin"

Старое значение должно быть где-то в кэше ... но я пытался искать везде, но безуспешно. Еще одна вещь, которую я заметил, - это план инициализации поставщика postgres до запуска внешних данных. Может ли это быть так? Это все еще не ответило бы, откуда исходит старое значение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...