Развертывать ресурсы, только если файл существует в Terraform - PullRequest
0 голосов
/ 19 марта 2020

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

Как здесь, это код для развертывания определенного поставщика удостоверений в определенных AWS аккаунтов. Наряду с этим поставщиком удостоверений (скажем, ab c) многие другие поставщики удостоверений также развертываются из того же файла main.tf, поэтому все должно быть здесь. Единственная проблема заключается в том, что при развертывании уровня IAM для любых учетных записей мы будем развертывать этот определенный ресурс только в том случае, если файл abc-${var.aws_account}.xml существует в пути к файлу в части
saml_metadata_document. Если он не существует в пути, он просто проигнорирует создание ресурса и будет go впереди с остальным кодом.

resource "aws_iam_saml_provider" "xyz" {
    name                   = "abc-${var.aws_account}"
    saml_metadata_document =  "${file("${path.module}/metadata/abc-${var.aws_account}.xml")}"
}

Структура папки

IAM-Module
  |
  main.tf
  variables.tf
  metadata
     |
     abc-127367223.xml
     abc-983297832.xml
     abc-342374384.xml

Как можно поставить условную проверку в Terraform 0.11, чтобы проверить, существует ли файл?

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Если это разрешено. Вместо существования файла используйте размер файла. Если размер файла равен нулю, не создавайте ресурс, в противном случае создайте.

data "local_file" "hoge" {
  filename = "${path.module}/hoge"
}

resource "null_resource" "hoge" {
  count = length(data.local_file.hoge.content) > 0 ? 1 : 0

  provisioner "local-exec" {
    command = <<EOF
cat "${path.module}/${data.local_file.hoge.filename}"
EOF
  }
}
0 голосов
/ 19 марта 2020

count можно использовать для создания массива ресурсов вместо одного ресурса, поэтому установка count = 0 создаст массив ресурсов длины 0, что фактически отключит ресурс.

resource "aws_iam_saml_provider" "xyz" { 
   name = "abc-${var.aws_account}" 
   saml_metadata_document = "${file("${path.module}/metadata/abc-${var.aws_account}.xml")}" 
   count = fileexists("${path.module}/metadata/abc-${var.aws_account}.xml") ? 1 : 0
}

ПРИМЕЧАНИЕ. Вам потребуется доступ к fileexists, который существует только в 0,12

.
...