VMware {code} Community
yluinca
Contributor
Contributor

Failed to add nvdimm device using pyvmomi package

Hello, I'm new to the sdk development. I'm 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. Here is the captured code from the developer center (adding 10G nvdimm device, the nvdimm controller already added with controller key of 27000):

#---------------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
}

Reply
0 Kudos
2 Replies
_vladi_
VMware Employee
VMware Employee

Hi,

This forum is for the vSphere Client SDK and UI plugins.

Please try the vSphere-Management SDK forum for this kind of questions.

Cheers,

Vladi

 

Reply
0 Kudos
yluinca
Contributor
Contributor

Thanks. Will do.

Reply
0 Kudos