I was advised to post this question in this forum. I was trying to add nvdimm controller and device to my VM via pyvmomi package. The adding of nvdimm controller works fine, but not the device. The same operation works fine with vCenter (7.0) web interface. Then I turned on code capturing feature in vcenter developer center, tried pretty much the same script (only changed the device_key to avoid duplicate key), it failed the same way. Also, I tried to replay the captured code in powercli, it also failed with the same error. Here is the captured code from the developer center (adding 10G nvdimm device, the nvdimm controller already added with controller key of 27000). Any help is appreciated!
#---------------ReconfigVM_Task---------------
spec = vim.vm.ConfigSpec()
spec_deviceChange_0 = vim.vm.device.VirtualDeviceSpec()
spec_deviceChange_0.fileOperation = create
spec_deviceChange_0.device = vim.vm.device.VirtualNVDIMM()
spec_deviceChange_0.device.backing = vim.vm.device.VirtualNVDIMM.BackingInfo()
spec_deviceChange_0.device.backing.fileName = ''
spec_deviceChange_0.device.controllerKey = 27000
spec_deviceChange_0.device.capacityInMB = 10240
spec_deviceChange_0.device.deviceInfo = vim.Description()
spec_deviceChange_0.device.deviceInfo.summary = 'New NVDIMM'
spec_deviceChange_0.device.deviceInfo.label = 'New NVDIMM'
spec_deviceChange_0.device.key = -111
spec_deviceChange_0.operation = add
spec.deviceChange = [spec_deviceChange_0]
spec.cpuFeatureMask = []
managedObject.ReconfigVM_Task(spec) # VirtualMachine-vm-933962
The test code to add another device of 8GB to the same vm:
def add_nvdimm_device(si, vm_obj):
# Add NVDIMM device
nvdimm_spec = vim.vm.device.VirtualDeviceSpec()
nvdimm_spec.fileOperation = "create"
nvdimm_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
nvdimm_spec.device = vim.vm.device.VirtualNVDIMM()
nvdimm_spec.device.deviceInfo = vim.Description()
nvdimm_spec.device.deviceInfo.summary = "New NVDIMM"
nvdimm_spec.device.deviceInfo.label = "New NVDIMM"
nvdimm_spec.device.backing = vim.vm.device.VirtualNVDIMM.BackingInfo()
nvdimm_spec.device.backing.fileName = ""
nvdimm_spec.device.capacityInMB = 8192
nvdimm_spec.device.key = -114
nvdimm_spec.device.controllerKey = 27000
spec = vim.vm.ConfigSpec()
spec.deviceChange = [nvdimm_spec]
spec.cpuFeatureMask = []
task = vm_obj.ReconfigVM_Task(spec=spec)
tasks.wait_for_tasks(si, [task])
return True
Error msg:
pyVmomi.VmomiSupport.InvalidDeviceSpec: (vim.fault.InvalidDeviceSpec) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
msg = "Invalid configuration for device '0'.",
faultCause = ,
faultMessage = (vmodl.LocalizableMessage) [
(vmodl.LocalizableMessage) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
key = 'com.vmware.vim.vpxd.vmprov.invalidNVDIMMPolicy',
arg = (vmodl.KeyAnyValue) [],
message = 'com.vmware.vim.vpxd.vmprov.invalidNVDIMMPolicy'
},
(vmodl.LocalizableMessage) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
key = 'com.vmware.vim.vpxd.vpx.vmprov.DeviceStr',
arg = (vmodl.KeyAnyValue) [
(vmodl.KeyAnyValue) {
dynamicType = ,
dynamicProperty = (vmodl.DynamicProperty) [],
key = 'deviceStr',
value = 'New NVDIMM'
}
],
message = 'Device: New NVDIMM.'
}
],
property = '',
deviceIndex = 0
}
Did you ever get your questioned answered?
I am having the same problem. I was able to use this method of using the development capture to do the following:
But it fails when trying to add the NVDIMM device with the same error about 'Invalid configuration for device '0'. Device: New NVDIMM. com.vmware.vim.vpxd.vmprov.invalidNVDIMMPolicy'