EzDevInfo.com

pyvmomi

VMware vSphere API Python Bindings

Is there any way to restart ESX management network through python PyVmomi

I am trying to restart an ESX management network through Python Pyvmomi. Even after Google search I did not find any relevant API to do so. Please help me if there is any API which can restart/stop ESX management network which is managed by VCentre.


Source: (StackOverflow)

how to create a vm snapshot using pyvmomi

I have a task of implementing a basic backup and recovery system within a django app. I have heard of pyvmomi, but never used it before. My specific tasks at hand is:

1) make a call to a vCenter, pass the vm name, and request to make a snapshot 2) obtain the file location of the snapshot 3) and upload the snapshot file into an OpenStack Swift object store

What is the actual syntax of creating a vm snapshot using pyvmomi? Also - what is the syntax to request the actual snapshot file from vCenter?


Source: (StackOverflow)

Advertisements

Pyvmomi : Capture vcenter reset event for vms

I am using pyvmomi for capturing vcenter events using WaitForUpdatesEx method. But it is not able to capture vm's reset event as there is no property change in this case.

It is capturing poweron, poweroff, suspend events as state changes for them. For all other vm related events, i am in constant state of waiting using WaitForUpdatesEx method.

Can anyone help me as i have a case where i want to perform some specific action in case vm reset event has occurred.


Source: (StackOverflow)

pyvmomi - Listing of all VMs

I have a lot of VM (dispatch with 2 hosts) and I would like to list all of them.

TO do that, i use this:

atexit.register(connect.Disconnect, self.si)
content = self.si.RetrieveContent()
children = content.rootFolder.childEntity

    for child in content.rootFolder.childEntity:

        if hasattr(child, 'vmFolder'):
            datacenter = child
            vmFolder = datacenter.vmFolder
            vmList = vmFolder.childEntity

        for vm in vmList:
            self._getInfosVms(vm)

For my main method with this method:

 def _getInfosVms(self, vm, depth = 1, i = 0):
        maxdepth = 10

        if hasattr(vm, 'childEntity'):
            if depth > maxdepth:
                return
            vmList = vm.childEntity
            for c in vmList:
                self._getInfosVms(c, depth+1)
            return

        print(vm.summary)

This code list all basic informations about vms but for some vm I have an error. I can't display vm.summry but I can print vm.

error:

File "/python_project/packages/pyVmomi/VmomiSupport.py", line 560, in call

 return self.f(*args, **kwargs)

File "/python_project/packages/pyVmomi/VmomiSupport.py", line 383, in _InvokeAccessor

 return self._stub.InvokeAccessor(self, info)

File "/python_project/packages/pyVmomi/StubAdapterAccessorImpl.py", line 42, in InvokeAccessor

 options=self._pcType.RetrieveOptions(maxObjects=1))

File "/python_project/packages/pyVmomi/VmomiSupport.py", line 566, in

 self.f(*(self.args + (obj,) + args), **kwargs)

File "/python_project/packages/pyVmomi/VmomiSupport.py", line 375, in _InvokeMethod

 return self._stub.InvokeMethod(self, info, args)

File "/python_project/packages/pyVmomi/SoapAdapter.py", line 1291, in InvokeMethod

     raise exc

