Skip to content

Relax the requirement for unit_number=0 requirements on r/virtual_machine_disk_subresource with SATA or SCSI #1320

@masert

Description

@masert

Terraform Version

TF v0.13.6

vSphere Provider Version

V1.24.3

Affected Resource(s)

Terraform Configuration Files

module "dv77" {
  source      = "./mod_vm_rhel_v5_import"
  mod_vm_name = "fr0-vs2a64-dv77"
...
  mod_size_disk0 = 120
  mod_un_disk0   = 1
...
}

variables.tf 

variable "mod_un_disk0" {
  # unit_number
  type    =  string
  default = "default"
}
locals {
...
  mod_un_disk0               =  var.mod_un_disk0 == "default" ? 0 : var.mod_un_disk0
...
}


resource "vsphere_virtual_machine" "mod_vm_v5" {
...
  lifecycle {
    ignore_changes = [
       annotation,
       custom_attributes,
       enable_logging,
       cpu_hot_add_enabled,
       disk.0.unit_number,
    ]
  }

  name                   = var.mod_vm_name
  num_cpus               = var.mod_num_cpu
  num_cores_per_socket   = var.mod_num_cores_per_socket
  ...

  cdrom {
    client_device = true
  }

  disk {
    label            = "disk0"
    size             = local.mod_size_disk0
    eagerly_scrub    = local.mod_eagerly_scrub_disk0
    thin_provisioned = local.mod_thin_provisioned_disk0
    disk_sharing     = "sharingNone"
    unit_number      = local.mod_un_disk0
    io_reservation   = "0"
    io_share_level   = "normal"
  }

#  disk {
#    label            = "disk1"
#    size             = var.mod
...
}


Debug Output

...
2021-01-27T12:45:23.618+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] Datastore with ID "datastore-585" found
2021-01-27T12:45:23.655+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] DiskDiffOperation: Beginning disk diff customization
2021/01/27 12:45:23 [ERROR] eval: *terraform.EvalDiff, err: at least one disk must have a unit_number of 0 for SATA or SCSI or 1 for IDE
2021/01/27 12:45:23 [ERROR] eval: *terraform.EvalSequence, err: at least one disk must have a unit_number of 0 for SATA or SCSI or 1 for IDE
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] DiskDiffOperation: Beginning collective diff validation (indexes aligned to new config)
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] diskLabelOrName: label: "disk0" name: ""
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] diskLabelOrName: Using defined label value "disk0"
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] diskPathOrName: Using defined path value "fr0-xxxxxxx-dv77/fr0-xxxxxxxxxx-dv77-000001.vmdk"
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] disk.0 (key 2001 at scsi:0:1) (fr0-xxxxxxxxxx-dv77/xxxxxxxxxxx-dv77-000001.vmdk): Beginning diff validation
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] diskLabelOrName: label: "disk0" name: ""
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] diskLabelOrName: Using defined label value "disk0"
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] diskPathOrName: Using defined path value "fr0-xxxxxxxx-dv77/fr0-xxxxxxxxxx-dv77-000001.vmdk"
2021-01-27T12:45:23.658+0100 [DEBUG] plugin.terraform-provider-vsphere_v1.24.3_x4: 2021/01/27 12:45:23 [DEBUG] disk.0 (key 2001 at scsi:0:1) (fr0-xxxxxxxxx-dv77/fr0-xxxxxxxx-dv77-000001.vmdk): Diff validation complete
2021-01-27T12:45:23.660+0100 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/yyyyyyy/xxxxxxxx/template/2.1.2/linux_amd64/terraform-provider-template_v2.1.2_x4 pid=28827
2021-01-27T12:45:23.660+0100 [DEBUG] plugin: plugin exited
2021-01-27T12:45:23.690+0100 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/yyyyyyyy/xxxxxx/null/2.1.2/linux_amd64/terraform-provider-null_v2.1.2_x4 pid=28802
2021-01-27T12:45:23.691+0100 [DEBUG] plugin: plugin exited
2021-01-27T12:45:23.691+0100 [WARN] plugin.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = transport is closing"
2021-01-27T12:45:23.691+0100 [WARN] plugin.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = transport is closing"
2021-01-27T12:45:23.693+0100 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/yyyyyyyy/xxxxxx/vsphere/1.24.3/linux_amd64/terraform-provider-vsphere_v1.24.3_x4 pid=28839
2021-01-27T12:45:23.693+0100 [DEBUG] plugin: plugin exited
...

Panic Output

Expected Behavior

Actual Behavior

Fail with in apply or plan
Error: at least one disk must have a unit_number of 0 for SATA or SCSI or 1 for IDE

on mod_vm_rhel_v5_import/main_v5_DEV_rhel_import.tf line 5, in resource "vsphere_virtual_machine" "mod_vm_v5":
5: resource "vsphere_virtual_machine" "mod_vm_v5" {

Steps to Reproduce

  1. terraform import ---> with instance with one SCSI disk (unit_number is 1)

  2. terraform apply

  3. ./terraform_136 plan -target module.dv77
    Refreshing Terraform state in-memory prior to plan...
    ...
    module.dv77.module.env_var.data.terraform_remote_state.global_var: Refreshing state...
    ...
    module.dv77.vsphere_virtual_machine.mod_vm_v5: Refreshing state...


Warning: Resource targeting is in effect
...
Error: at least one disk must have a unit_number of 0 for SATA or SCSI or 1 for IDE

on mod_vm_rhel_v5_import/main_v5_DEV_rhel_import.tf line 5, in resource "vsphere_virtual_machine" "mod_vm_v5":
5: resource "vsphere_virtual_machine" "mod_vm_v5" {

Important Factoids

instance state after import :
./terraform_136 state show module.dv77.vsphere_virtual_machine.mod_vm_v5
...
cdrom {
client_device = true
device_address = "ide:1:0"
key = 3002
}

disk {
    attach           = false
    controller_type  = "scsi"
    datastore_id     = "datastore-585"
    device_address   = "scsi:0:1"
    disk_mode        = "persistent"
    disk_sharing     = "sharingNone"
    eagerly_scrub    = true
    io_limit         = -1
    io_reservation   = 0
    io_share_count   = 1000
    io_share_level   = "normal"
    keep_on_remove   = true
    key              = 2001
    label            = "disk0"
    path             = "fr0-xxxxxxx-dv77/fr0-xxxxxxxxx-dv77-000001.vmdk"
    size             = 120
    thin_provisioned = false
    unit_number      = 1
    uuid             = "aaaaaa-bbbbbbb-cccccccc-ddddddddd-fffffffff"
    write_through    = false
}

network_interface {
    adapter_type          = "vmxnet3"
    bandwidth_limit       = -1
    bandwidth_reservation = 0
    bandwidth_share_count = 50
    bandwidth_share_level = "normal"
    device_address        = "pci:0:7"

...

References

error coming from 'vsphere/internal/virtualdevice/virtual_machine_disk_subresource.go' line 656

  • #0000

Community Note

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or other comments that do not add relevant new information or questions, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions