[python-win32] Unhelpful error when adding synthetic NIC
Mitch Oliver
mitch.oliver at gmail.com
Wed Aug 10 16:19:09 CEST 2011
I'm using WMI to (attempt to) add a sythetic ethernet port to a
Hyper-V VM. I'm getting the following error when I do so:
'testvm' failed to add device 'Microsoft Synthetic Ethernet Port'.
(Virtual machine ID B4A091C9-D1AD-4AA9-960D-64E64F620959)
The job has an error code of 32785, but I can find no mention of that
error in the docs.
I'm using the following code to add the NIC:
<code>
# open the connection to the hyper-v server
wmiConn = wmi.WMI('hyperv_server', namespace='virtualization')
# get the switch objects
switchSvcs = wmiConn.Msvm_VirtualSwitchManagementService()[0]
externalSwitch = wmiConn.query("SELECT * from Msvm_VirtualSwitch WHERE
ElementName like 'my_switch'")[0]
# create a new switch port
nicUUID = str(uuid.uuid4())
(newPort, retVal) = switchSvcs.CreateSwitchPort(nicUUID, nicUUID, "",
externalSwitch.path_())
# find the default switch
syntheticNICs = wmiConn.Msvm_SyntheticEthernetPortSettingData()
defaultNIC = [n for n in syntheticNICs
if n.InstanceID.rfind('Default') > 0]
# clone the default switch into a new object
clazz = wmiConn.__getattr__('Msvm_SyntheticEthernetPortSettingData')
newNIC = class.new()
for prop in defaultNIC._properties:
newNIC.Properties_.Item(prop).Value =
defaultNIC.Properties_.Item(prop).Value
# set data on the new NIC
newNIC.Connection = [newPort]
newNIC.ElementName = 'Fancy New VM NIC'
newNIC.VirtualSystemIdentifiers = [str(uuid.uuid4())]
# get the VM to which to add the NIC
vm = wmiConn.Msvm_ComputerSystem(ElementName='My Cool VM')[0]
# add the nic to the VM
mgtSvcs = wmiConn.Msvm_VirtualSystemManagementService()[0]
(jobPath, newResources, retVal) =
mgtSvcs.AddVirtualSystemResources([newNIC.GetText_(1)], vm.path_())
# check to see if we've started the job...
if retVal == 4096:
# check the job status
instanceID = jobPath.split('=')[1].strip('"')
job = wmiConn.Msvm_ConcreteJob(InstanceID=instanceID)[0]
while job.JobState == 4:
time.sleep(0.1)
job = wmiConn.Msvm_ConcreteJob(InstanceID=instanceID)[0]
if job.JobState == 10:
print '%d, %s', (job.ErrorCode,
mgtSvcs.FormatError([job.GetError()[0]]))
</code>
More information about the python-win32
mailing list