pyVmomi.SoapAdapter.ParserError: 'xml document:
\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xedZ[o\xe3\xba\x11~\xdf_A\xf8\xa9\x05"\xcb\xb2|I\x0c\xae\x0e\x12\xc7\xd9\x04\x8d\xb3\x86\x9d\r\x82S\x14\x05-\xd11\x1b\x89\xd4!);>\xbf\xbeCJ\xf2J\xbe\x9d\x05Z\xbf\xe5\xc9\xe2\xcc7\x17\x0e\x87\xd4\x0ce\xfc\xdbG\x12\xa3\x15\x95\x8a\t\xfe\xb5\xe15[\rDy("\xc6\xdf\xbe6~<\xdf9\x97\x8d\xdf\x82/X\t\x92R\xbe\x1a\x8c\xf8\x8a\xc6"\xa5\x08\xc4\xb8\x1a\xe4\xe4\xf0kc\xa9u:p]\x15.iBT\x13\xb8\x86\xd5\x14\xf2\xcd5\x0fn\xa9\xd3m|\xa9\x89\xae~E47\xf9S\xf4CE[\xb1\xf5z\xdd\\\xfb\x16\xddn\xb5<\xf7u\xfc8\xb3\x9a*h\xf6\xd7h\x87q\xa5\t\x0fi\xa32\xd9\x1b\x11m`8\xa5Z2\xba\xa2\x13\t^H\xcd\xa8\x1a}L\xa9J\x05WE\x1c\xbe62\xc9\x07+\x96\xb4\xbb\x8d\x00K\xaaa\xb8"q\x80\xc5\xfc?4\xd4\xca>
\xbdI\xe9\xd7\xc6\x0b\x93:#\xf1\x98\x84K\xc6\xc1\xdc*q<\xaf\x83]@\x048\x05\x133\xaa\x03\xccIB\x03\x95%\t\x91\x1b\xec\xda\x11\x06\x8d\x08&38\xa4g\x96C\xc1\xfa*\xf9\x0bC\xab\x04\\\xcc\xb8fFgDW,\xa4[\xc2L\x13M\x8f\x1a\xb9\xb5\xe0i\x0e}\xe0\x0bQ\xb0GzI%\xa7zHd4\xad(\xb2\xde\xdc2\t!\x98\x10\xbd\xfcFy\xfb:\xd4lE\x83\x05\x89\x155\xae\x1c\xe4\xeeI=pb9SJ\x94\xe0/\t\xcc\xe5)\xd5\x0f\x90SIJ4\x9b\xc7\xf4:"\xa9\xa6\xf2\x19\xbc\xdeW\xbb\'\x8e\xdd\xea|\x03\xfcN7A\xa7\xd5ja\xd7<a\xb7\x8c\xcagt*\xd1\xf1>\xa3s":\xed\xcf\xe8\x9c\x88\x8e\xff\x19\x9d\x13\xd1\xe9|F\xe7Dt\xba\x9f\xd19\x11\x9d\xdegtND\xa7\xff\x19\x9d\x13\xd1\xb9\xfc\x8c\xce\x89\xe8\\\xedFg)\x94.j\xeb{x\x9cm\x94\xa6I#0d\xa7\xe3\xb5\xe1\x147\x8f\x01\x0e\x05\xe7`\x0f\x1a\xaa\\a1\xa6\x11vwY8\x15k*\xf3g\xfbH\xa3\xef\x1c\xbb\x15*^\x90,\xd6\xcf"\xa6\xd2\xb4\'9\x91\x0b=\x14|\xc1\xde2i\xb4\x1e\x82\xe0\x88\xa8\x97\x04Z\x16\x9d\xdb\xb3\x84bH\xa3@\xcb\x0cBS#\xd9a]D\x0b\x11\xab\x07\xd3\x19\xc5\xa0|,
L\x00,\x96\xeb0\x13\xcf\x85\xd0\xcf\xa6\xb7h\xb7\xbc\xae\xd3\xf2\x1c\xaf\xfd\xec\xf9\x83\x967\xe8\xf8\xcd^\xbf\xdf\xefv~\xc7\xee\x16\x85U\xa6\xa0\xd9\x8a\x1e@Z\x9a\x9e\t\x8a\xf0]\x12Nh"\xe4\xe6;\xb4\xa9KJ\xa2\xa0\xd3\xf1\xfd\xaeg^\x9b;\x0c\x9c\x90\x8fa\x9a\xfdP\xe4\r\xec_]\xc1\x12V)\x86=\xb6\x12\xf9\xd8k\x99E\xdb!b\x9e%\xe3w5\xdc\xae\x942.\xed\x13\xa1\xcd\x0b\x05d8Mc\xb2\xc9c\xce\x8a\xcc\x82\x84\xda\xe3a\xc1c\xd3\xa7A\x93\x19\xcd7e\x0c\xebD\x9c0>\xa5\x7fd\x90\xae\xd1\xe8e8\x16\x11\xfd\x07d
I"\xe7M\xd2\xcd\x12B\x1c9\\\xf8\x11\x17k\xf0\xfb
\xd8d\x9f\x121\x8b\x88q\xf3\x89\xd2\xe8\xe7\x8a\x1dba\xb1X\x18\x1f\xee(\x81\xae\x95\x16\x1a\x13\xcau\xbe\x11\xc24cQ3N\x8a\xcd\xb0\xc8aO\xa6!\xfd\xc9\xaaRM\x9b\x9a\xd1\xe0\x06\xb2c0f|\x00mCN\x81\xd9\x1e7\xb58i\xde\xbf}\x9aLGw\xa3\xe7\xe1\xfdQ?j\x98_t\xe8\x90\xd5\xd3\x9e\\\xdf\x8c\x8fz`y\xe7\xb3<\xbe=n\xd9\xf0\xcefy8\x9e\xbc\x0e\xef\xbfy\xbd\x9b\xa3\x0eT!g\xf3c\xf4\xfa|=y\x18\xce&\xc3\xa3~T!g\xf3\xe3\xee\xeeu6=\xeaB\xc1=\x9b\xf5\xc7\xeb\xfb\xbb^\xe7\xa8\xf9\x92}>\xfb\xc77\xc0\xe39\xf3\x7f\xfc0\xbb~|\xf8\xf64\xba\xfd\xf7l6:\xea\xc3.\xec|\xfe\x8c_!\xdb\x8e\xfbQ\xb0\xcff\xff\xe9\xf5\xa8m\xc3:\x9b\xdd\xc9\xf7\xc9\xf0\xe9\xf8\xbcK\xf6\xd9\xecOo\x9fg\xc3\xc9Q\xfb%\xfbl\xf6!\xab\xfc\xa3\xd6s\xe69mw\xaeO\x197\xdc\xff\xc1zY\x08\x07\xf8-\xa3\xa6\x94\xb5?\x0fP@HJ\xe7*\xeau\xbe\x19\x02vKz\x0e\xb8\xcb\xe2\xd8\x9a\xbb\x03\xd8\xcd\xec\x16\xfd\xad\xd7q\xe6L\xff\xbd\x00n\xf9yAi\n\xa2L\x05\xf6\xf9\xfb{QH\x16\xc4\x1c\xf1\x92\x7f\x8f(hV\xc7\xb3\xa1\xff\xe0\t\xe1P\xa4E\x85P\x1dw@\xb6\xfd\xab\xc2\xedB\x1a\
x1a\x16\xce\xf8\xdb\x9e\xe5\x82^\x88\xd6Q\xb61\xb0\xf3K\x17\x8arE\x9b+f4\xaf\xe9\xdc\xc9\x0b\xbc\xe6B\xe6\xcdA\x1e\x05\x96^G\x91\xa4J\x05~\xbf\xd9\xbdjz\xf0\xe3\xb5\xa1X\xfd\xc9("g\xcb9\xa8\xf3\x8b\x0f\x02\xe9bf\xf4\x97\x1f\x04\xa0\xfd\x80\x02So\x1b\xa8\xed\x18Z&\xd3\xedXk\xffL\xc3\xd0i\xb5|\xbf\xd3\xfb\x17*\x1ct\xb7\x8e&\x1f\xa6A\xda\x82\x8bJ{\xc6\xfe\xa4\xe3\x9b\xb2>\xae\x920\xa4\xda\x94*S\x97\xdb\x16\x01J\xe3\x1dJ\xa1b\x07\xb4O4u6T\xe6\x81g\x8bk\xf3d(\xd5\xe6Q\x81\x03\x96Y\'\x1aX\xd1j\xde2\xf5\xae\n\r5\x12\xce`C\x04\x9d\xb6\xef\xf7=\xdfs\x16~\xe49\xddE\x7f\xee\xf4[\xbd\x85\xe3\xfbW\xd0\xaf\xf5.I\xe8A\x0bl\xa1\xb8\xfc\xfe\xf3\xc3\x8c\xba\x10.o\xde%N\xbf\xd7\xf6\x9d\x88\xb4\xe7\x0e\xed\xcdC\xe7\xaa\xdd\x9e\xcf\xfdE\xbf\xe3G
X\x13\xf9\xbfo\x15\xc2\xa1\xcb\xcbCU,;b\n\x11d\xf4_
\x01\r\x12R"\x93!Ea\xa6\xb4H`}"\x141\xa5%\x9bgF\x0c\x89\x05*\xadh\xc2b\x01\x8d\x02Z\x08\x892PE\xac*\xd8\xf8k\xe8\xde\x10\xb4\x1fH\x8a\x0c\xda\xad&z\xe0\x88D\x11\xb3\x1a\xb4@s\n\x89\x0eX\xdb\x92.\xb2\xf8\x02-b\xfaa\x9a\xec\xad\xb8\x05\x14\x1a\xcc\xb3\xc9A\xb0\x93\\
\xa6\x11\xe3a\x9cE\xd4\x98\x8b\x050c\xf0\xd0x&\xa9\xc9Tp(?\x86\x94\xd5\x00fH\xf8\x0e{\x14)\xdb\\#\xd0.\xd6F\xe7"\x93&\t\x10\xfdH\x01H\xe6,fz\x83\xd6LCS\xa4\xad\xc3\x00\x9a\xc7\x82h\xab(\x85\x1e\x16N2\x12#E\xc3L\x1a\xec*\x8b94\xc8V\x92\x81=\x98\x1bhDs\x02\xd1\xa8\x86\xad\x89j\xe1NE\x9a\xc5D\xa2T\n\xf3)\xcf\x9aD\x90\xcb\x14\xa4\tG\x1eJ\x18D\x00b\x15\x895\x07\xfb\x91B\n\xe6\x0c\xd2Z\x99\xc9\xd3\xd4(\xbd\xc8\xbd\x92b\x05\xcb\xc68\nM\xb7\x1c\xc3FG,o\xa0\xedB+\x04\r\xfc\x9b\x9d\xae\x14\tR\x89Y\x9b\xa5H(\x82\xe4_\x0b\xf9\xae\x8c\n\xdb\x9d\xdb5\x99\x0c\xf3\xa8q\xf4:\x17\x1ffF\xe0)\x04\x0fz\xcfT\xc8\\\xe5\x05\xca8\xb3\xdfw\xed\xac\r^\xd8H\n\xf9F8\xfb\xb30\\\xd1kB\xaa\x00\xa7\xcc2\x15\x86Q~\x07\xa2\x9a\xd8\xad\xe4\xa5\xf9\\\x19ea\xf1\x8a*\xbf\x9e\x851Q\xca$\xbc\xbb}*w\x8a\xa5V\x07\x87N5\x08Q$d`\xd2vB%\xbc\x8d
-/\xd0\xe3#\x94\xf4\x05\x0b\x17\xdf\xab\x83v\xb3\xd5\xf4\x9d\xe9\xe8qtmj\xbd\x92\x8c!O\xe3\x97r\xe0\xd6F\xb9\x8a\x1f2\x0e*\x9f\x84\xcb\xe3\x10bR\x1a1\x88r~\xa7\xd0\x15\x08&ij\x7f\xdd\xed\xc36@\xc52\xc3\x8bX\x97M{yj\x1fb\xd9^\xdd\x9e\xfb\xb0\xb5\xa5\xbd\x96\x08E\x920m\xaeXz\xdd\xaew\xd9o\xb5\xdb\x06U\x12q\xc6\x7f\x0e\xbc\x96\xd7\xbf\xea\xf8W\xf6\x8e\xa4\xca\x00\x94Z\x12YW\xb2\xa5a\xf3\xee\x07g\x92\xb4\xb8\xbc\xe9:\xed\xde\xb3\xd7\x1at/\x07\xad^\xb3\xd7\xed\xb7\xbb\x97\xbf\xc3{f\x0b\xc3\xee\xd6?\xf0<|7oD\xf3\xb5\x1bV\x02\xa6\xb4\xbdx\xf1/\xe1\xe5\xb6K\xac\xa0n)\xbc\x9a\xa3]XA\xcd\x0f\xce\xea\x15M\xdf+N\xcb\xda\xbd\x8dy\xbfV\t\x9d^q#WCY\xb9{J\xa4\x9e\xc3\xc9S\xbe\xe7\xe1\x98\xe4\x85\xce]\x1e\xde\x1e\x0e4\x02\xa7Fp\xac\xc0\xce\xb5\xf5\x92\xdf\x05\x7f\x8f\xb3\xab\x92\xb9\x0f5\xe1\xab^Mx\x1f\x01k\x0f\xfb,\xdc\xd1\xda\xed\xf4M\xd4\x0fp\n\xfc\xbe"\xcf\xeb\xb5J\x99\x03fR\xc9\xe0\x9dLs\x0e\x94$\x9e\xc9\xdb*\t\xe7\xf9Q\x8cz](qk\x14\xac\xd6\x90\xf1\xdb\xa1\xb1U#\xe0\xb99\xc7\x05\xaf"vI\xf6\xde*
KhT^\xe6\x95\xeet\xf3{\xab\x03,\xbc\xd0\x8f\xe2\xed\x06rd\xcd"\xbd\x0c\x1cp|\x87\x04\x90\x19\x05\xf1\x88\xc8\xcd#L\x88\x87\x9b\x02\xb6G6\xda\xf2\xc7mR\x90\x8dUX\xa3\x9a}\x98\x9a\x12\xad:\x99=\x1a\xceR{\xa1l\x8d@\x85\xe2\x99\xadc\xbeF\xd4\xe9X\xa9h\xb6\x17\xbb]\x1av\x0f\xec\xadz\xe6\xd6\x89\xb6\xc8\xcfO\x9f\xfc\xdf$\xee\xf6\x7f(n\xe5\xcf)\xee\xa9?\xb6\x04_\xb0\xbb\xf3?\x18w\xf7O@\xc1\x7f\x01\xf4\x96\x1dv>$\x00\x00
parse error at: line:1, col:0'

Thanks for ur help.


Source: (StackOverflow)

Pyvmomi what does this do?

i'm currently working on the VMware SDK in python (with Pyvmomi) and I see in all sample or example this line:

atexit.register(Disconnect, self.si)

Does anyone know what does is supposed do ? I don't understand, thanks for ur help.


Source: (StackOverflow)

Adding orphaned VMs to inventory using pyVmomi?

I've done a good bit of research over the last day or two, both on here and good ole Google and can't seem to find any examples of adding orphaned vms to inventory with pyVmomi(or any other vSphere module for that matter).

Thanks to some examples on github, I was able to FIND the orphaned vms using pyVmomi, but man.. pyVmomi doesn't have any good documentation.

So, now I'm going to post my own question!

Thanks for any tips/help!

-Chris Mulliner


Source: (StackOverflow)

Change network for VMWare VSphere guest using PyVMomi

I'm trying to set the IP,NetMask,Gateway and VLAN of a VMWare Instance

so far I have:

si = connectToVCenter('192.168.7.2','nunya','vmware')
content = si.RetrieveContent()
vm = getByName(content,'sfo-lab-cob01')
for device in vm.config.hardware.device:
    if isinstance(device, vim.vm.device.VirtualEthernetCard):
        nicspec = vim.vm.device.VirtualDeviceSpec()
        nicspec.operation = vim.vm.device.VirtualDeviceSpec.Operation.edit
        nicspec.device = device
        nicspec.device.wakeOnLanEnabled = True
        nicspec.device.connectable.startConnected = True
        nicspec.device.connectable.allowGuestControl = True
        nicspec.device.addressType = 'static'
        network = getObj(content,
          [vim.dvs.DistributedVirtualPortgroup],
          'VLAN324mgmt')
        pprint(dir(device))

So what is the directive I'm looking for to set the IP/Gateway/NetMask and VLAN ?


Source: (StackOverflow)

Unsupported operation leading to lease error in pyvmomi

I am trying to deploy OVF to vSphere 5.5 by a python script using pyvmomi due to an error The operation is not supported on the object. The deepest I could get into this error was by printing ImportVApp.error which has this output.

(vmodl.fault.NotSupported) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   msg = 'The operation is not supported on the object.',
   faultCause = <unset>,
   faultMessage = (vmodl.LocalizableMessage) []
}

The lease is giving my error after initialising and giving the error above. You can find my script here.


Source: (StackOverflow)

from tools import tasks, ImportError: cannot import name tasks

Trying to execute this sample code as I need to create a vm using pyvmomi. But the execution fails at the start in from tools import tasks with the error: ImportError: cannot import name tasks.

I have tried for long but could not resolve the error. I have python 2.7 on centOS 6.4

tools module is installed but do not have tasks.py inside /usr/local/lib/python2.7/site-packages/tools/

Not sure which tools packages have to be installed. Please guide.


Source: (StackOverflow)

I am getting error method not found while calling dvs.LookupDvPortGroup(port_group_key)

I am using pyVmomi api to automate some of vshpere stuff, we have recently upgragded vspher5.5 to vsphre6.0 then we started seeing error

MethodNotFound: 
    (vmodl.fault.MethodNotFound) 
    {
    dynamicType = <unset>, 
    dynamicProperty = (vmodl.DynamicProperty) [], 
    msg = <unset>, 
    faultCause = <unset>,
    faultMessage = (vmodl.LocalizableMessage) [], 
    receiver = 'vim.dvs.VmwareDistributedVirtualSwitch:***',
    method = 'LookupPortgroup' 
   }

When I looked deeper then realize that it has been thrown from

port_group_obj = dvs.LookupDvPortGroup(port_group_key)

Placing entire code for your reference:

def getvmnics(self, vm):
        nics = []
        host_page_dict = self.get_hosts_port_groups(self.hosts)
        for dev in vm.config.hardware.device:
            if isinstance(dev, vim.vm.device.VirtualEthernetCard):
                dev_backing = dev.backing
                if hasattr(dev_backing, 'port'):
                    port_group_key = dev.backing.port.portgroupKey
                    dvs_uuid = dev.backing.port.switchUuid
                    try:
                        dvs = self.content.dvSwitchManager.QueryDvsByUuid(dvs_uuid)
                    except:
                        port_group_name = "** Error: DVS not found **"
                        vlan_id = "NA"
                        v_switch = "NA"
                    else:
                        port_group_obj = dvs.LookupDvPortGroup(port_group_key)
                        port_group_name = port_group_obj.config.name
                        vlan_id = str(port_group_obj.config.defaultPortConfig.vlan.vlanId)
                        v_switch = str(dvs.name)
                else:
                    port_group_name = dev.backing.network.name
                    vmHost = vm.runtime.host
                    # global variable hosts is a list, not a dict
                    hosts = self.get_vm_hosts
                    host_pos = hosts.index(vmHost)
                    viewHost = hosts[host_pos]
                    # global variable hostPgDict stores portgroups per host
                    pgs = host_page_dict[viewHost]
                    for p in pgs:
                        if port_group_name in p.key:
                            vlan_id = str(p.spec.vlanId)
                            v_switch = str(p.spec.vswitchName)
                if port_group_name is None:
                    port_group_name = 'NA'
                nics.append({
                    'mac_address': dev.macAddress,
                    'portGroup': port_group_name,
                    'nic_number': dev.deviceInfo.label,
                    'vSwitch': v_switch,
                    'VLan': vlan_id
                })
        return nics

Source: (StackOverflow)

Can you use pyvmomi to check when a vsphere user logged on?

Can you use pyvmomi to track things like when an account hasn't been used for 100days?

What attributes would I need to read up on?


Source: (StackOverflow)

create vm using pyvmomi module from .vmx and .vmdk files

I have been trying to create a new vm with using existing vm's .vmx and .vmdk files from ESX host in Python using pyvmomi module. I am new to pyvmomi and there isnt much online help available for pyvmomi. I have checked sample code in github(https://github.com/vmware/pyvmomi-community-samples/tree/298bf74446f3fcc5743d6435763ff6dc16ab4cbc/samples) but no relevent things found. Please provide me pointers.


Source: (StackOverflow)

Changing vmFolder of existing VM

Currently I've got a pice of code that lists all the vmFolder.Childentities through pyVmomi, these are used to structurize the VM's in vCenter.

But now I want to change the vmFolder of an existing virtual machine.

PS: I can't show any code because I'm currently at work


Source: (StackOverflow)

Simple pyVmomi VM deployment to vCenter from OVF

I know that there are some entries that touch this point but I am yet to find a simple vCenter VM creation example using pyVmomi. There doesn't seem to be a straight forward deploy example in the community samples (https://github.com/vmware/pyvmomi-community-samples) either.

I am looking to deploy a VM from scratch using an OVA or OVF file.

Any help would be much appreciated.


Source: (StackOverflow)

what is the page for entering pyvmomi sample requests

I would like to request a pyvmomi sample which would demonstrate how to to a VM snapshot. What is the Web page that I could use to enter such a request?


Source: (StackOverflow)