-
-
Save wiggin15/319b5e828c42af3aed40 to your computer and use it in GitHub Desktop.
def add_pci_to_vm(host_object, vm_object, host_pci_dev): | |
""" | |
host_pci_dev must be one of the devices from the host_object.hardware.pciDevice list | |
which is configured as a PCI passthrough device | |
""" | |
pci_passthroughs = vm_object.environmentBrowser.QueryConfigTarget(host=None).pciPassthrough | |
systemid_by_pciid = {item.pciDevice.id: item.systemId for item in pci_passthroughs} | |
if host_pci_dev.id not in systemid_by_pciid: | |
raise Exception("Not a passthrough device") | |
# According to the documentation, the deviceId is a signed short but the server expects the PCI device ID | |
# to be unsigned. TODO the modulu here is because of this, but I think it's not needed | |
deviceId = hex(host_pci_dev.deviceId % 2**16).lstrip('0x') | |
backing = vim.VirtualPCIPassthroughDeviceBackingInfo(deviceId=deviceId, | |
id=host_pci_dev.id, | |
systemId=systemid_by_pciid[host_pci_dev.id], | |
vendorId=host_pci_dev.vendorId, | |
deviceName=host_pci_dev.deviceName) | |
hba_object = vim.VirtualPCIPassthrough(key=-100, backing=backing) | |
new_device_config = vim.VirtualDeviceConfigSpec(device=hba_object) | |
new_device_config.operation = "add" | |
vm_object.ReconfigVM_Task(spec=new_device_config) |
Got the solution for TypeError:'vim.vm.device.VirtualDeviceSpec' object is not iterable.
I had to pass config_spec file as a list of specs not as a single spec file.
Thanks
@Jain123 Hi, I try the same and get error, and i pass config_spec file as a list of specs too, and get error too,can you show me how to add the pci dev?
Its been a while, hope it helps someone out there :)
`
...
...
hba_object = vim.VirtualPCIPassthrough(key=-100, backing=backing)
new_device_config = vim.VirtualDeviceConfigSpec(device=hba_object)
new_device_config.operation = "add"
vmConfigSpec = vim.vm.ConfigSpec()
vmConfigSpec.deviceChange = [new_device_config]
vm_object.ReconfigVM_Task(spec=new_device_config)`
vmConfigSpec = vim.vm.ConfigSpec()
vmConfigSpec.deviceChange = [new_device_config]
vm_object.ReconfigVM_Task(spec=new_device_config) -->> vm_object.ReconfigVM_Task(spec=vmConfigSpec)
And Don't forget about memory reservation, the vm would not start without it.
Hi Guys,
I am wondering How I can remove PCI card in a similar way you are discussing here,
according to https://github.com/vmware/pyvmomi/blob/master/docs/vim/vm/device/VirtualDeviceSpec/Operation.rst
it seem strait forward that the only modification needed is "remove" instead of the "add"
but I get the notorious, Invalid configuration for device '0',
What can I be missing?
regards.
EDIT
One way to remove vm pci's card is as follows:
spec = vim.vm.ConfigSpec()
spec.deviceChange = []
for dev in vm.config.hardware.device:
if isinstance(dev, vim.vm.device.VirtualPCIPassthrough):
vdspec = vim.vm.device.VirtualDeviceSpec()
vdspec.operation='remove'
vdspec.device = dev
spec.deviceChange.append(vdspec)
the_task = vm.ReconfigVM_Task(spec=spec)
Hello I'm not able to configure how to set memory reservation through the code so that my vm can start automatically through code.
Any help would be awesome.
regards.
EDIT
I figured it out how to set reserved memory.
For anyone wants to know add
vmConfigSpec.memoryReservationLockedToMax = True above vm_object.ReconfigVM_Task(spec=vmConfigSpec)
Cheers!
Basic question but How to set values of host_object, vm_object, host_pci_dev
To get vm_object
you can take a look at the pyvmomi community samples, or infi.pyvmomi_wrapper. Make sure it is not None
. host_object
can be the VM's runtime host - vm.summary.runtime.host
. For host_pci_dev
see the docstring.
what's docstring?
Does anyone know how to list VirtualPCIPassthrough's all VMs?
How to plugin dynamic Passthrough device to a VM using pyvmomi sdk? Does anyone know anything about this?
I tried the same(without changing anything) and getting TypeError.
TypeError: For "spec" expected type vim.vm.ConfigSpec, but got vim.vm.device.VirtualDeviceSpec
(With Changes)
I have created an object of Virtual Machine Config Spec and got different TypeError.
vm_spec=vim.vm.ConfigSpec()
vm_spec.deviceChange=new_device_config
TypeError: 'vim.vm.device.VirtualDeviceSpec' object is not iterable
please help me to sort it out.
Thanks