【问题标题】:Deploy resources only if a file exists in Terraform仅当 Terraform 中存在文件时才部署资源
【发布时间】:2020-06-30 13:26:23
【问题描述】:

我有一个要求,只有当某个文件存在于某个位置时,我才必须部署资源,否则它将跳过该资源。

就像这里是在某些 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 中进行条件检查以检查文件是否存在?

【问题讨论】:

  • 如果您肯定无法切换到 Terraform 0.12,因此只对 0.11 的答案感兴趣,那么您应该使用 terraform0.11 标记您的问题。如果不是,那么您应该删除 0.11 引用并接受当前答案。

标签: amazon-web-services azure-active-directory amazon-iam terraform-provider-aws terraform0.11


【解决方案1】:

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
}

注意您需要访问仅存在于 0.12 中的 fileexists

【讨论】:

  • 我不认为 fileexists 存在于 terraform 0.11 中。
  • 嗯,是的。恕我直言,很难让你的逻辑正常工作
  • 升级不是一种选择?
  • 您可以使用外部数据源来检查它是否存在。不过,它的解决方案要复杂得多。或者,如果文件尚不存在,Terraform 计划/应用失败,则您可以不检查文件并使其失败。
  • 我们已经在使用 AWS 作为提供者,我不知道我们是否也可以添加 azure 作为 terraform 的提供者来查询 azure ad 中元数据文件的存在。
【解决方案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
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2014-05-12
    • 2022-10-24
    • 2017-02-19
    相关资源
    最近更新 更多