Развертывать ресурсы, только если файл существует в 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