【问题标题】:Generate file with dynamic content with Terragrunt使用 Terragrunt 生成具有动态内容的文件
【发布时间】:2021-08-21 10:49:51
【问题描述】:

我对 Terragrunt 真的很陌生。

我想知道是否有办法动态生成文件的内容?

例如,考虑以下代码:

generate "provider" {
    path      = "provider.tf"
    if_exists = "overwrite"
    contents = <<EOF
terraform {
 required_providers { 
    azurerm = { 
      source = "azurerm"
      version = "=2.49.0"
    }
  }
}

provider "azurerm" {
  features {}
  subscription_id = "xxxxxxxxxxxxxxxxx"
}
EOF
}

有没有办法动态设置诸如subscription_id 之类的值?我试过使用${local.providers.subscription_id} 之类的东西,但它不起作用:

provider "azurerm" {
  features {}
  subscription_id = "${local.providers.subscription_id}"
}

【问题讨论】:

    标签: terraform terragrunt


    【解决方案1】:

    只要您在同一范围内定义本地,您所拥有的就应该完全按原样工作。刚刚使用 Terragrunt v0.28.24 测试了以下内容。

    common.hcl 中,位于某个父目录中的文件(但仍在同一个 Git 存储库中):

    locals {
      providers = {
        subscription_id = "foo"
      }
    }
    

    在你的terragrunt.hcl:

    locals {
      common_vars = read_terragrunt_config(find_in_parent_folders("common.hcl"))
    }
    
    generate "provider" {
      path      = "provider.tf"
      if_exists = "overwrite"
      contents  = <<EOF
    terraform {
     required_providers {
        azurerm = {
          source = "azurerm"
          version = "=2.49.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = "${local.common_vars.locals.providers.subscription_id}"
    }
    EOF
    }
    

    运行terragrunt init 后,provider.tf 会生成预期的内容:

    provider "azurerm" {
      features {}
      subscription_id = "foo"
    }
    

    【讨论】:

    • 谢谢本。 “相同范围”是指在同一个文件中定义本地?我的想法是在其他地方定义局部变量,例如 subscription_id,因为这些变量会因环境而异。
    • 啊,应该可以用read_terragrunt_config() 来解决这个问题。答案已相应更新。
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多