在通过Terraform创建VMS期间,当值为0时,如何跳过存储数据磁盘创建

在通过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 =

我已经尝试并成功地使用os_盘和data_盘创建了虚拟机。但我有一个需求,比如当“data\u disk==0”的值时,我需要跳过创建data\u disk。我尝试过使用值0,但它显然要求我将值设置在(1-32767)之间。这是我的成功代码

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任何解决方案。。请在这方面帮助我真的很好,我在想如何使用条件表达式,但我从来没有想到两个不同名称的资源。真的,它果然起了作用。。多谢各位