Развертывать ресурсы, только если файл существует в Terraform

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

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

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 ответа

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

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
  }
}

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