Google cloud platform 地形为每个人创造了一个奇怪的世界
我想为每个循环创建一个for_,该循环只在数组中具有特定键:值对的对象上循环 我的输入变量是: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(顺便说一
输入={
名称=[“第一”、“第二”]
生命周期规则=[
{
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)
}
}
}
}