vmware / vmware/pyvmomi

Adding a RDM fails with vim.fault.InvalidDiskFormat

Open
#542 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

needs verification
Dominant language
Python
Stars
2.3k
Forks
763
PR merge metrics
No merged PRs in 30d

Description

I'm trying to manually clone a VM with a RDM disk attached but when I try to create the new VM the process fails with vim.fault.InvalidDiskFormat. The process is as follows.

  1. Get the old VM and copy the RDM specs
  2. Shut the old VM down
  3. Use the previous obtained RDM specs to create a new RDM mapping on the new VM

I've included the hostd.log and the code that creates the new RDM mapping for the new VM.

Is there something I'm missing, the vSphere API isn't really clear if I need to do some additional steps before readding the RDM. Any help would be appreciated.

disk_specs = []
for device in old_vm.config.hardware.device:
	if isinstance(device, vim.vm.device.VirtualDisk):
		if isinstance(device.backing, vim.vm.device.VirtualDisk.RawDiskMappingVer1BackingInfo):
			disk_spec = vim.vm.device.VirtualDeviceSpec()
			disk_spec.fileOperation = "create"
			disk_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
			disk_spec.device = vim.vm.device.VirtualDisk()
			disk_spec.device.backing = \
				vim.vm.device.VirtualDisk.RawDiskMappingVer1BackingInfo()

			disk_spec.device.backing.lunUuid = device.backing.lunUuid
			disk_spec.device.backing.deviceName = device.backing.deviceName
			disk_spec.device.backing.compatibilityMode = device.backing.compatibilityMode
			disk_spec.device.backing.diskMode = device.backing.diskMode
			disk_spec.device.backing.uuid = device.backing.uuid

			disk_spec.device.unitNumber = device.unitNumber
			disk_spec.device.controllerKey = virtual_scsi_controller_spec.device.key
			disk_spec.device.capacityInKB = device.capacityInKB

			disk_specs.append(disk_spec)
