在通过Terraform创建VMS期间,当值为0时,如何跳过存储数据磁盘创建
我已经尝试并成功地使用os_盘和data_盘创建了虚拟机。但我有一个需求,比如当“data\u disk==0”的值时,我需要跳过创建data\u disk。我尝试过使用值0,但它显然要求我将值设置在(1-32767)之间。这是我的成功代码在通过Terraform创建VMS期间,当值为0时,如何跳过存储数据磁盘创建,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我已经尝试并成功地使用os_盘和data_盘创建了虚拟机。但我有一个需求,比如当“data\u disk==0”的值时,我需要跳过创建data\u disk。我尝试过使用值0,但它显然要求我将值设置在(1-32767)之间。这是我的成功代码 provider "azurerm" { features{} } resource "azurerm_resource_group" "vmss" { name = var.resourcegroup location =
provider "azurerm" {
features{}
}
resource "azurerm_resource_group" "vmss" {
name = var.resourcegroup
location = var.location
}
resource "azurerm_windows_virtual_machine_scale_set" "vmss" {
name = var.vmss_name
resource_group_name = azurerm_resource_group.vmss.name
location = azurerm_resource_group.vmss.location
sku = var.vm_sku
instances = var.instancescount
computer_name_prefix = var.computer_name_prefix
admin_password = var.vmpassword
admin_username = var.vmusername
provision_vm_agent = true
overprovision = false
source_image_reference {
publisher = var.publisher
offer = var.offer
sku = var.os_sku
version = var.image_version
}
os_disk {
storage_account_type = var.os_disk_type
caching = "ReadWrite"
disk_size_gb = var.os_disk_size
}
data_disk{
lun = 1
storage_account_type = var.data_disk_type
caching = "ReadWrite"
disk_size_gb = var.data_disk_size
}
winrm_listener {
protocol = "Http"
}
additional_unattend_content{
content = "<AutoLogon><Password><Value>${var.vmpassword}</Value></Password><Enabled>true</Enabled><LogonCount>1</LogonCount><Username>${var.vmusername}</Username></AutoLogon>"
setting = "AutoLogon"
}
# Unattend config is to enable basic auth in WinRM, required for the provisioner stage.
additional_unattend_content {
setting = "FirstLogonCommands"
content = file("./files/FirstLogonCommands.xml")
}
network_interface {
name = "${var.computer_name_prefix}-profile"
primary = true
ip_configuration {
name = "${var.computer_name_prefix}-IPConfig"
primary = true
subnet_id = var.subnet
}
}
}
提供程序“azurerm”{
特征{}
}
资源“azurerm\u资源组”“vms”{
name=var.resourcegroup
位置=变量位置
}
资源“azurerm\u windows\u虚拟机\u规模\u集”“虚拟机”{
name=var.vmss\u name
resource\u group\u name=azurerm\u resource\u group.vmss.name
location=azurerm\u resource\u group.vmss.location
sku=var.vm\u sku
instances=var.instancescount
计算机名称前缀=变量计算机名称前缀
admin_password=var.vmpassword
admin_username=var.vmusername
provision\u vm\u agent=true
提供过多=错误
源\图像\参考{
publisher=var.publisher
报价=var.offer
sku=var.os\u sku
版本=var.image\u版本
}
操作系统磁盘{
存储\帐户\类型=变量os\磁盘\类型
缓存=“读写”
磁盘大小\u gb=var.os\u磁盘大小
}
数据盘{
lun=1
存储\帐户\类型=变量数据\磁盘\类型
缓存=“读写”
磁盘大小\u gb=var.data\u磁盘大小
}
winrm_侦听器{
协议=“Http”
}
附加\u无人参与\u内容{
content=“${var.vmpassword}true1${var.vmusername}”
setting=“自动登录”
}
#无人参与配置用于在WinRM中启用provisioner阶段所需的基本身份验证。
附加\u无人参与\u内容{
setting=“FirstLogonCommands”
内容=文件(“./files/FirstLogonCommands.xml”)
}
网络接口{
name=“${var.computer\u name\u prefix}-profile”
主=真
ip_配置{
name=“${var.computer\u name\u prefix}-IPConfig”
主=真
子网\u id=var.subnet
}
}
}
当值为0时,有人能帮我跳过数据盘创建吗
提前谢谢
谢谢,
在这种情况下,您可以使用格式
条件?真值:假值
像这样声明一个变量
variable "select_data_disk" {
description = "conditionally creating vmss with data disk"
default = true // when the var is true, data disk is selected; when the var is false, data disk is not selected.
}
然后创建两个资源“azurerm\u windows\u virtual\u machine\u scale\u set”“example1”
和资源“azurerm\u windows\u virtual\u scale\u set”“example2”
。一个VMS资源包括数据磁盘块,另一个不包括数据磁盘块。使用count=var.select\u data\u disk?每个资源中的0:1
示例
variable "select_data_disk" {
description = "conditionally creating vmss with data disk"
default = true // when the var is true, data disk is selected; when the var is false, data disk is not selected.
}
...
resource "azurerm_windows_virtual_machine_scale_set" "example" {
count = var.select_data_disk ? 1 : 0
name = "myvmss"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
sku = "Standard_F2"
instances = 1
admin_password = "P@55w0rd1234!"
admin_username = "adminuser"
source_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2016-Datacenter-Server-Core"
version = "latest"
}
os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
}
data_disk{
lun = 1
storage_account_type = "Standard_LRS" //Standard_LRS, StandardSSD_LRS, Premium_LRS and UltraSSD_LRS.
caching = "ReadWrite"
disk_size_gb = 1
}
network_interface {
name = "example"
primary = true
ip_configuration {
name = "internal"
primary = true
subnet_id = azurerm_subnet.internal.id
}
}
}
resource "azurerm_windows_virtual_machine_scale_set" "example1" {
count = var.select_data_disk ? 0 : 1
name = "myvmss"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
sku = "Standard_F2"
instances = 1
admin_password = "P@55w0rd1234!"
admin_username = "adminuser"
source_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2016-Datacenter-Server-Core"
version = "latest"
}
os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
}
network_interface {
name = "example"
primary = true
ip_configuration {
name = "internal"
primary = true
subnet_id = azurerm_subnet.internal.id
}
}
}
Terraform支持以下格式的条件表达式?:。这个三元语法可能是您从其他编程语言中熟悉的,它将在条件中计算布尔逻辑,如果结果为真,它将返回真值,如果结果为假,它将返回假值。@Eldho这对删除块不起作用。我想你需要在这里使用动态块。是的,我找不到任何与动态相关的东西block@ydaetskcoR,如果可能的话,你能提供能帮助我解决这个问题的示例链接吗issue@here任何解决方案。。请在这方面帮助我真的很好,我在想如何使用条件表达式,但我从来没有想到两个不同名称的资源。真的,它果然起了作用。。多谢各位