具有多个列表的 for 循环

Dat*_*tta 7 terraform terraform0.12+

我在 terraform 中有 2 个变量列表。需要使用两个列表并创建资源

我拥有的

locals {
    bucket_name = ["SRE", "Engg", "QA"]
    access_type = ["Private", "Public" ]
}
        
resource "oci_objectstorage_bucket" "test_bucket" {
    for_each = local.bucket_name 
    
    compartment_id = var.compartment_id
    name           = each.value
    namespace      = var.bucket_namespace
    access_type    = "Private" ## for Private 
}

resource "oci_objectstorage_bucket" "test_bucket" {
    for_each = local.bucket_name 

    compartment_id = var.compartment_id
    name           = each.value
    namespace      = var.bucket_namespace
    access_type    = "Public" ## For Public 
}
Run Code Online (Sandbox Code Playgroud)

通过上述资源块,我可以创建所需的存储桶。但是,我不想对同一组代码使用 2 个块(一个用于私有,另一个用于公共)。是否有可能合并 2 个列表并创建资源

Mar*_*cin 16

是的,您可以使用setproduct来迭代bucket_nameaccess_type

locals {
  bucket_name = ["SRE", "Engg", "QA"]
  access_type = ["Private", "Public" ]
  
  my_product = {for val in setproduct(local.bucket_name, local.access_type):
                "${val[0]}-${val[1]}" => val}  
}
Run Code Online (Sandbox Code Playgroud)

然后

resource "oci_objectstorage_bucket" "test_bucket" {
        for_each = local.my_product 
        compartment_id = var.compartment_id
        name = each.value[0]
        namespace = var.bucket_namespace
        access_type = each.value[1]
}
Run Code Online (Sandbox Code Playgroud)

  • 它正在发挥作用。`setproduct` 是我今天了解到的一个新函数。 (3认同)