2017-04-22T12:39:06.605Z info hostd[F7C2B70] [Originator@6876 sub=Vmsvc.VmDiskMgr opID=cbb1865f user=root] For disk [datastore1] new_vm/new_vm_1.vmdk, Error creating disk: The specified device is not a valid physical disk device
2017-04-22T12:39:06.605Z verbose hostd[F7C2B70] [Originator@6876 sub=PropertyProvider opID=cbb1865f user=root] RecordOp ASSIGN: latestEvent, ha-eventmgr. Applied change to temp map.
2017-04-22T12:39:06.605Z info hostd[F7C2B70] [Originator@6876 sub=Vimsvc.ha-eventmgr opID=cbb1865f user=root] Event 1217 : Cannot create virtual disk
2017-04-22T12:39:06.605Z info hostd[F7C2B70] [Originator@6876 sub=Vmsvc.vm:/vmfs/volumes/58c7f78c-2ce5e343-1631-18a90576f6c0/new_vm/new_vm.vmx opID=cbb1865f user=root] Reconfigure failed: vim.fault.InvalidDiskFormat
2017-04-22T12:39:06.609Z info hostd[F7C2B70] [Originator@6876 sub=Vmsvc.vm:/vmfs/volumes/58c7f78c-2ce5e343-1631-18a90576f6c0/new_vm/new_vm.vmx opID=cbb1865f user=root] Create failed with given spec: /vmfs/volumes/58c7f78c-2ce5e343-1631-18a90576f6c0/new_vm/new_vm.vmx
--> (vim.vm.ConfigSpec) {
-->    changeVersion = <unset>,
-->    name = "new_vm",
-->    version = "vmx-08",
-->    uuid = <unset>,
-->    instanceUuid = <unset>,
-->    npivNodeWorldWideName = <unset>,
-->    npivPortWorldWideName = <unset>,
-->    npivWorldWideNameType = <unset>,
-->    npivDesiredNodeWwns = <unset>,
-->    npivDesiredPortWwns = <unset>,
-->    npivTemporaryDisabled = <unset>,
-->    npivOnNonRdmDisks = <unset>,
-->    npivWorldWideNameOp = <unset>,
-->    locationId = <unset>,
-->    guestId = "centos64Guest",
-->    alternateGuestName = <unset>,
-->    annotation = <unset>,
-->    files = (vim.vm.FileInfo) {
-->       vmPathName = "[datastore1]",
-->       snapshotDirectory = "[datastore1]",
-->       suspendDirectory = <unset>,
-->       logDirectory = <unset>,
-->       ftMetadataDirectory = <unset>
-->    },
-->    tools = (vim.vm.ToolsConfigInfo) null,
-->    flags = (vim.vm.FlagInfo) null,
-->    consolePreferences = (vim.vm.ConsolePreferences) null,
-->    powerOpInfo = (vim.vm.DefaultPowerOpInfo) null,
-->    numCPUs = 2,
-->    numCoresPerSocket = 2,
-->    memoryMB = 4096,
-->    memoryHotAddEnabled = <unset>,
-->    cpuHotAddEnabled = <unset>,
-->    cpuHotRemoveEnabled = <unset>,
-->    virtualICH7MPresent = <unset>,
-->    virtualSMCPresent = <unset>,
-->    deviceChange = (vim.vm.device.VirtualDeviceSpec) [
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualIDEController) {
-->             key = -122,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualDevice.BackingInfo) null,
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) null,
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = <unset>,
-->             unitNumber = <unset>,
-->             busNumber = 0,
-->             device = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualSIOController) {
-->             key = -47,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualDevice.BackingInfo) null,
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) null,
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = <unset>,
-->             unitNumber = <unset>,
-->             busNumber = 0,
-->             device = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualCdrom) {
-->             key = 0,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualCdrom.IsoBackingInfo) {
-->                fileName = "[datastore1] iso/centos.iso",
-->                datastore = <unset>,
-->                backingObjectId = <unset>
-->             },
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) {
-->                startConnected = true,
-->                allowGuestControl = true,
-->                connected = true,
-->                status = <unset>
-->             },
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = -122,
-->             unitNumber = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualFloppy) {
-->             key = 0,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualFloppy.ImageBackingInfo) {
-->                fileName = "[datastore1] floppy/floppy.flp",
-->                datastore = <unset>,
-->                backingObjectId = <unset>
-->             },
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) {
-->                startConnected = true,
-->                allowGuestControl = true,
-->                connected = true,
-->                status = <unset>
-->             },
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = -47,
-->             unitNumber = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.ParaVirtualSCSIController) {
-->             key = -61,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualDevice.BackingInfo) null,
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) null,
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = <unset>,
-->             unitNumber = <unset>,
-->             busNumber = 0,
-->             device = <unset>,
-->             hotAddRemove = <unset>,
-->             sharedBus = "noSharing",
-->             scsiCtlrUnitNumber = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualUSBController) {
-->             key = -1,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualDevice.BackingInfo) null,
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) null,
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = <unset>,
-->             unitNumber = <unset>,
-->             busNumber = 0,
-->             device = <unset>,
-->             autoConnectDevices = true,
-->             ehciEnabled = true
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = "create",
-->          device = (vim.vm.device.VirtualDisk) {
-->             key = 0,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualDisk.FlatVer2BackingInfo) {
-->                fileName = "",
-->                datastore = <unset>,
-->                backingObjectId = <unset>,
-->                diskMode = "persistent",
-->                split = <unset>,
-->                writeThrough = <unset>,
-->                thinProvisioned = true,
-->                eagerlyScrub = <unset>,
-->                uuid = <unset>,
-->                contentId = <unset>,
-->                changeId = <unset>,
-->                parent = (vim.vm.device.VirtualDisk.FlatVer2BackingInfo) null,
-->                deltaDiskFormat = <unset>,
-->                digestEnabled = <unset>,
-->                deltaGrainSize = <unset>,
-->                deltaDiskFormatVariant = <unset>,
-->                sharing = <unset>,
-->                keyId = (vim.encryption.CryptoKeyId) null
-->             },
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) null,
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = -61,
-->             unitNumber = 0,
-->             capacityInKB = 26214400,
-->             capacityInBytes = <unset>,
-->             shares = (vim.SharesInfo) null,
-->             storageIOAllocation = (vim.StorageResourceManager.IOAllocationInfo) null,
-->             diskObjectId = <unset>,
-->             vFlashCacheConfigInfo = (vim.vm.device.VirtualDisk.VFlashCacheConfigInfo) null,
-->             iofilter = <unset>,
-->             vDiskId = (vim.vslm.ID) null
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = "create",
-->          device = (vim.vm.device.VirtualDisk) {
-->             key = 0,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualDisk.RawDiskMappingVer1BackingInfo) {
-->                fileName = "",
-->                datastore = <unset>,
-->                backingObjectId = <unset>,
-->                lunUuid = "0200050000600c0ff0001a5474dfcdf95801000000503230303020",
-->                deviceName = "vml.0200050000600c0ff0001a5474dfcdf95801000000503230303020",
-->                compatibilityMode = "physicalMode",
-->                diskMode = "independent_persistent",
-->                uuid = <unset>,
-->                contentId = <unset>,
-->                changeId = <unset>,
-->                parent = (vim.vm.device.VirtualDisk.RawDiskMappingVer1BackingInfo) null,
-->                deltaDiskFormat = <unset>,
-->                deltaGrainSize = <unset>,
-->                sharing = <unset>
-->             },
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) null,
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = -61,
-->             unitNumber = 1,
-->             capacityInKB = 292659392,
-->             capacityInBytes = <unset>,
-->             shares = (vim.SharesInfo) null,
-->             storageIOAllocation = (vim.StorageResourceManager.IOAllocationInfo) null,
-->             diskObjectId = <unset>,
-->             vFlashCacheConfigInfo = (vim.vm.device.VirtualDisk.VFlashCacheConfigInfo) null,
-->             iofilter = <unset>,
-->             vDiskId = (vim.vslm.ID) null
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualVmxnet3) {
-->             dynamicProperty = <unset>,
-->             key = 0,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualEthernetCard.NetworkBackingInfo) {
-->                deviceName = "NET1",
-->                useAutoDetect = <unset>,
-->                network = 'vim.Network:HaNetwork-NET1',
-->                inPassthroughMode = <unset>
-->             },
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) {
-->                startConnected = true,
-->                allowGuestControl = false,
-->                connected = true,
-->                status = <unset>
-->             },
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = <unset>,
-->             unitNumber = <unset>,
-->             addressType = <unset>,
-->             macAddress = <unset>,
-->             wakeOnLanEnabled = <unset>,
-->             resourceAllocation = (vim.vm.device.VirtualEthernetCard.ResourceAllocation) null,
-->             externalId = <unset>,
-->             uptCompatibilityEnabled = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       },
-->       (vim.vm.device.VirtualDeviceSpec) {
-->          operation = "add",
-->          fileOperation = <unset>,
-->          device = (vim.vm.device.VirtualVmxnet3) {
-->             dynamicProperty = <unset>,
-->             key = 0,
-->             deviceInfo = (vim.Description) null,
-->             backing = (vim.vm.device.VirtualEthernetCard.NetworkBackingInfo) {
-->                deviceName = "VM Network",
-->                useAutoDetect = <unset>,
-->                network = 'vim.Network:HaNetwork-VM Network',
-->                inPassthroughMode = <unset>
-->             },
-->             connectable = (vim.vm.device.VirtualDevice.ConnectInfo) {
-->                startConnected = false,
-->                allowGuestControl = false,
-->                connected = false,
-->                status = <unset>
-->             },
-->             slotInfo = (vim.vm.device.VirtualDevice.BusSlotInfo) null,
-->             controllerKey = <unset>,
-->             unitNumber = <unset>,
-->             addressType = <unset>,
-->             macAddress = <unset>,
-->             wakeOnLanEnabled = <unset>,
-->             resourceAllocation = (vim.vm.device.VirtualEthernetCard.ResourceAllocation) null,
-->             externalId = <unset>,
-->             uptCompatibilityEnabled = <unset>
-->          },
-->          profile = <unset>,
-->          backing = (vim.vm.device.VirtualDeviceSpec.BackingSpec) null
-->       }
-->    ],
-->    cpuAllocation = (vim.ResourceAllocationInfo) null,
-->    memoryAllocation = (vim.ResourceAllocationInfo) null,
-->    latencySensitivity = (vim.LatencySensitivity) null,
-->    cpuAffinity = (vim.vm.AffinityInfo) null,
-->    memoryAffinity = (vim.vm.AffinityInfo) null,
-->    networkShaper = (vim.vm.NetworkShaperInfo) null,
-->    cpuFeatureMask = <unset>,
-->    extraConfig = <unset>,
-->    swapPlacement = <unset>,
-->    bootOptions = (vim.vm.BootOptions) {
-->       bootDelay = <unset>,
-->       enterBIOSSetup = <unset>,
-->       efiSecureBootEnabled = <unset>,
-->       bootRetryEnabled = <unset>,
-->       bootRetryDelay = <unset>,
-->       bootOrder = (vim.vm.BootOptions.BootableDevice) [
-->          (vim.vm.BootOptions.BootableCdromDevice) {
-->          }
-->       ],
-->       networkBootProtocol = <unset>
-->    },
-->    vAppConfig = (vim.vApp.VmConfigSpec) null,
-->    ftInfo = (vim.vm.FaultToleranceConfigInfo) null,
-->    repConfig = (vim.vm.ReplicationConfigSpec) null,
-->    vAppConfigRemoved = <unset>,
-->    vAssertsEnabled = <unset>,
-->    changeTrackingEnabled = <unset>,
-->    firmware = <unset>,
-->    maxMksConnections = <unset>,
-->    guestAutoLockEnabled = <unset>,
-->    managedBy = (vim.ext.ManagedByInfo) null,
-->    memoryReservationLockedToMax = <unset>,
-->    nestedHVEnabled = <unset>,
-->    vPMCEnabled = <unset>,
-->    scheduledHardwareUpgradeInfo = (vim.vm.ScheduledHardwareUpgradeInfo) null,
-->    vmProfile = <unset>,
-->    messageBusTunnelEnabled = <unset>,
-->    crypto = (vim.encryption.CryptoSpec) null,
-->    migrateEncryption = <unset>
--> }
2017-04-22T12:39:06.635Z info hostd[F7C2B70] [Originator@6876 sub=Vmsvc.vm:/vmfs/volumes/58c7f78c-2ce5e343-1631-18a90576f6c0/new_vm/new_vm.vmx opID=cbb1865f user=root] Exception thrown vim.fault.InvalidDiskFormat

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the RDM creation code in the issue and the accompanying hostd.log, focusing on the VirtualDeviceSpec and RawDiskMappingVer1BackingInfo values sent during new VM creation. Compare the submitted disk specification with the logged ConfigSpec and determine what change is needed for the new VM creation to complete without vim.fault.InvalidDiskFormat.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.