【问题标题】:How to create multiple VMs in multiple Subnets using terraform modules如何使用 terraform 模块在多个子网中创建多个 VM
【发布时间】:2022-09-28 20:39:03
【问题描述】:

我是 terraform 的新手,正在尝试为多个虚拟机和多个区域内的多个子网创建一个模块。

我有 2 个区域,在每个区域中我有 3 个子网,并且在每个子网中我正在创建 2 个虚拟机。

我可以使用该模块在 2 个区域内创建多个子网,但在创建的这些多个子网中创建多个虚拟机时我需要帮助。你知道怎么做吗?

下面是我的 main.tf 和 terraform.tfvars 的代码

terraform.tfvars

  # subnets
    subnet = {
      \"Subnet1\" = {
        name                                            = \"subnet1\"
        address_prefixes                                = [\"\"]
        enforce_private_link_endpoint_network_policies  = 
      },
      \"Subnet2\" = {
        name                                            = \"subnet2\"
        address_prefixes                                = [\"\"]
        enforce_private_link_endpoint_network_policies  = 
      },
      \"Subnet3\" = {
        name                                            = \"subnet3\"
        address_prefixes                                = [\"\"]
        enforce_private_link_endpoint_network_policies  = 
      },
    }
    

    # vms
    vm = {
      \"vm1\" = {
        name            = \"vm1\"
        size            = \"\"
        admin_username  = \"\"
        zone            = \"\"
        vtpm_enabled    = true

        nic = {
          name                = \"\"
          ip_name             = \"\"
          private_ip_address  = \"\" 
        }
      },
      \"vm2\" = {
        name            = \"vm2\"
        size            = \"\"
        admin_username  = \"\"
        zone            = \"\"
        vtpm_enabled    = true

        nic = {
          name                = \"\"
          ip_name             = \"\"
          private_ip_address  = \"\"
        }     
      },

主文件

module \"subnet\" {
  source = \"./../modules/subnet\"
  depends_on = [module.vnet]
  for_each = var.region.subnet

  # Resource group
  network_rg_name  = var.region.network_rg_name    
  location            = var.region.location

  # Route table
  route_table_id = module.route_table.route_table_id

  # Network
  subnet  = each.value
  vnet    = var.region.vnet

}


module \"vm\" {
  source = \"./../modules/vm\"
  for_each    = var.region.vm
  
  # Resource group
  vm_rg_name  = var.region.vm_rg_name    
  location    = var.region.location

  # Subnets
  vm_subnet_id = module.subnet[\"Subnet1\"].subnet_id
 
  # Virtual Machine
  vm        = each.value
  vm_shared = var.tfvars.vm_shared
  vm_pwd    = var.vm_pwd    
}
  • 什么\'不适用于您当前的解决方案?
  • @DanielMann 如何将每个 subnet_id 值分配给 vm?目前我只为 Subnet1 做
  • 答案可能比你想的要复杂。我建议每个人都做每件事,然后研究如何实现你想要的。提示:您不能在 for_each 中使用不同的变量并期望映射工作。

标签: azure terraform terraform-provider-azure


【解决方案1】:

这可能有效

在 terraform.tfvars 中编辑 vms,添加所需子网的名称

terraform.tfvars

...
# vms
    vm = {
      "vm1" = {
        name            = "vm1"
        size            = ""
        admin_username  = ""
        zone            = ""
        subnet          = "subnet1"  ### require subnet
        vtpm_enabled    = true

        nic = {
          name                = ""
          ip_name             = ""
          private_ip_address  = "" 
        }
      },
      "vm2" = {
        name            = "vm2"
        size            = ""
        admin_username  = ""
        zone            = ""
        subnet          = "subnet2"  ### require subnet
        vtpm_enabled    = true

        nic = {
          name                = ""
          ip_name             = ""
          private_ip_address  = ""
        }     
      },

在你的 main.tf 添加一个条件和一个“本地人”

主文件

   locals {
          subnet1 = module.Subnet["Subnet1"].subnet_id
          subnet2 = module.Subnet["Subnet2"].subnet_id
          subnet3 = module.Subnet["Subnet3"].subnet_id
        }
    
    module "vm" {
          source = "./../modules/vm"
          for_each    = var.region.vm
          
          # Resource group
          vm_rg_name  = var.region.vm_rg_name    
          location    = var.region.location
        
          # Subnets
          vm_subnet_id = "${each.value.subnet}" == "subnet1" ? "${local.subnet1}" : "${each.value.subnet}" == "subnet2" ? "${local.subnet2}" : "${each.value.subnet}" == "subnet3" ? "${local.subnet3}" :""
         
          # Virtual Machine
          vm        = each.value
          vm_shared = var.tfvars.vm_shared
          vm_pwd    = var.vm_pwd    
        }

希望这可以帮助!

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 2018-12-14
    • 1970-01-01
    • 2022-07-06
    • 2018-07-29
    • 2020-11-30
    • 2021-08-09
    • 2022-01-26
    • 2022-07-01
    相关资源
    最近更新 更多