如何使用地形模块在多个子网中创建多个虚拟机



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

我有两个区域,在每个区域中我有3个子网,在每个子网中我创建2个vm。

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

以下是我的主.tf和地形.tfvars 代码

地形.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  = ""
}     
},

main.tf

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    
}

这可能适用于

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

地形.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中添加一个条件;当地人";

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    
}

希望这能有所帮助!

最新更新