Terraform azurerm遍历tfvars文件批量创建Azure资源组实现方案
实现方案
该需求可直接通过Terraform内置的fileset、hcl2decode函数结合for表达式实现,不需要额外模板文件,适配你当前1.0.11版本的运行环境。
步骤1:确认目录结构
保持你现有的文件组织方式,所有客户端配置放在clients目录下,每个.tfvars文件为单个客户端的HCL格式配置:
<你的Terraform根目录> ├── main.tf └── clients ├── client1.tfvars ├── client2.tfvars └── ... 其他客户端配置文件
步骤2:构造本地配置集合
在main.tf中添加locals块,遍历所有客户端配置文件并解析为可直接引用的对象映射:
locals { # 匹配clients目录下所有后缀为.tfvars的文件 client_files = fileset("${path.module}/clients", "*.tfvars") # 逐个读取并解析配置文件,生成以文件名(去掉后缀)为键的配置映射 client_configs = { for file_path in local.client_files : trimsuffix(basename(file_path), ".tfvars") => hcl2decode(file("${path.module}/${file_path}")) } }
步骤3:基于配置集合批量创建资源
修改资源声明,通过for_each引用上面构造的本地配置集合:
resource "azurerm_resource_group" "resourcegroup" { for_each = local.client_configs name = "rg-${each.value.client}-${each.value.env}" location = var.location }
注意事项
- 每个
.tfvars文件需保证存在client、env两个字段,否则取值时会抛出错误 - 采用文件名作为
for_each的键,后续仅修改文件内的client、env值不会触发资源重建,删除/新增/重命名文件才会对应删除/新增/重建资源 - 后续新增客户端仅需要在
clients目录下新增对应.tfvars配置文件即可,无需修改核心声明代码,符合你单独文件维护的需求
内容的提问来源于stack exchange,提问作者aldur33
相关产品推荐
相关产品推荐

