How to for_each through a list(objects) in Terraform 0.12

后端 未结 4 460
别那么骄傲
别那么骄傲 2021-02-03 23:24

I need to deploy a list of GCP compute instances. How do I loop for_each through the "vms" in a list of objects like this:

    "gcp_zone": &q         


        
4条回答
  •  清酒与你
    2021-02-04 00:10

    From Terraform 0.12, you can use the for_each with modules like the following:

    modules/google_compute_instance/variables.tf

    variable "hosts" {
        type = map(object({
            hostname        = string
            cpu             = number
            ram             = number
            hdd             = number
            log_drive       = number
            template        = string 
            service_types   = list(string)
          }))
        }
    

    modules/google_compute_instance/main.tf

    resource "google_compute_instance" "gcp_instance" {
      for_each = var.hosts
    
      hostname      = each.value.repository_name
      cpu           = each.value.cpu
      ram           = each.value.ram
      hdd           = each.value.hdd
      log_drive     = each.value.log_drive
      template      = each.value.template
      service_types = each.value.service_types
    }
    

    servers.tf

    module "gcp_instances" {
        source = ./modules/google_compute_instance"
    
        hosts = {
            "test1-srfe" = {
                hostname        = "test1-srfe",
                cpu             = 1,
                ram             = 4,
                hdd             = 15,
                log_drive       = 300,
                template        = "Template-New",
                service_types   = ["sql", "db01", "db02"]
            },
            "test1-second" = {
                hostname        = "test1-second",
                cpu             = 1,
                ram             = 4,
                hdd             = 15,
                log_drive       = 300,
                template        = "APPs-Template",
                service_types   = ["configs"]
            },
        }
    }
    

    Of course, you can add as many variables as needed and use them in the module.

提交回复
热议问题