【发布时间】:2020-03-28 20:35:05
【问题描述】:
您好,我有下面的 terraform 代码块,它为我创建了用于 sql 和 app 角色的虚拟机。
module "sql_vms" {
source = "../../modules/compute/"
rg_name = var.resource_group_name
location = module.resource_group.external_rg_location
vnet_name = var.virtual_network_name
subnet_name = var.sql_subnet_name
app_nsg = var.application_nsg
vm_count = var.count_vm
base_hostname = var.sql_host_basename
sto_acc_suffix = var.storage_account_suffix
vm_size = var.virtual_machine_size
vm_publisher = var.virtual_machine_image_publisher
vm_offer = var.virtual_machine_image_offer
vm_sku = var.virtual_machine_image_sku
vm_img_version = var.virtual_machine_image_version
username = var.username
password = var.password
allowed_source_ips = var.ip_list
}
module "app_vms" {
source = "../../modules/compute/"
rg_name = var.resource_group_name
location = module.resource_group.external_rg_location
vnet_name = var.virtual_network_name
subnet_name = var.sql_subnet_name
app_nsg = var.application_nsg
vm_count = var.count_vm
base_hostname = var.app_host_basename
sto_acc_suffix = var.storage_account_suffix
vm_size = var.virtual_machine_size
vm_publisher = var.virtual_machine_image_publisher
vm_offer = var.virtual_machine_image_offer
vm_sku = var.virtual_machine_image_sku
vm_img_version = var.virtual_machine_image_version
username = var.username
password = var.password
allowed_source_ips = var.ip_list
}
module "resource_group" {
source = "../../modules/resourcegroup/"
rg_name = "test_rg"
}
虽然它可以帮助我完成工作。我不认为这是理想的,因为有很多共同的参数,只有很少的改变来创建不同的角色
特定于角色的参数如下:
subnet_name
vm_size
vm_publisher
vm_offer
vm_sku
vm_img_version
可以在 terraform 中使用 case 语句或循环吗?
【问题讨论】:
-
不,它仍然不能解决问题,伙计。我相信你的建议是进行 1 次迭代,这很好。但是,我有一组列表,我必须为其执行 terraform config。我不想重复我在这里所做的相同的块。
-
你的意思是要创建多个不同参数的虚拟机?
-
是的,伙计!这就是我想要的,如果我的信息不清楚,请道歉。在我调用模块的地方使用相同的块并传递不同的参数。其余参数(或至少大部分)保持不变
-
恐怕Terraform中没有case语句,如果你使用模块,count也不可用。你可以看看HashiCorp Terraform 0.12 Preview: For and For-Each。
-
您的问题处于什么状态?你想怎么解决吗?
标签: terraform azure-virtual-machine terraform-provider-azure