Начало этапа в скрипте внешнего источника данных Terraform - PullRequest
0 голосов
/ 18 сентября 2018

Я собираюсь использовать внешний источник данных для создания ресурса AWS, который в настоящее время не поддерживается (подразделение AWS Organizations).Я провожу некоторое тестирование с созданием корзины S3, потому что рабочий процесс похож.Я использую внешний источник данных для вызова сценария bash и передачи параметров (например, имя сегмента, регион).

Сценарий проверяет, существует ли сегмент S3, и, если нет, создаетЭто.Сценарий написан так, чтобы он возвращал успех и т. Д., Если он уже существует.

Я вижу, что сценарий выполняется даже на этапе "terraform plan", и, по-видимому,Аргумент stdin или переменная окружения передаются в сценарий для указания фазы плана / применения / уничтожения.Можно ли это сделать / сделать вывод?В идеале скрипт должен вызываться с «планом», а затем возвращаться, если ресурс уже существует.Затем можно создать фазу «применить», если необходимо.

Возможно ли получить фазу Terraform (планировать / применить / уничтожить) в сценарии?Или другие способы избежать полного запуска сценария на этапе планирования?

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

Пример кода вызова:

data "external" "create_bucket" { 
    program = ["bash", "create_bucket.sh"]
    query = { 
        region = "ca-central-1" 
        bucket_name = "mytestbucket" 
    }
}

Также попытался использовать local-exec:

Когда у меня есть следующий код вызова:

variable "bucket_name_list" {
    type = "list"
    default = ["neilp-dummylist-1","neilp-dummylist-2",
               "neilp-dummylist-3"]
}

module "local" {
    source           = "../local"
    bucket_name_list = ["${var.bucket_name_list}"]
    bucket_region    = "ca-central-1"
}

С модулем:

resource "null_resource" "test" {
    count = "${length(var.bucket_name_list)}"

    provisioner "local-exec" {
        command = "aws s3api create-bucket 
                       --bucket 
                         ${element(var.bucket_name_list, count.index)} 
                       --create-bucket-configuration
                         LocationConstraint=${var.bucket_region}"
    }
}

Проблема здесь в том, что он просто отслеживает количество записей в bucket_name_list,и если я изменю значение, но количество записей останется неизменным, он не заметит.

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