Terraform如何按条件创建azurerm_data_factory的github_configuration块
问题根因
你当前配置不生效的核心原因是dynamic块的for_each参数不接受布尔类型入参:Terraform要求dynamic块的for_each必须传入可迭代的集合类型(列表、map、set等),你直接传入var.Environment == "dev"返回的true/false布尔值无法被迭代,自然无法按预期控制块的生成。
另外你在content块内重复写环境三元判断完全是冗余逻辑——只要dynamic块不渲染目标块,块内部的参数根本不会被Terraform评估赋值。
正确配置写法
将布尔判断结果转为单元素/空列表即可实现条件控制:dev环境下for_each拿到长度为1的列表,会渲染1个github_configuration块;非dev环境下拿到空列表,完全不生成该配置块。
resource "azurerm_data_factory" "myDataFactory" { name = var.datafactortyName location = azurerm_resource_group.myResourceGroup.location resource_group_name = azurerm_resource_group.myResourceGroup.name dynamic "github_configuration" { for_each = var.Environment == "dev" ? [1] : [] content { account_name = var.AccountName branch_name = var.Branch git_url = var.RepoUrl repository_name = var.RepoName root_folder = var.RepoFolder } } }
配置说明
dynamic嵌套块不支持count参数,你注释掉的count写法本身就是无效语法,只能通过for_each传入空集合的方式实现块的条件隐藏- 非dev环境下因为github_configuration块完全不生成,不需要给内部参数传null,也不会触发这些Git相关变量的存在性校验
- 如果后续需要支持多环境不同Git配置,只需要把for_each的入参改成对应环境的配置map即可,不需要修改块内部逻辑
内容的提问来源于stack exchange,提问作者Kraken194
相关产品推荐
相关产品推荐

