VMware {code} Community
yluinca
Contributor
Contributor

Couldn't add nvdimm device via sdk in powercli or python script

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
}

0 Kudos
1 Reply
w_beach
Contributor
Contributor

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:

  • Remove NVDIMM Device
  • Add NVDIMM Controller

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'

0 Kudos