Google cloud platform 地形为每个人创造了一个奇怪的世界

Google cloud platform 地形为每个人创造了一个奇怪的世界,google-cloud-platform,terraform,terraform-provider-gcp,Google Cloud Platform,Terraform,Terraform Provider Gcp,我想为每个循环创建一个for_,该循环只在数组中具有特定键:值对的对象上循环 我的输入变量是: 输入={ 名称=[“第一”、“第二”] 生命周期规则=[ { name=第一个 条件={ 年龄=“1” } 行动={ type=“删除” } },{ 条件={ 年龄=“2” } 行动={ type=“删除” } }, { 名称=秒 条件={ 年龄=“3” } 行动={ type=“删除” } },{ 条件={ 年龄=“4” } 行动={ type=“删除” } } ] 在我的main.tf(顺便说一

我想为每个循环创建一个for_,该循环只在数组中具有特定键:值对的对象上循环

我的输入变量是:

输入={
名称=[“第一”、“第二”]
生命周期规则=[
{
name=第一个
条件={
年龄=“1”
}
行动={
type=“删除”
}
},{
条件={
年龄=“2”
}
行动={
type=“删除”
}
},
{
名称=秒
条件={
年龄=“3”
}
行动={
type=“删除”
}
},{
条件={
年龄=“4”
}
行动={
type=“删除”
}
}
]
在我的main.tf(顺便说一句,用于部署gcp bucket以供参考)中,我希望将每个bucket的生命周期分开,并且只应用其中包含bucket名称的规则

因此,如果有人知道如何修改下面的每一个代码,我将不胜感激。我相信,只需将for\u each更改为循环正确的元素(假设该列表中只有name=first的对象)。从
var.lifecycle\u规则
set

resource“google\u storage\u bucket”“bucket”{
计数=长度(变量名称)
name=“${lower(元素(var.names,count.index))}”
...
动态“生命周期规则”{
#for_each=长度(查找(生命周期_规则[查找(元素(var.names,count.index)))
for\u each=生命周期\u规则
内容{
行动{
type=lifecycle\u rule.value.action.type
存储\u类=查找(生命周期\u规则.value.action,“存储\u类”,null)
}
状况{
#age=lifecycle\u rule.value.name==element(var.names,count.index)?查找(lifecycle\u rule.value.condition,“age”,null):null
年龄=查找(生命周期_rule.value.condition,“年龄”,null):null
...
我认为这种“wierd”外观可以分两个阶段获得

  • 根据
    名称
  • 这将以以下形式提供
    local.new

    {                                                        
      "first" = [            
        {                 
          "action" = {       
            "type" = "Delete"
          }              
          "condition" = { 
            "age" = "1"
          }                  
          "name" = "first"
        },                   
        null,          
        null,                
        null,                
      ]                  
      "second" = [           
        null,          
        null,                
        {                  
          "action" = {       
            "type" = "Delete"
          }              
          "condition" = {  
            "age" = "3"
          }                
          "name" = "second"
        },   
        null,
      ]
    }  
    
    
  • 对每个_执行

  • 我只能验证第一步和部分第二步(使用
    aws\u autoscaling\u group
    及其多个
    tag
    组件)。我无法访问google cloud对代码进行全面测试。

    尽管这是完全可能的(文档中有一个关于如何进行测试的示例),为什么不只是迭代
    生命周期_规则
    映射,而不是对
    名称
    变量的长度使用
    计数
    呢?然后,您可以使用映射的迭代值来计算
    动态
    块中的逻辑,以及它是否应该存在。这将更容易、更清晰。是的,我想这样做,但是整个模块(在
    点之间的一个大模块)只是一个用google预定义的模块,不确定每个模块下的工作如何加倍-但会测试-除此之外,你能给文档提供链接吗?我确定检查了所有可用的方法,但没有找到一个可以解决这个问题的方法
    {                                                        
      "first" = [            
        {                 
          "action" = {       
            "type" = "Delete"
          }              
          "condition" = { 
            "age" = "1"
          }                  
          "name" = "first"
        },                   
        null,          
        null,                
        null,                
      ]                  
      "second" = [           
        null,          
        null,                
        {                  
          "action" = {       
            "type" = "Delete"
          }              
          "condition" = {  
            "age" = "3"
          }                
          "name" = "second"
        },   
        null,
      ]
    }  
    
    
      resource "google_storage_bucket" "buckets" {
    
        for_each = toset(var.input.names)  
    
        name          = each.key
    
        dynamic "lifecycle_rule" {
    
          # iterate for each name skipping null values
          for_each = [for v in local.new[each.key]: v if v != null]
      
          content {
            action {
               type          = lifecycle_rule.value["action"].type
               storage_class = lookup(lifecycle_rule.value["action"], "storage_class", null)
             }
    
            condition {
                age = lookup( tag.value["condition"], "age", null) 
             }
          }
       }
    }