Ejemplo n.º 1
0
class VMRUNNer:
    def __init__(self, hostname, username, password):
        self.server = VIServer()         
        self.server.connect(hostname, username, password)

    def get_vm(self, vm_path_name):
        self.vm = self.server.get_vm_by_path(vm_path_name)
        return self.vm
    
    def list_vms(self):
        vmlist = self.server.get_registered_vms()
        for vm in vmlist:
            print vm    
        return vmlist

    def get_vmserver_version(self):
        type = self.server.get_server_type()
        version = self.server.get_api_version()
        print 'Server Type: ' + type
        print 'Server API Version: ' + version 
Ejemplo n.º 2
0
class VMRUNNer:
    def __init__(self, hostname, username, password):
        self.server = VIServer()
        self.server.connect(hostname, username, password)

    def get_vm(self, vm_path_name):
        self.vm = self.server.get_vm_by_path(vm_path_name)
        return self.vm

    def list_vms(self):
        vmlist = self.server.get_registered_vms()
        for vm in vmlist:
            print vm
        return vmlist

    def get_vmserver_version(self):
        type = self.server.get_server_type()
        version = self.server.get_api_version()
        print 'Server Type: ' + type
        print 'Server API Version: ' + version
Ejemplo n.º 3
0
def get_vms():
    """
	Output example:
	VM_NAME   SO
	MYVM01    Microsoft Windows Server 2003 Standard (32-bit)
	"""
    server = VIServer()
    vmlist = {}
    for Env in vCenter.keys():
        try:
            server.connect(vCenter[Env]['host'], vCenter[Env]['user'],
                           vCenter[Env]['pass'])
        except:
            print "[x] Error connecting to vCernter server. "
            return 1

        vm_list = server.get_registered_vms()
        for disk_path in vm_list:
            vm = server.get_vm_by_path(disk_path)
            print(
                '%s %s' %
                (vm.get_property('name'), vm.get_property('guest_full_name')))
Ejemplo n.º 4
0
def get_stats():
    stats = dict()

    v = VCENTERLIST.split()

    for vcenter in v:

        logger('verb', "get_stats calls vcenter %s user %s" % (vcenter, USERNAME))
        server = VIServer()

        try:
            server.connect(vcenter, USERNAME, PASSWORD)
        except Exception:
            logger('warn', "failed to connect to %s" % (vcenter))
            continue

        # get datastores
        for ds, dsname in server.get_datastores().items():

            DatastoreCapacity = 0
            DatastoreFreespace = 0
            DatastoreUsagePercent = 0

            try:
                logger('verb', "get_stats calls Datastore metrics query on vcenter: %s for datastore: %s" % (vcenter, dsname))

                props = server._retrieve_properties_traversal(property_names=['name', 'summary.capacity', 'summary.freeSpace'], from_node=ds, obj_type="Datastore")

                for prop_set in props:
                    # mor = prop_set.Obj #in case you need it
                        for prop in prop_set.PropSet:
                            if prop.Name == "summary.capacity":
                                DatastoreCapacity = (prop.Val / 1048576)
                            elif prop.Name == "summary.freeSpace":
                                DatastoreFreespace = (prop.Val / 1048576)
            except Exception:
                logger('warn', "failed to get Datastore metrics value on vcenter: %s for datastore: %s" % (vcenter, dsname))

            DatastoreUsagePercent = (((DatastoreCapacity - DatastoreFreespace) * 100) / DatastoreCapacity)

            metricnameZoneDatastoreCapacity = METRIC_DELIM.join([vcenter.lower(), "datastores",  dsname.lower(), 'datastorecapacity'])
            metricnameZoneDatastoreFreespace = METRIC_DELIM.join([vcenter.lower(), "datastores", dsname.lower(), 'datastorefreespace'])
            metricnameZoneDatastoreUsagePercent = METRIC_DELIM.join([vcenter.lower(), "datastores", dsname.lower(), 'datastoreusagepercent'])

            try:
                stats[metricnameZoneDatastoreCapacity] = DatastoreCapacity
                stats[metricnameZoneDatastoreFreespace] = DatastoreFreespace
                stats[metricnameZoneDatastoreUsagePercent] = DatastoreUsagePercent
            except (TypeError, ValueError):
                pass

        ZoneDatacentersCount = 0
        ZoneClustersCount = 0
        ZoneHostsCount = 0
        ZoneRunningVMS = 0
        ZoneStoppedVMS = 0
        ZoneTotalVMS = 0
        ZoneMemoryUsage = 0
        ZoneCpuUsage = 0
        ZoneTotalMemory = 0
        ZoneCpuTotal = 0

        logger('verb', "get_stats calls get_datacenters query on vcenter: %s" % (vcenter))
        datacenters = server.get_datacenters()
        logger('verb', "get_stats completed get_datacenters query on vcenter: %s" % (vcenter))
        ZoneDatacentersCount = len(datacenters)

        for d, dname in server.get_datacenters().items():

            if "." in dname:
                dname = dname.split(".")[0]

            DatacenterRunningVMS = 0
            DatacenterStoppedVMS = 0
            DatacenterTotalVMS = 0
            DatacenterClustersCount = 0
            DatacenterHostsCount = 0
            DatacenterMemoryUsage = 0
            DatacenterCpuUsage = 0
            DatacenterTotalMemory = 0
            DatacenterCpuTotal = 0

            logger('verb', "get_stats calls get_clusters query on vcenter: %s for datacenter: %s" % (vcenter, dname))
            clusters = server.get_clusters(d)
            logger('verb', "get_stats completed get_clusters query on vcenter: %s for datacenter: %s" % (vcenter, dname))
            DatacenterClustersCount = len(clusters)
            ZoneClustersCount = ZoneClustersCount + DatacenterClustersCount

            for c, cname in server.get_clusters(d).items():

                if "." in cname:
                    cname = cname.split(".")[0]

                ClusterMemoryUsage = 0
                ClusterCpuUsage = 0
                ClusterTotalMemory = 0
                ClusterCpuTotal = 0
                ClusterRunningVMS = 0
                ClusterStoppedVMS = 0
                ClusterTotalVMS = 0

                logger('verb', "get_stats calls get_hosts query on vcenter: %s for cluster: %s" % (vcenter, cname))
                hosts = server.get_hosts(c)
                logger('verb', "get_stats completed get_hosts query on vcenter: %s for cluster: %s" % (vcenter, cname))
                ClusterHostsCount = len(hosts)
                DatacenterHostsCount = DatacenterHostsCount + ClusterHostsCount
                ZoneHostsCount = ZoneHostsCount + DatacenterHostsCount

                for h, hname in server.get_hosts(c).items():

                    HostMemoryUsage = 0
                    HostCpuUsage = 0
                    HostTotalMemory = 0
                    HostNumCpuCores = 0
                    HostMhzPerCore = 0
                    HostStatus = ''

                    if "." in hname:
                        hname = hname.split(".")[0]

                    try:
                        logger('verb', "get_stats calls Host CPU and Memory metrics query on vcenter: %s for host: %s" % (vcenter, hname))

                        props = server._retrieve_properties_traversal(property_names=['name', 'summary.overallStatus', 'summary.quickStats.overallMemoryUsage', 'summary.quickStats.overallCpuUsage', 'summary.hardware.memorySize', 'summary.hardware.numCpuCores', 'summary.hardware.cpuMhz'], from_node=h, obj_type="HostSystem")

                        for prop_set in props:
                            # mor = prop_set.Obj #in case you need it
                            for prop in prop_set.PropSet:
                                if prop.Name == "summary.quickStats.overallMemoryUsage":
                                    HostMemoryUsage = prop.Val
                                elif prop.Name == "summary.quickStats.overallCpuUsage":
                                    HostCpuUsage = prop.Val
                                elif prop.Name == "summary.hardware.memorySize":
                                    HostTotalMemory = (prop.Val / 1048576)
                                elif prop.Name == "summary.hardware.numCpuCores":
                                    HostNumCpuCores = prop.Val
                                elif prop.Name == "summary.hardware.cpuMhz":
                                    HostMhzPerCore = prop.Val
                                elif prop.Name == "summary.overallStatus":
                                    HostStatus = prop.Val
                                    if HostStatus == "green":
                                        HostStatus = 0
                                    elif HostStatus == "gray":
                                        HostStatus = 1
                                    elif HostStatus == "yellow":
                                        HostStatus = 2
                                    elif HostStatus == "red":
                                        HostStatus = 3
                    except Exception:
                        logger('warn', "failed to get Host CPU and Memory metrics value on vcenter: %s for host: %s" % (vcenter, hname))

                    try:
                        logger('verb', "get_stats calls HostRunningVMS query on vcenter: %s for host: %s" % (vcenter, hname))
                        HostRunningVMS = len(server.get_registered_vms(h, status='poweredOn'))
                    except Exception:
                        logger('warn', "failed to get nb of running VMS value on %s" % (hname))
                    try:
                        logger('verb', "get_stats calls HostStoppedVMS query on vcenter: %s for host: %s" % (vcenter, hname))
                        HostStoppedVMS = len(server.get_registered_vms(h, status='poweredOff'))
                    except Exception:
                        logger('warn', "failed to get nb of stopped VMS value on %s" % (hname))
                    try:
                        logger('verb', "get_stats calls HostTotalVMS query on vcenter: %s for host: %s" % (vcenter, hname))
                        HostTotalVMS = len(server.get_registered_vms(h))
                    except Exception:
                        logger('warn', "failed to get all VMS count on %s" % (hname))

                    HostCpuTotal = (HostNumCpuCores * HostMhzPerCore)
                    HostMemoryUsagePercent = ((HostMemoryUsage * 100) / HostTotalMemory)
                    HostCpuUsagePercent = ((HostCpuUsage * 100) / HostCpuTotal)

                    metricnameHostStatus = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hoststatus'])
                    metricnameHostMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostmemoryusagepercent'])
                    metricnameHostCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostcpuusagepercent'])
                    metricnameHostMemoryUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostmemoryusage'])
                    metricnameHostCpuUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostcpuusage'])
                    metricnameHostTotalMemory = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hosttotalmemory'])
                    metricnameHostCpuTotal = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostcputotal'])
                    metricnameHostRunningVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostrunningvms'])
                    metricnameHostStoppedVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hoststoppedvms'])
                    metricnameHostTotalVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hosttotalvms'])

                    ClusterMemoryUsage = ClusterMemoryUsage + HostMemoryUsage
                    ClusterCpuUsage = ClusterCpuUsage + HostCpuUsage
                    ClusterTotalMemory = ClusterTotalMemory + HostTotalMemory
                    ClusterCpuTotal = ClusterCpuTotal + HostCpuTotal
                    ClusterRunningVMS = ClusterRunningVMS + HostRunningVMS
                    ClusterStoppedVMS = ClusterStoppedVMS + HostStoppedVMS
                    ClusterTotalVMS = ClusterTotalVMS + HostTotalVMS
                    ClusterMemoryUsagePercent = ((ClusterMemoryUsage * 100) / ClusterTotalMemory)
                    ClusterCpuUsagePercent = ((ClusterCpuUsage * 100) / ClusterCpuTotal)

                    try:
                        stats[metricnameHostStatus] = HostStatus
                        stats[metricnameHostMemoryUsage] = HostMemoryUsage
                        stats[metricnameHostCpuUsage] = HostCpuUsage
                        stats[metricnameHostTotalMemory] = HostTotalMemory
                        stats[metricnameHostCpuUsagePercent] = HostCpuUsagePercent
                        stats[metricnameHostMemoryUsagePercent] = HostMemoryUsagePercent
                        stats[metricnameHostCpuTotal] = HostCpuTotal
                        stats[metricnameHostRunningVMS] = HostRunningVMS
                        stats[metricnameHostStoppedVMS] = HostStoppedVMS
                        stats[metricnameHostTotalVMS] = HostTotalVMS
                    except (TypeError, ValueError):
                        pass

                DatacenterRunningVMS = DatacenterRunningVMS + ClusterRunningVMS
                DatacenterStoppedVMS = DatacenterStoppedVMS + ClusterStoppedVMS
                DatacenterTotalVMS = DatacenterTotalVMS + ClusterTotalVMS
                DatacenterMemoryUsage = DatacenterMemoryUsage + ClusterMemoryUsage
                DatacenterCpuUsage = DatacenterCpuUsage + ClusterCpuUsage
                DatacenterTotalMemory = DatacenterTotalMemory + ClusterTotalMemory
                DatacenterCpuTotal = DatacenterCpuTotal + ClusterCpuTotal
                DatacenterMemoryUsagePercent = ((DatacenterMemoryUsage * 100) / DatacenterTotalMemory)
                DatacenterCpuUsagePercent = ((DatacenterCpuUsage * 100) / DatacenterCpuTotal)

                metricnameClusterRunningVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clusterrunningvms'])
                metricnameClusterStoppedVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clusterstoppedvms'])
                metricnameClusterTotalVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustertotalvms'])
                metricnameClusterMemoryUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustermemoryusage'])
                metricnameClusterCpuUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustercpuusage'])
                metricnameClusterTotalMemory = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustertotalmemory'])
                metricnameClusterCpuTotal = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustercputotal'])
                metricnameClusterMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustermemoryusagepercent'])
                metricnameClusterCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustercpuusagepercent'])
                try:
                    stats[metricnameClusterRunningVMS] = ClusterRunningVMS
                    stats[metricnameClusterStoppedVMS] = ClusterStoppedVMS
                    stats[metricnameClusterTotalVMS] = ClusterTotalVMS
                    stats[metricnameClusterMemoryUsage] = ClusterMemoryUsage
                    stats[metricnameClusterCpuUsage] = ClusterCpuUsage
                    stats[metricnameClusterMemoryUsagePercent] = ClusterMemoryUsagePercent
                    stats[metricnameClusterCpuUsagePercent] = ClusterCpuUsagePercent
                    stats[metricnameClusterTotalMemory] = ClusterTotalMemory
                    stats[metricnameClusterCpuTotal] = ClusterCpuTotal
                except (TypeError, ValueError):
                    pass

            # post datacenter metrics count here

            ZoneRunningVMS = ZoneRunningVMS + DatacenterRunningVMS
            ZoneStoppedVMS = ZoneStoppedVMS + DatacenterStoppedVMS
            ZoneTotalVMS = ZoneTotalVMS + DatacenterTotalVMS
            ZoneMemoryUsage = ZoneMemoryUsage + DatacenterMemoryUsage
            ZoneCpuUsage = ZoneCpuUsage + DatacenterCpuUsage
            ZoneTotalMemory = ZoneTotalMemory + DatacenterTotalMemory
            ZoneCpuTotal = ZoneCpuTotal + DatacenterCpuTotal
            ZoneMemoryUsagePercent = ((ZoneMemoryUsage * 100) / ZoneTotalMemory)
            ZoneCpuUsagePercent = ((ZoneCpuUsage * 100) / ZoneCpuTotal)

            metricnameDatacenterRunningVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacenterrunningvms'])
            metricnameDatacenterStoppedVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacenterstoppedvms'])
            metricnameDatacenterTotalVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentertotalvms'])
            metricnameDatacenterMemoryUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentermemoryusage'])
            metricnameDatacenterCpuUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentercpuusage'])
            metricnameDatacenterMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentermemoryusagepercent'])
            metricnameDatacenterCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentercpuusagepercent'])
            metricnameDatacenterTotalMemory = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentertotalmemory'])
            metricnameDatacenterCpuTotal = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentercputotal'])

            try:
                stats[metricnameDatacenterRunningVMS] = DatacenterRunningVMS
                stats[metricnameDatacenterStoppedVMS] = DatacenterStoppedVMS
                stats[metricnameDatacenterTotalVMS] = DatacenterTotalVMS
                stats[metricnameDatacenterMemoryUsage] = DatacenterMemoryUsage
                stats[metricnameDatacenterCpuUsage] = DatacenterCpuUsage
                stats[metricnameDatacenterMemoryUsagePercent] = DatacenterMemoryUsagePercent
                stats[metricnameDatacenterCpuUsagePercent] = DatacenterCpuUsagePercent
                stats[metricnameDatacenterTotalMemory] = DatacenterTotalMemory
                stats[metricnameDatacenterCpuTotal] = DatacenterCpuTotal
            except (TypeError, ValueError):
                pass

        # post zone metrics count here
        metricnameZoneRunningVMS = METRIC_DELIM.join([vcenter.lower(), 'zonerunningvms'])
        metricnameZoneStoppedVMS = METRIC_DELIM.join([vcenter.lower(), 'zonestoppedvms'])
        metricnameZoneTotalVMS = METRIC_DELIM.join([vcenter.lower(), 'zonetotalvms'])
        metricnameZoneMemoryUsage = METRIC_DELIM.join([vcenter.lower(), 'zonememoryusage'])
        metricnameZoneCpuUsage = METRIC_DELIM.join([vcenter.lower(), 'zonecpuusage'])
        metricnameZoneMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), 'zonememoryusagepercent'])
        metricnameZoneCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), 'zonecpuusagepercent'])
        metricnameZoneTotalMemory = METRIC_DELIM.join([vcenter.lower(), 'zonetotalmemory'])
        metricnameZoneCpuTotal = METRIC_DELIM.join([vcenter.lower(), 'zonecputotal'])

        try:
            stats[metricnameZoneRunningVMS] = ZoneRunningVMS
            stats[metricnameZoneStoppedVMS] = ZoneStoppedVMS
            stats[metricnameZoneTotalVMS] = ZoneTotalVMS
            stats[metricnameZoneMemoryUsage] = ZoneMemoryUsage
            stats[metricnameZoneCpuUsage] = ZoneCpuUsage
            stats[metricnameZoneMemoryUsagePercent] = ZoneMemoryUsagePercent
            stats[metricnameZoneCpuUsagePercent] = ZoneCpuUsagePercent
            stats[metricnameZoneTotalMemory] = ZoneTotalMemory
            stats[metricnameZoneCpuTotal] = ZoneCpuTotal
        except (TypeError, ValueError):
            pass

        metricnameZoneDatacentersCount = METRIC_DELIM.join([vcenter.lower(), 'zonedatacenterscount'])
        metricnameZoneClustersCount = METRIC_DELIM.join([vcenter.lower(), 'zoneclusterscount'])
        metricnameZoneHostsCount = METRIC_DELIM.join([vcenter.lower(), 'zonehostscount'])

        try:
            stats[metricnameZoneDatacentersCount] = ZoneDatacentersCount
            stats[metricnameZoneClustersCount] = ZoneClustersCount
            stats[metricnameZoneHostsCount] = ZoneHostsCount
        except (TypeError, ValueError):
            pass

        server.disconnect()
    return stats
Ejemplo n.º 5
0
serverVMToolVersion = {}

count = 0
clusters = {'10.127.209.21': 1, '10.95.209.21': 2, '10.64.211.139': 3}
for ip in clusters:
    print ip
    server = VIServer()
    server.connect(ip, "nys\dnovicoff", "pitIfu12345")

    serverType = server.get_server_type()
    print serverType

    serverAPI = server.get_api_version()
    print serverAPI

    vmlist = server.get_registered_vms()

    properties = server._retrieve_properties_traversal(
        property_names=property_names, obj_type="VirtualMachine")
    for propset in properties:
        vmToolsVersion = ""
        vmPropPath = ""
        host = ""
        for prop in propset.PropSet:
            if prop.Name == "name":
                host = prop.Val
            elif prop.Name == "guest.toolsVersion":
                vmToolsVersion = prop.Val
            elif prop.Name == "config.files.vmPathName":
                vmPropPath = prop.Val
Ejemplo n.º 6
0
            return "", addrs[0]
    else:
        print "ERROR --> 2 arguments required, vserver and hostname!"


if options.hostname:
    hostname = options.hostname
    if verbose:
        print "--> Hostname: " + hostname
else:
    print ""
    print "    [Datastore]        Hostname      "
    print "====================================="

    if vserver.get_server_type():
        vmlist = vserver.get_registered_vms()
        for v in vmlist:
            w = v.split("/")
            print w[0]
    else:
        print "vserver EMPTY - Connection Failed"
        exit(1)

    print "====================================="
    print "SELECT --> An existing host from above or enter a new hostname to clone..."
    if py3:
        hostname = input("--> Enter your hostname: ")
    else:
        hostname = raw_input("--> Enter your hostname: ")

template = ""
Ejemplo n.º 7
0
#Get server characteristics
print server.get_server_type()

print server.get_api_version()

print server.get_clusters()

print server._get_resource_pools

#Get all the hosts
print server.get_hosts()

#Get VM`s in Prod resource pool which are in poweredon state

vmachines = server.get_registered_vms()
vmachines = server.get_registered_vms(resource_pool='Prod', status='poweredOn')

#Get virtual machine status
vm1 = server.get_vm_by_name('rhel5.3_prod')
print vm1.get_status()

#Also you can ask the following:
print vm1.is_powering_off()
print vm1.is_powered_off()
print vm1.is_powering_on()
print vm1.is_powered_on()
print vm1.is_suspending()
print vm1.is_suspended()
print vm1.is_resetting()
print vm1.is_blocked_on_msg()
Ejemplo n.º 8
0
        # If there's a VMWare Plugin object for this filesystem
        # snapshot the VMs before taking the ZFS snapshot
        from pysphere import VIServer
        server = VIServer()
        qs = VMWarePlugin.objects.filter(filesystem=fs)
        vmsnapname = str(uuid.uuid4())
        snapvms = []
        snapvmfails = []
        for obj in qs:
            try:
                server.connect(obj.hostname, obj.username, obj.get_password())
            except:
                log.warn("VMware login failed to %s", obj.hostname)
                continue
            vmlist = server.get_registered_vms(status='poweredOn')
            for vm in vmlist:
                if vm.startswith("[%s]" % obj.datastore):
                    vm1 = server.get_vm_by_path(vm)
                    try:
                        vm1.create_snapshot(vmsnapname, memory=False)
                    except:
                        log.warn("Snapshot of VM %s failed", vm1)
                        snapvmfails.append(vm)
                    snapvms.append(vm1)

        if snapvmfails:
            try:
                with LockFile(VMWARE_FAILS) as lock:
                    with open(VMWARE_FAILS, 'rb') as f:
                        fails = pickle.load(f)
Ejemplo n.º 9
0
#!/usr/bin/env python
from pysphere import VIServer

server = VIServer()
server.set_ssl_no_verify()
server.connect("example.com", "username", "password")

# datacenter is case-senstive
vmlist = server.get_registered_vms(datacenter="ha-datacenter")
for vm_path in vmlist:
    vm = server.get_vm_by_path(vm_path)
    status = vm.get_status()
    print "vm_path=[%s], status=[%s]" % (vm_path, status)

server.disconnect()
Ejemplo n.º 10
0
class Stack(SimpleStack):

    state_translation = {
        "POWERED ON": "STARTED",
        "POWERED OFF": "STOPPED",
        "SUSPENDED": "PAUSED"
    }

    def __init__(self, poolinfo):
        self.connection = False
        self.poolinfo = poolinfo
        self.format_for = Formatter()
        self.connect()

    def libvirt_connect(self):
        self.libvirt_connection = libvirt.open(
            "esx://%s@%s/" %
            (self.poolinfo.get("username"), self.poolinfo.get("api_server")))

    def connect(self):
        self.connection = VIServer()
        self.connection.connect(self.poolinfo.get("api_server"),
                                self.poolinfo.get("username"),
                                self.poolinfo.get("password"))
        return

    def pool_info(self):
        return (self.format_for.pool(0, 0, self.poolinfo.get("api_server")))

    def guest_list(self):
        return [{
            "id": self.connection.get_vm_by_path(path).properties.name
        } for path in self.connection.get_registered_vms(
            cluster=self.poolinfo.get('cluster'))]

    def guest_info(self, guest_id):
        vm = self._vm_ref(guest_id)
        return self._vm_info(vm)

    def guest_shutdown(self, guest_id, force=False):
        vm = self._vm_ref(guest_id)
        if force:
            return vm.power_off()
        else:
            return vm.shutdown_guest()

    def guest_start(self, guest_id):
        vm = self._vm_ref(guest_id)
        return vm.power_on()

    def guest_reboot(self, guest_id, force=False):
        vm = self._vm_ref(guest_id)
        if force:
            return vm.reset()
        else:
            return vm.reboot_guest()

    def guest_suspend(self, guest_id):
        vm = self._vm_ref(guest_id)
        return vm.suspend()

    def guest_resume(self, guest_id):
        return self.guest_start(guest_id)

    def guest_update(self, guest_id, guestdata):
        vm = self._vm_ref(guest_id)
        vmware.update_vm(self.connection, vm, guestdata)
        return self._vm_info(self._vm_ref(guest_id))

    def guest_delete(self, guest_id):
        vm = self._vm_ref(guest_id)
        vmware.delete_vm(self.connection, vm)

    def media_mount(self, guest_id, media_data):
        vm = self._vm_ref(guest_id)
        vmware.update_vm(self.connection, vm, {"iso": media_data})

    def media_info(self, guest_id):
        vm = self._vm_ref(guest_id)
        media = vmware.get_cd(vm)
        if media.connectable.connected:
            return {"name": media.backing.fileName}
        else:
            return {"name": None}

    def network_interface_list(self, guest_id):
        vm = self._vm_ref(guest_id)
        vifs = vmware.get_network_interfaces(vm)
        return [self._network_interface_info(n) for n in vifs]

    def network_interface_info(self, guest_id, network_interface_id):
        vm = self._vm_ref(guest_id)
        vifs = vmware.get_network_interfaces(vm)

        for vif in vifs:
            if vif.macAddress == network_interface_id:
                return self._network_interface_info(vif)

        entity_info = "%s - on Guest %s" % (network_interface_id, guest_id)
        raise EntityNotFound("NetworkInterface", entity_info)

    def snapshot_list(self, guest_id):
        vm = self._vm_ref(guest_id)
        snaps = [self._snapshot_info(s) for s in vm.get_snapshots()]
        return snaps

    def snapshot_create(self, guest_id, snapshot_name=None):
        if not snapshot_name:
            snapshot_name = str(datetime.datetime.now())
        vm = self._vm_ref(guest_id)
        snap = vmware.create_snapshot(self.connection, vm, snapshot_name)
        return self._snapshot_info(snap)

    def snapshot_info(self, guest_id, snapshot_id):
        vm = self._vm_ref(guest_id)
        snap = vmware.get_snapshot(vm, snapshot_id)
        if snap:
            return self._snapshot_info(snap)
        else:
            raise EntityNotFound("Snapshot", snapshot_id)

    def snapshot_revert(self, guest_id, snapshot_id):
        vm = self._vm_ref(guest_id)
        snap = vmware.get_snapshot(vm, snapshot_id)
        vmware.revert_to_snapshot(self.connection, vm, snap)

    def snapshot_delete(self, guest_id, snapshot_id):
        vm = self._vm_ref(guest_id)
        snap = vmware.get_snapshot(vm, snapshot_id)
        vmware.delete_snapshot(self.connection, vm, snap)

    def tag_list(self, guest_id):
        vm = self._vm_ref(guest_id)
        return vmware.get_tags(vm)

    def tag_create(self, guest_id, tag_name):
        vm = self._vm_ref(guest_id)
        tags = vmware.create_tag(tag_name, vm)
        vmware.update_vm(self.connection, vm, {"tags": tags})
        return tags

    def tag_delete(self, guest_id, tag_name):
        vm = self._vm_ref(guest_id)
        tags = vmware.delete_tag(tag_name, vm)
        vmware.update_vm(self.connection, vm, {"tags": tags})
        return tags

    def _vm_ref(self, vm_id):
        regex = r'[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}'
        if re.match(regex, vm_id, re.I):
            return vmware.get_vm_by_uuid(self.connection, vm_id)
        else:
            return self.connection.get_vm_by_name(vm_id)

    def _vm_info(self, vm):
        vm_info = vm.get_properties()
        return (self.format_for.guest(
            vm.properties.config.uuid, vm_info.get('name'),
            vm_info.get('num_cpu'), vm_info.get('memory_mb'),
            vmware.get_disk_size(vm) / (1024 * 1024),
            vmware.get_vmi_driver(vm) is not None,
            vm.properties.guest.toolsStatus == "toolsOk", None,
            self.state_translation[vm.get_status()], None))

    def _network_interface_info(self, vif):
        return (self.format_for.network_interface(vif.macAddress,
                                                  vif.unitNumber,
                                                  vif.macAddress, '', '', '',
                                                  vif.backing.network.name))

    def _snapshot_info(self, snapshot):
        return (self.format_for.snapshot(snapshot.get_description(),
                                         snapshot.get_name(),
                                         snapshot.get_state(),
                                         snapshot.get_path(),
                                         snapshot.get_create_time()))
Ejemplo n.º 11
0
#!/usr/bin/env python
from pysphere import VIServer

server = VIServer()
    server.connect("192.168.1.1", '*****@*****.**', 'Password')
    vmpathlist = server.get_registered_vms()
    print vmpathlist
    for path in vmpathlist:
        vm = server.get_vm_by_path(path)
        print vm.get_properties(False)
Ejemplo n.º 12
0
class VMWare():
    def __init__(self, server, username, password):
        self.server = server
        self.username = username
        self.password = password
        self.sserver = VIServer()
        self.sserver.connect(self.server, self.username, self.password)

    #GETS ALL SHARED VMS
    def getRegistered(self):
        isConnected(self.sserver)
        return self.sserver.get_registered_vms(None, None, None, None)

    #SPECIFIC VM GETTER
    #NOT RECOMMENDED
    def getByName(self, name):
        try:
            isConnected(self.sserver)
            return self.sserver.get_vm_by_name(name)
        except:
            return None

    #RECOMMENDED - Get from getRegistered method
    def getByPath(self, path):
        try:
            isConnected(self.sserver)
            return self.sserver.get_vm_by_path(path)
        except:
            return None

    #PROPERTIES AND VARIABLES
    #TODO: check this works for windows!?
    def getEnvVar(self, name):
        try:
            isConnected(self.sserver)
            machine = self.sserver.get_vm_by_name(name)
            return machine.get_environment_variables()
        except:
            return None

    def getStatus(self, name):
        try:
            isConnected(self.sserver)
            machine = self.sserver.get_vm_by_path(name)
            return machine.get_status()
        except:
            return None

    def getInfo(self, name):
        try:
            isConnected(self.sserver)
            machine = self.sserver.get_vm_by_path(name)
            x = machine.get_properties()
            stat = machine.get_status()
            ip = ""
            if "ip_address" in x:
                ip = x["ip_address"]
            ret = {
                "ip": ip,
                "status": stat,
                "memory": x["memory_mb"],
                "guest_full_name": x["guest_full_name"]
            }
            print ret
            #print x
            return ret
        except Exception as e:
            print e
            return None

    #POWER SETTINGS

    def machineOn(self, name):
        isConnected(self.sserver)
        machine = self.sserver.get_vm_by_path(name)
        machine.power_on()

    def machineOff(self, name):
        isConnected(self.sserver)
        machine = self.sserver.get_vm_by_path(name)
        machine.power_off()

    def reset(self, name):
        isConnected(self.sserver)
        machien = self.sserver.get_vm_by_path(name)
        machine.reset()

    #Snapshots

    def getSnapshots(self, name):
        isConnected(self.sserver)
        machine = self.sserver.get_vm_by_path(name)
        arr = []
        for snapshot in machine.get_snapshots():
            name = snapshot.get_name()
            desc = snapshot.get_description()
            create = snapshot.get_create_time()
            state = snapshot.get_state()
            path = snapshot.get_path()
            arr.append({
                "name": name,
                "desc": desc,
                "create": create,
                "state": state,
                "path": path
                #"parent": parent,
                #"children": children
            })
        return json.dumps(arr)

    def createSnapShot(self, name, snap, desc):
        isConnected(self.sserver)
        machine = self.sserver.get_vm_by_path(name)
        machine.create_snapshot(snap, description=desc)
        return "OK"

    def deleteSnapShot(self, name, snap):
        isConnected(self.sserver)
        machine = self.sserver.get_vm_by_path(name)
        machine.delete_snapshot_by_path(snap)
        return "OK"

    def revertSnapShot(self, name, snap):
        isConnected(self.sserver)
        machine = self.sserver.get_vm_by_path(name)
        machine.revert_to_path(snap)
        return "OK"
Ejemplo n.º 13
0
def get_vms_path(host):
    vi = VIServer()
    vi.connect(host, 'root', 'Pa$$word')
    all_vms_path = vi.get_registered_vms()
    print all_vms_path
    vi.disconnect()
Ejemplo n.º 14
0
def VirtualMachine_ServerList(VIServer, categories, cluster=None, status=None, tagID=201):
    """
    Die Funktion hollt sich als erstes die Informationen "customValue" und "config.files.vmPathName" aka. den Pfad aller VMs aus dem Server raus.
    Daraus werden nur die VMs genomen, die den Schluessel 201 aka. "Shutdown-Reihenfolge" besitzen und der mit den uebergeben Parametern uebereinstimmt.

    Folgend darauf werden alle laufende VMs gelistet. Diese werden dann mit den VMs die zufor ausgefiltert worden sind abgegliechen und als eine Liste zurueck gegeben.
    """

    if status and cluster:
        VirtualMachineFetchResult = VIServer.get_registered_vms(cluster=cluster, status=status)
        logger.info("Fetching Virtual Machines from cluster: '" + cluster + "' with the status: '" + status + "'")
    elif status and cluster is None:
        VirtualMachineFetchResult = VIServer.get_registered_vms(status=status)
        logger.info("Fetching Virtual Machines with the status: '" + status + "'")
    elif cluster and status is None:
        VirtualMachineFetchResult = VIServer.get_registered_vms(cluster=cluster)
        logger.info("Fetching Virtual Machines from cluster: '" + cluster + "'")
    else:
        VirtualMachineFetchResult = VIServer.get_registered_vms()
        logger.info("Fetching all Virtual Machines from vSphere")

    if categories and tagID:
        logger.info(
            "Filtering Virtual Machines by annotation ID: " + str(tagID) + " with the following content: " + ", ".join(
                categories))
        VirtualMachineList = []
        VirtualMachinesWithAnnotation = []
        VirtualMachinesRelated = []
        ProperetyNames = ['customValue', 'config.files.vmPathName', 'config.template']
        ProperetyResults = VIServer._retrieve_properties_traversal(property_names=ProperetyNames, obj_type="VirtualMachine")

        for obj in ProperetyResults:
            VirtualMachine = {'annotations': []}
            VirtualMachineList.append(VirtualMachine)

            if not hasattr(obj, "PropSet"):
                continue
            for prop in obj.PropSet:
                if prop.Name == "name":
                    VirtualMachine['name'] = prop.Val
                elif prop.Name == "config.files.vmPathName":
                    VirtualMachine['path'] = prop.Val
                elif prop.Name == "config.template":
                    VirtualMachine['is_template'] = prop.Val
                elif prop.Name == "customValue":
                    for annotation in prop.Val.CustomFieldValue:
                        VirtualMachine['annotations'].append((annotation.Key, annotation.Value))

        for VirtualMachine in VirtualMachineList:
            if not VirtualMachine['is_template']:
                for annotation in VirtualMachine['annotations']:
                    if tagID in annotation:
                        for category in categories:
                            if category in annotation:
                                VirtualMachinesWithAnnotation.append(VirtualMachine['path'])

        for i in VirtualMachinesWithAnnotation:
            if i in VirtualMachineFetchResult:
                VirtualMachinesRelated.append(i)

        return VirtualMachinesRelated
    else:
        return VirtualMachineFetchResult
Ejemplo n.º 15
0
server_obj  = VIServer()
 
server_obj.connect(host=host_ip,user=username,password=passwd)
# 可以连接esxi主机,也可以连接vcenter
 
# 获取连接的对象类型
print server_obj.get_server_type()
 
 
# 获取esxi的版本信息
print server_obj.get_api_version()
 
 
 
# 获取vcenter下的虚拟机的列表,可以带很多的参数,具体看方法的帮助
vm_list = server_obj.get_registered_vms()
 
 
# 关闭连接
server_obj.disconnect()
 
# 获取虚拟机的状态信息
 
# 通过路径获取vm的实例
vm1 = server_obj.get_vm_by_path()
# 通过名称获取vm的实例
vm1 = server_obj.get_vm_by_name()
 
# 下面就可以获取vm的具体信息
print vm1.get_status()
 
Ejemplo n.º 16
0
def main(options):
	global host_vms
	LOGGER.debug("Options: {0}".format(options))
	LOGGER.debug("Args: {0}".format(args))
	
	#check for senseful inputs
	if not options.vcServer or not options.satServer:
		LOGGER.error("You need to specify at least Satellite and vCenter hostnames!")
		exit(1)
	
	#get Satellite and vCenter credentials
	if options.dryrun: LOGGER.info("I'm only doing a simulation, I promise!")
	(satUsername, satPassword) = get_credentials("Satellite", options.satAuthfile)
	(vcUsername, vcPassword) = get_credentials("Virtualization", options.vcAuthfile)
	
	#connect to vCenter
	myVC = VIServer()
	myVC.connect(options.vcServer, vcUsername, vcPassword)
	
	#connect to Satellite
	satellite_url = "http://{0}/rpc/api".format(options.satServer)
	mySat = xmlrpclib.Server(satellite_url, verbose=options.debug)
	key = mySat.auth.login(satUsername, satPassword)
	check_if_api_is_supported(mySat)
	
	#print information about host
	LOGGER.info("Connected to " + options.vcServer + " (" + myVC.get_server_type() + "), version " + myVC.get_api_version() + ".")
	
	#get list of all ESXi hosts by datacenter
	LOGGER.info("Searching for ESXi hosts by datacenter...")
	esxiHosts = myVC.get_hosts()
	datacenters = myVC.get_datacenters()
	for dc in datacenters:
		tempHosts = myVC.get_hosts(from_mor=dc).values()
		hosts_by_dc[datacenters.get(dc)] = (tempHosts)
	LOGGER.debug("Hosts by DC: " + str(hosts_by_dc))
	
	#get list of all ESXi hosts by cluster
	LOGGER.info("Searching for ESXi hosts by cluster...")
	clusters = myVC.get_clusters()
	for cluster in clusters:
		tempHosts = myVC.get_hosts(from_mor=cluster).values()
		hosts_by_cluster[clusters.get(cluster)] = (tempHosts)
	LOGGER.debug("Hosts by cluster: " + str(hosts_by_cluster))
	
	#get list of all VMs by ESXi host
	for dc in datacenters:
		for host in hosts_by_dc[datacenters.get(dc)]:
			LOGGER.debug("Found ESXi host '" + host + "'")
			host_vms[host]=[]
	LOGGER.debug("Added hosts to dict: " + str(host_vms))
	
	#get list of all Linux VMs managed by Satellite
	satlist = mySat.system.listSystems(key)
	target_vms=[]
	LOGGER.info("Digging through list of systems managed by Satellite...")
	for system in satlist:
		LOGGER.debug("Found system '" + system["name"] + "'")
		#get custom keys
		thisKeys = mySat.system.getCustomValues(key, system["id"])
		#add virt_vmname if given
		if "SYSTEM_VIRT_VMNAME" in thisKeys and thisKeys["SYSTEM_VIRT_VMNAME"] != "":
			target_vms.append(thisKeys["SYSTEM_VIRT_VMNAME"])
		else: target_vms.append(system)
		LOGGER.debug("VM names: " + str(target_vms))
	
	#get list of all VMs and assign to host dicts
	LOGGER.info("Getting list of all VMs and assign them to host arrays - grab some coffee.")
	vmlist = myVC.get_registered_vms()
	counter=0
	hit=0
	for vm in vmlist:
		#get VM and its properties
		thisVM = myVC.get_vm_by_path(vm)
		#only add if in target_vms
		if thisVM.properties.name in target_vms:
			LOGGER.debug("Found VM managed by Satellite: '" + thisVM.properties.name + "'")
			host_vms[thisVM.properties.runtime.host.name].append(thisVM.properties.name)
		else: LOGGER.debug("'" + thisVM.properties.name + "' dropped as it is not managed by Satellite")
		
		LOGGER.debug("Current array for host '" + thisVM.properties.runtime.host.name + "': " + str(host_vms[thisVM.properties.runtime.host.name]))
		#show progress
		if hit == 9:
			LOGGER.info("Checked " + str(counter+1) + " of " + str(len(vmlist)) + " VMs so far...")
			hit=0
		else: hit=(hit+1)
		counter=(counter+1)
	LOGGER.debug("Added VMs to host dicts: " + str(host_vms))
	
	#get list of all Linux VMs managed by Satellite
	satlist = mySat.system.listSystems(key)
	LOGGER.info("Updating relevant system custom info keys...")
	for system in satlist:
		LOGGER.debug("Found system '" + system["name"] + "'")
		#get custom keys
		thisKeys = mySat.system.getCustomValues(key, system["id"])
		#update key if exists
		if "SYSTEM_VIRT_HOST" in thisKeys and thisKeys["SYSTEM_VIRT_HOST"] != "":
			#get ESXi host running VM
			if "SYSTEM_VIRT_VMNAME" in thisKeys and thisKeys["SYSTEM_VIRT_VMNAME"] != "":
				this_ESXi = get_ESXi_host_by_vm(thisKeys["SYSTEM_VIRT_VMNAME"])
			else: this_ESXi = get_ESXi_host_by_vm(system["name"])
			#get cluster if applicable
			this_cluster = get_cluster_by_ESXi_host(this_ESXi)
			#update custom key
			if this_cluster != "":
				#cluster
				this_value = "vpx://" + options.vcServer + "/" + get_datacenter_by_ESXi_host(this_ESXi) + "/" + this_cluster + "/" + this_ESXi
			else:
				#no cluster
				this_value = "vpx://" + options.vcServer + "/" + get_datacenter_by_ESXi_host(this_ESXi) + "/" + this_ESXi
			if options.vcVerify == False: this_value = this_value + "?no_verify=1"
			if options.dryrun:
				if this_ESXi != "": LOGGER.info("I'd like to set SYSTEM_VIRT_HOST='" + this_value + "' for system '" + system["name"] + "' (ID " + str(system["id"]) + ")")
				else: LOGGER.error("No valid virt host entry for system '" + system["name"] + "' (ID " + str(system["id"]) + ") found!")
			else:
				#update customkey if not null
				if this_ESXi != "":
					if mySat.system.setCustomValues(key, system["id"], {"SYSTEM_VIRT_HOST": this_value}):
						LOGGER.info("Updated virtual host entry for system '" + system["name"] + "' (ID " + str(system["id"]) + ").")
				else: LOGGER.error("No valid virt host entry for system '" + system["name"] + "' (ID " + str(system["id"]) + ") found!")
Ejemplo n.º 17
0
        print("done")
    except:
        print("connect to {} failed".format(args.host))
        exit(1)

    if args.file:
        vmxq = read_csv(args.file)

        while 1:
            if vmxq.qsize() > 0:
                d = vmxq.get()
                run_script()
            else:
                break

    elif args.show == 'datacenters':
        for k, v in vc.get_datacenters().items():
            print(k, v)

    elif args.show == 'datastores':
        for k, v in vc.get_datastores().items():
            print(k, v)

    elif args.show == 'vmxlist':
        for item in vc.get_registered_vms():
            print(item)
    else:
        run_script()

    vc.disconnect()
Ejemplo n.º 18
0
def get_vms_path(host):
    vi = VIServer()
    vi.connect(host, 'root', 'Pa$$word')
    all_vms_path = vi.get_registered_vms()
    print all_vms_path
    vi.disconnect()
Ejemplo n.º 19
0
class ESXi_Server:
    server_ip = ''
    user_name = ''
    password = ''
    connect_flag = False
    server = None

    # vm_list = []

    # Use the given args to connect the esxi server you want
    # @ip[string]: ESXi server's IP address
    # @name[string]: the username used to login the ESXi server
    # @pwd[string]: the password used to login the ESXi server
    def connect_server(self, ip, name, pwd):
        self.server_ip = ip
        self.user_name = name
        self.password = pwd
        self.server = VIServer()
        self.server.connect(self.server_ip, self.user_name, self.password)
        self.connect_flag = self.server.is_connected()
        if self.connect_flag:
            return True
        return False

    # To get all the definition registered vms from the connected server
    # @param[string]: can be set as ALL, POWER_ON, POWER_OFF, SUSPENDED
    # According to the param, returns a list of VM Paths. You might also filter by datacenter,
    # cluster, or resource pool by providing their name or MORs.
    # if  cluster is set, datacenter is ignored, and if resource pool is set
    # both, datacenter and cluster are ignored.
    def get_registered_vms(self,
                           param,
                           status=None,
                           datacenter=None,
                           cluster=None,
                           resource_pool=None):
        if param not in ['ALL', 'POWERED ON', 'POWERED OFF', 'SUSPENDED']:
            LOG.debug(
                "Get VMs error: param can only be set as ALL, POWERED ON,\
                    POWERED OFF, or SUSPENDED.")
            return None
        if not self.connect_flag:
            LOG.info("Get VMs error: Server not connected.")
            return None
        if param == 'ALL':
            return self.server.get_registered_vms(datacenter, cluster,
                                                  resource_pool)
        elif param == 'POWERED ON':
            return self.server.get_registered_vms(datacenter,
                                                  cluster,
                                                  resource_pool,
                                                  status='poweredOn')
        elif param == 'POWERED OFF':
            return self.server.get_registered_vms(datacenter,
                                                  cluster,
                                                  resource_pool,
                                                  status='poweredOff')
        elif param == 'SUSPENDED':
            return self.server.get_registered_vms(datacenter,
                                                  cluster,
                                                  resource_pool,
                                                  status='suspended')
        else:
            return None

    # Disconnect to the Server
    def disconnect(self):
        if self.connect_flag:
            self.server = self.server.disconnect()
            self.connect_flag = False

    # To keep session alive
    def keep_session_alive(self):
        return self.server.keep_session_alive()

    # To get the server type
    def get_server_type(self):
        return self.server.get_server_type()

    # To get performance manager
    def get_performance_manager(self):
        return self.server.get_performance_manager()

    # To get the all the server's hosts
    def get_all_hosts(self):
        """
        Returns a dictionary of the existing hosts keys are their names
        and values their ManagedObjectReference object.
        """
        return self.server.get_hosts()

    # To get all datastores
    def get_all_datastores(self):
        """
        Returns a dictionary of the existing datastores. Keys are
        ManagedObjectReference and values datastore names.
        """
        return self.server.get_datastores()

    # To get all clusters
    def get_all_clusters(self):
        """
        Returns a dictionary of the existing clusters. Keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_clusters()

    # To get all datacenters
    def get_all_datacenters(self):
        """
        Returns a dictionary of the existing datacenters. keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_datacenters()

    # To get all resource pools
    def get_all_resource_pools(self):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        """
        return self.server.get_resource_pools()

    # To get hosts by name
    def get_hosts_by_name(self, from_mor):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        @from_mor: if given, retrieves the hosts contained within the specified
            managed entity.
        """
        try:
            hosts_dic = self.server.get_hosts(from_mor)
        except:
            LOG.error("Get hosts error!")
            return None
        return hosts_dic

    def run_vm_by_name(self, name):
        """
        Run vm by name.
        """
        try:
            vm = self.server.get_vm_by_name(name)
            status = vm.get_status()
            if status == 'POWERED ON':
                pass
            elif status == 'POWERED OFF':
                try:
                    vm.power_on()
                except:
                    LOG.error("Run vm error!")
                    pass
            else:
                pass
        except:
            LOG.error("Get vm status error when runing vm!")
            pass

    def stop_vm_by_name(self, name):
        """
        Run vm by name.
        """
        try:
            vm = self.server.get_vm_by_name(name)
            status = vm.get_status()
            if status == 'POWERED OFF':
                pass
            elif status == 'POWERED ON':
                try:
                    vm.power_off()
                except:
                    LOG.error("Stop vm error!")
                    pass
            else:
                pass
        except:
            LOG.error("Get vm status error when stopping vm!")
            pass

    def get_vm_status_by_name(self, name):
        """
        Get vm status by nam
        """
        try:
            vm = self.server.get_vm_by_name(name)
            status = vm.get_status()
            LOG.info("Get VM status is %s" % status)
            return status
        except:
            LOG.info("Get VM status error!")
            return None
Ejemplo n.º 20
0
class ESXi_Server:
    server_ip    = ''
    user_name    = ''
    password     = ''
    connect_flag = False
    server       = None
    #vm_list      = []

    #def __init__(self):

    #Use the given args to connect the esxi server you want
    #@ip[string]: ESXi server's IP address
    #@name[string]: the username used to login the ESXi server
    #@pwd[string]: the password used to login the ESXi server
    def connect_server(self, ip, name, pwd):
        self.server_ip = ip
        self.user_name = name
        self.password  = pwd
        self.server = VIServer()
        self.server.connect(self.server_ip, self.user_name, self.password)
        self.connect_flag = self.server.is_connected()
        if self.connect_flag:
            return True
        return False

    #To get all the definition registered vms from the connected server
    #@param[string]: can be set as ALL, POWER_ON, POWER_OFF, SUSPENDED
    #According to the param, returns a list of VM Paths. You might also filter by datacenter,
    #cluster, or resource pool by providing their name or MORs.
    #if  cluster is set, datacenter is ignored, and if resource pool is set
    #both, datacenter and cluster are ignored.
    def get_registered_vms(self, param, status=None, datacenter=None, cluster=None,
                           resource_pool=None):
        if param not in ['ALL', 'POWER_ON', 'POWER_OFF', 'SUSPENDED']:
            print "Get VMs error: param can only be set as ALL, POWER_ON, POWER_OFF, or SUSPENDED."
            return None
        if self.connect_flag == False:
            print "Get VMs error: Server not connected."
            return None
        if param == 'ALL':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool)
        elif param == 'POWER_ON':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool, status='poweredOn')
        elif param == 'POWER_OFF':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool, status='poweredOff')
        elif param == 'SUSPENDED':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool, status='suspended')
        else:
            return None

    #Disconnect to the Server
    def disconnect(self):
        if self.connect_flag == True:
            self.server = self.server.disconnect()
            self.connect_flag == False

    #To keep session alive
    def keep_session_alive(self):
        assert self.server.keep_session_alive()

    #To get the server type
    def get_server_type(self):
        return self.server.get_server_type()

    #To get performance manager
    def get_performance_manager(self):
        return self.server.get_performance_manager()

    #To get the all the server's hosts
    def get_all_hosts(self):
        """
        Returns a dictionary of the existing hosts keys are their names
        and values their ManagedObjectReference object.
        """
        return self.server.get_hosts()

    #To get all datastores
    def get_all_datastores(self):
        """
        Returns a dictionary of the existing datastores. Keys are
        ManagedObjectReference and values datastore names.
        """
        return self.server.get_datastores()

    #To get all clusters
    def get_all_clusters(self):
        """
        Returns a dictionary of the existing clusters. Keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_clusters()

    #To get all datacenters
    def get_all_datacenters(self):
        """
        Returns a dictionary of the existing datacenters. keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_datacenters()

    #To get all resource pools
    def get_all_resource_pools(self):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        """
        return self.server.get_resource_pools()

    #To get hosts by name
    def get_hosts_by_name(self, from_mor):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        @from_mor: if given, retrieves the hosts contained within the specified
            managed entity.
        """
        try:
            hosts_dic = self.server.get_hosts(from_mor)
        except:
            print "Get hosts error!"
            return None
        return hosts_dic
Ejemplo n.º 21
0
args = parser.parse_args()
host = args.host
username = args.username
password = args.password
container = args.container
connectionstring = args.connectionstring
shuttle_file = args.shuttlefile
shuttle_filename = args.shuttlefile

# create server object
server = VIServer()
# connect to server
server.connect(host, username, password)

# get registered vms
vm_list = server.get_registered_vms()

# list for storing vm dictionaries
vm_obj_list = []

# get attributes for each vm
for vm in vm_list:

    # get our attributes
    vm_attr = server.get_vm_by_path(vm)
    vm_name = vm_attr.get_property('name')
    vm_ipv4 = vm_attr.get_property('ip_address', from_cache=False)

    # create our connection string
    vm_cmd = connectionstring + str(vm_ipv4)
Ejemplo n.º 22
0
#Get server characteristics
print server.get_server_type()

print server.get_api_version()

print server.get_clusters()

print server._get_resource_pools

#Get all the hosts
print server.get_hosts()

#Get VM`s in Prod resource pool which are in poweredon state

vmachines = server.get_registered_vms()
vmachines = server.get_registered_vms(resource_pool='Prod', status='poweredOn')

#Get virtual machine status
vm1 = server.get_vm_by_name('rhel5.3_prod')
print vm1.get_status()

#Also you can ask the following:
print vm1.is_powering_off()
print vm1.is_powered_off()
print vm1.is_powering_on()
print vm1.is_powered_on()
print vm1.is_suspending()
print vm1.is_suspended()
print vm1.is_resetting()
print vm1.is_blocked_on_msg()
Ejemplo n.º 23
0
        # If there's a VMWare Plugin object for this filesystem
        # snapshot the VMs before taking the ZFS snapshot
        from pysphere import VIServer
        server = VIServer()
        qs = VMWarePlugin.objects.filter(filesystem=fs)
        vmsnapname = str(uuid.uuid4())
        vmsnapdescription = str(datetime.now()).split('.')[0] + " FreeNAS Created Snapshot"
        snapvms = []
        snapvmfails = []
        for obj in qs:
            try:
                server.connect(obj.hostname, obj.username, obj.get_password())
            except:
                log.warn("VMware login failed to %s", obj.hostname)
                continue
            vmlist = server.get_registered_vms(status='poweredOn')
            for vm in vmlist:
                if vm.startswith("[%s]" % obj.datastore):
                    vm1 = server.get_vm_by_path(vm)
                    try:
                        vm1.create_snapshot(vmsnapname, description=vmsnapdescription, memory=False)
                    except:
                        log.warn("Snapshot of VM %s failed", vm1)
                        snapvmfails.append(vm)
                    snapvms.append(vm1)

        if snapvmfails:
            try:
                with LockFile(VMWARE_FAILS) as lock:
                    with open(VMWARE_FAILS, 'rb') as f:
                        fails = pickle.load(f)
Ejemplo n.º 24
0
def getVMdata(configFilePath, host, user, password, vmListFile):
    if (host is None and user is None and password is None):
        OPTION_CHAR = '='
        options = {}
        if os.path.exists(configFilePath):
            content = open(configFilePath)
            for line in content:
                if OPTION_CHAR in line:
                    option, value = line.split(OPTION_CHAR, 1)
                    option = option.strip()
                    value = value.strip()

                    if value.startswith('"') and value.endswith('"'):
                        value = value[1:-1]
                        options[option] = value

            HOST = options['HOST']
            USER = options['USER']
            PASSWORD = options['PASSWORD']
        else:
            print "Must supply valid ESX configuration file."
            sys.exit(1)
    else:
        HOST = host
        USER = user
        PASSWORD = password

    try:
        server = VIServer()
        server.connect(HOST, USER, PASSWORD)

        if vmListFile is None:
            vmlist = server.get_registered_vms()
        else:
            if os.path.exists(vmListFile):
                fileptr = open(vmListFile)
                content = fileptr.read()
                vmlist = content.split(",")

        metric = []

        vmMetrics = {
            'disk.write': 131079,
            'disk.read': 131078,
            'disk.usage': 131073,
            'cpu.usage': 1,
            'mem.usage': 65537
        }
        for vms in vmlist:
            vms = vms.strip()
            start = vms.find(']') + 2
            end = vms.find('/', start)
            vmName = vms[start:end]
            pm = server.get_performance_manager()
            vm = server.get_vm_by_path(vms)
            mor = vm._mor
            for key, value in vmMetrics.iteritems():
                entitystats = pm.get_entity_statistic(mor, key)
                for i in entitystats:
                    dict_result = dict(
                        (name, getattr(i, name)) for name in dir(i))
                    metric_name = vmName + '.' + dict_result[
                        'group'] + '.' + dict_result['counter']
                    group = dict_result['group']
                    timeTuple = dict_result['time']
                    ts = time.mktime(timeTuple.timetuple())
                    maxValue = getMaxValue(group)
                    if dict_result['unit'] == 'percent':
                        mvalue = float(dict_result['value']) / 100
                    else:
                        mvalue = dict_result['value']
                    metric.append({
                        "metric_name": metric_name,
                        "value": mvalue,
                        "unit": dict_result['unit'],
                        "server": vmName,
                        "maxValue": maxValue,
                        "time_stamp": ts
                    })

        return metric
    except Exception as e:
        print e
        sys.exit(1)
Ejemplo n.º 25
0
def get_host_vm_info(vcsa_host):
    user = "******"
    passwd = "xxxxx"

    server = VIServer()
    server.connect(vcsa_host, user, passwd)
    print('\033[32mVC connect successful...\033[0m')

    host_info = dict()
    for esx_hostname, esx_ip in server.get_hosts().items():
        print(esx_hostname, esx_ip)

        props = server._retrieve_properties_traversal(property_names=[
            'name', 'summary.overallStatus',
            'summary.quickStats.overallMemoryUsage',
            'summary.quickStats.overallCpuUsage',
            'summary.hardware.memorySize', 'summary.hardware.numCpuCores',
            'summary.hardware.numCpuThreads', 'summary.hardware.cpuMhz',
            'summary.hardware.otherIdentifyingInfo', 'hardware.biosInfo',
            'summary.hardware', 'datastore'
        ],
                                                      from_node=esx_hostname,
                                                      obj_type="HostSystem")
        try:
            for prop_set in props:
                # mor = prop_set.Obj #in case you need it
                for prop in prop_set.PropSet:
                    if prop.Name == "summary.quickStats.overallMemoryUsage":
                        used_mem = prop.Val
                    elif prop.Name == "summary.quickStats.overallCpuUsage":
                        host_used_cpu = prop.Val
                    elif prop.Name == "summary.hardware.otherIdentifyingInfo":
                        identification_info_list = prop.Val.__dict__[
                            '_HostSystemIdentificationInfo']
                        host_sn = identification_info_list[-1].__dict__[
                            '_identifierValue']
                    elif prop.Name == "summary.hardware.memorySize":
                        host_info["server_mem"] = prop.Val
                    elif prop.Name == "summary.hardware.numCpuThreads":
                        host_cpu_num = prop.Val
                    elif prop.Name == "summary.hardware.numCpuCores":
                        host_cpucores_num = prop.Val
                    elif prop.Name == "summary.hardware.cpuMhz":
                        mhz_per_core = prop.Val
                    elif prop.Name == "summary.overallStatus":
                        host_status = prop.Val
                        if host_status == "green":
                            host_info["status"] = "running"
                        elif host_status == "gray":
                            host_info["status"] = "down"
                        elif host_status == "yellow":
                            host_info["status"] = "running"
                        elif host_status == "red":
                            host_info["status"] = "error"
                    elif prop.Name == "hardware.biosInfo":
                        time_tuple = prop.Val.__dict__['_releaseDate']
                        host_info["release_date"] = time.strftime(
                            "%Y-%m-%d", time_tuple)
                    # print HostBiosInfo
                    elif prop.Name == "datastore":
                        datastore_list = prop.Val.__dict__[
                            '_ManagedObjectReference']
                        server_disk = dict()
                        disk_all_free = dict()
                        Datastore_All = 0
                        Datastore_Free = 0
                        for index, ds in enumerate(datastore_list):
                            DatastoreCapacity = 0
                            DatastoreFreespace = 0
                            DatastoreUsagePercent = 0
                            props_d = server._retrieve_properties_traversal(
                                property_names=[
                                    'name', 'summary.capacity',
                                    'summary.freeSpace'
                                ],
                                from_node=ds,
                                obj_type="Datastore")
                            for prop_set_d in props_d:
                                for prop_d in prop_set_d.PropSet:
                                    if prop_d.Name == "summary.capacity":
                                        DatastoreCapacity = (prop_d.Val /
                                                             1024 / 1024 /
                                                             1024)
                                    elif prop_d.Name == "summary.freeSpace":
                                        DatastoreFreespace = (prop_d.Val /
                                                              1024 / 1024 /
                                                              1024)
                            DatastorePreUsagePercent = ((
                                (DatastoreCapacity - DatastoreFreespace) * 100)
                                                        / DatastoreCapacity)
                            disk_all_free[ds] = [
                                DatastoreCapacity, DatastoreFreespace,
                                DatastorePreUsagePercent
                            ]
                            Datastore_All = Datastore_All + DatastoreCapacity
                            Datastore_Free = Datastore_Free + DatastoreFreespace
                        DatastoreUsagePercent = ((
                            (Datastore_All - Datastore_Free) * 100) /
                                                 Datastore_All)
                        server_disk["total"] = Datastore_All
                        server_disk["free"] = Datastore_Free
                        server_disk["used_pct"] = DatastoreUsagePercent
                        server_disk["detail"] = disk_all_free
                        # print server_disk
                    elif prop.Name == "summary.hardware":
                        # print 'hardware----:', prop.Val.__dict__
                        hardware = prop.Val.__dict__
                        host_info["product_name"] = hardware['_model']
                        host_info["uuid"] = hardware['_uuid']
                        host_info["manufacturer"] = hardware['_vendor']
        except Exception as e:
            # print(prop.Val.__dict__)
            print(e)
            continue
            host_info["vmware_disk"] = server_disk
        host_info["used_cpu"] = (host_used_cpu * 100) / (host_cpucores_num *
                                                         mhz_per_core)
        host_info["server_cpu"] = host_cpu_num
        host_info["used_mem"] = '%.1f' % (
            (used_mem * 1024 * 1024 * 100) / host_info["server_mem"])
        host_info["is_vm"] = 0
        host_info['sn'] = host_sn
        host_info["os"] = "VMware ESX"
        host_info["hostname"] = esx_hostname
        host_info["nic_mac_ip"] = {esx_hostname: [{esx_hostname: [esx_ip]}]}
        host_info["check_update_time"] = datetime.datetime.now().strftime(
            "%Y-%m-%d %H:%M:%S")
        # host_running_num = len(server.get_registered_vms(esx_hostname, status='poweredOn'))
        # host_stop_num = len(server.get_registered_vms(esx_hostname, status='poweredOff'))
        host_info["vm_num"] = len(server.get_registered_vms(esx_hostname))
        res['params'] = host_info
        print(esx_ip, host_info)
        send(res)

    # vm host
    vms_info = dict()
    properties = [
        'summary.vm', 'summary.config.numEthernetCards',
        'summary.config.annotation', 'summary.config.numVirtualDisks',
        'summary.quickStats.overallCpuUsage',
        'summary.quickStats.guestMemoryUsage',
        'summary.quickStats.ftLogBandwidth',
        'summary.quickStats.hostMemoryUsage',
        'summary.quickStats.uptimeSeconds', 'summary.runtime.powerState',
        'summary.runtime.bootTime', 'summary.runtime.host',
        'summary.runtime.maxCpuUsage', 'summary.runtime.maxMemoryUsage',
        'summary.storage.committed', 'summary.storage.uncommitted',
        'summary.storage.unshared', 'summary.storage.timestamp',
        'guestHeartbeatStatus', 'guest.toolsStatus',
        'guest.toolsVersionStatus', 'guest.toolsVersion', 'guest.guestId',
        'guest.guestFullName', 'guest.guestState', 'guest.ipAddress',
        'guest.hostName', 'name', 'parent', 'config.template',
        'config.hardware.numCPU', 'config.hardware.memoryMB', 'config.uuid'
    ]

    # 通过_retrieve_properties_traversal方法传入API接口定义拿到对象类型为 VirtualMachine 的信息
    props = server._retrieve_properties_traversal(property_names=properties,
                                                  obj_type='VirtualMachine')
    server.disconnect()

    # 通过server.get_hosts()拿到VC下面所有的host信息(字典);
    # 通过这个方法可以把'guest.hostName'取出的MOR对象转换成实际的hostname
    # hostname = server.get_hosts().items()

    for prop in props:
        mor = prop.Obj
        vm = {}
        for p in prop.PropSet:
            vm[p.Name] = p.Val
        vms_info[mor] = vm

    vms_dict = vms_info.values()
    vm_info = {}
    for i in range(len(vms_dict)):
        vm = vms_dict[i]
        """
        {'config.hardware.numCPU': 2, 'guest.guestId': 'centos64Guest', 'guest.guestFullName': 'CentOS 4/5 or later (64-bit)', 
        'summary.quickStats.hostMemoryUsage': 3846, 'summary.storage.committed': 68898546142, 'guest.hostName': 'JF-PROD-zk02', 
        'summary.quickStats.uptimeSeconds': 63854590, 'summary.runtime.maxMemoryUsage': 4096, 
        'config.uuid': '564d162d-99ee-19a4-9b2d-6721d5e6f9f1', 'guest.ipAddress': '172.20.1.27', 
        'config.template': False, 'guest.toolsVersionStatus': 'guestToolsCurrent', 'summary.quickStats.ftLogBandwidth': -1, 
        'summary.config.numEthernetCards': 1, 'summary.storage.uncommitted': 1002, 'config.hardware.memoryMB': 4096, 
        'summary.runtime.host': 'host-396', 'summary.config.annotation': '', 'parent': 'group-v372', 
        'summary.quickStats.overallCpuUsage': 66, 'summary.runtime.powerState': 'poweredOn', 'summary.runtime.maxCpuUsage': 4400, 
        'guest.toolsVersion': '9536', 'guest.guestState': 'running', 'guestHeartbeatStatus': 'green', 'name': 'JF-PROD-zk02', 
        'summary.storage.timestamp': (2018, 11, 30, 15, 25, 30, 654, 0, 0), 'summary.storage.unshared': 64424509440, 
        'summary.config.numVirtualDisks': 2, 'summary.quickStats.guestMemoryUsage': 327, 
        'summary.runtime.bootTime': (2016, 9, 18, 23, 20, 56, 724, 0, 0), 'guest.toolsStatus': 'toolsOk', 'summary.vm': 'vm-401'}
        """
        # vm_info["hostname"] = vm["name"]
        vm_info["parent_host"] = vm["summary.runtime.host"]
        vm_info["uuid"] = vm["config.uuid"]
        vm_info["status"] = vm["guest.guestState"]
        print(vm_info)
        res['params'] = vm_info
        send(res)
Ejemplo n.º 26
0
    default_context = ssl._create_default_https_context
    ssl._create_default_https_context = ssl._create_unverified_context
server.connect(args.vcenter, args.vuser, args.vpass, **kwargs)


def invert(d):
    return dict(zip(d.values(), d.keys()))


def getClusterByName(server, name):
    return invert(server.get_clusters()).get(name, None)


cluster_mor = getClusterByName(server, args.cluster)

vmlist = server.get_registered_vms(cluster=cluster_mor,
                                   status='powered' + args.state)

# https://groups.google.com/forum/#!topic/pysphere/UCL7epa_sFU
hosts = server.get_hosts()

for vmpath in vmlist:
    vm = server.get_vm_by_path(vmpath)
    host_mor = vm.properties.runtime.host._obj
    # print vm.properties.runtime.host.name
    if args.hosts:
        print vm.get_property('name'), hosts[host_mor]
    elif args.datastores:
        print vm.get_property('name'), vm.properties.datastore[0].name
    else:
        print vm.get_property('name')
Ejemplo n.º 27
0
    # Getting clusters
    logger.debug('Getting clusters')
    clusters = con.get_clusters().values()

    # Getting Hosts
    logger.debug('Getting Hosts')
    hosts = con.get_hosts().values()

    # Getting Datastores
    logger.debug('Getting Datastores')
    datastores = con.get_datastores().values()

    # Getting Registered VMs
    logger.debug('Getting VMs')
    vms = con.get_registered_vms()

    # Disconnecting from server
    con.disconnect()
except VIException as ins:
    logger.error(ins)
    logger.debug('An error ocurred getting vSphere data.')
    con.disconnect()
    sys.exit()

# printing main report
print_main(datacenters, clusters, hosts, datastores, vms)

# printing DC report
if dc_i:
    logger.debug('Printing datacentres')
Ejemplo n.º 28
0
        guest.shutdown_guest()
    elif cmd == 'reset':
        guest.reset(sync_run=False)
    elif cmd == 'hard':
        guest.terminate_process()
    else:
        print 'Unrecognized Command!'


if len(sys.argv) == 1:
    print ''' 
    commandline : esxpy.py 'GuestName' 'option'
    The available options are: 'REBOOT', 'ON', 'OFF', 'SHUTDOWN', 'RESET',
    or 'HARD' (which terminates the process of a stuck VM).

    If no option is given the status of the Guest is returned.
    
    Currently available VM's are:
    '''
    for i in server.get_registered_vms():
        print '\t' + i
    #print server.get_registered_vms()
    sys.exit(0)

guest = server.get_vm_by_path(sys.argv[1])

print "The guest's current state is: \n %s\n" % guest_status()

if sys.argv[2:]:
    guest_power(sys.argv[2].lower())
Ejemplo n.º 29
0
def get_host_info(host_ip,host_name,host_password):
    hosts_dict_data = []
    server = VIServer()
    server.connect(host_ip, host_name, host_password)
    #print 'VC connect successful...'
    #DebugInfo.objects.create(text_info='VC connect successful...')

    for d, hname in server.get_hosts().items():

        HostMemoryUsage = 0
        HostCpuUsage = 0
        HostTotalMemory = 0
        HostNumCpuCores = 0
        HostMhzPerCore = 0
        HostStatus = ''

        props = server._retrieve_properties_traversal(property_names=[
            'name',
            'summary.overallStatus',
            'summary.quickStats.overallMemoryUsage',
            'summary.quickStats.overallCpuUsage',
            'summary.hardware.memorySize',
            'summary.hardware.numCpuCores',
            'summary.hardware.cpuMhz',
            'hardware.biosInfo',
            'hardware.systemInfo',
            'summary.runtime.healthSystemRuntime.hardwareStatusInfo.cpuStatusInfo',
            'summary.runtime.healthSystemRuntime.hardwareStatusInfo.memoryStatusInfo',
            'summary.runtime.healthSystemRuntime.hardwareStatusInfo.storageStatusInfo'
        ], from_node=d, obj_type="HostSystem")

        for prop_set in props:
            # mor = prop_set.Obj #in case you need it
            for prop in prop_set.PropSet:
                if prop.Name == "summary.quickStats.overallMemoryUsage":
                    HostMemoryUsage = prop.Val
                elif prop.Name == "summary.quickStats.overallCpuUsage":
                    HostCpuUsage = prop.Val
                elif prop.Name == "summary.hardware.memorySize":
                    HostTotalMemory = (prop.Val / 1048576)
                elif prop.Name == "summary.hardware.numCpuCores":
                    HostNumCpuCores = prop.Val
                elif prop.Name == "summary.hardware.cpuMhz":
                    HostMhzPerCore = prop.Val
                elif prop.Name == "summary.overallStatus":
                    HostStatus = prop.Val
                    if HostStatus == "green":
                        HostStatus = 0
                    elif HostStatus == "gray":
                        HostStatus = 1
                    elif HostStatus == "yellow":
                        HostStatus = 2
                    elif HostStatus == "red":
                        HostStatus = 3
                elif prop.Name == "hardware.biosInfo":
                    HostBiosInfo = prop.Val.__dict__['_biosVersion']
                # print HostBiosInfo
                elif prop.Name == "hardware.systemInfo":
                    HostSystemInfo = prop.Val.__dict__
                    HostType = HostSystemInfo['_model']
                elif prop.Name == "summary.runtime.healthSystemRuntime.hardwareStatusInfo.cpuStatusInfo":
                    HostHealthInfo_cpu = prop.Val.__dict__
                    for i in HostHealthInfo_cpu['_HostHardwareElementInfo']:
                        cpu = i.__dict__
                        cpu1 = cpu['_status'].__dict__
                        HostCPUHealthInfo = cpu1['_label']
                elif prop.Name == "summary.runtime.healthSystemRuntime.hardwareStatusInfo.memoryStatusInfo":
                    HostHealthInfo_memory = prop.Val.__dict__
                    for i in HostHealthInfo_memory['_HostHardwareElementInfo']:
                        mem = i.__dict__
                        mem1 = mem['_status'].__dict__
                        # print mem1
                        HostMemHealthInfo = mem1['_label']
                        # print HostMemHealthInfo
                elif prop.Name == "summary.runtime.healthSystemRuntime.hardwareStatusInfo.storageStatusInfo":
                    HostHealthInfo_storage = prop.Val.__dict__

        HostRunningVMS = len(server.get_registered_vms(d, status='poweredOn'))
        HostStoppedVMS = len(server.get_registered_vms(d, status='poweredOff'))
        HostTotalVMS = len(server.get_registered_vms(d))
        HostCpuTotal = (HostNumCpuCores * HostMhzPerCore)
        HostMemoryUsagePercent = round((HostMemoryUsage * 100) / HostTotalMemory,2)
        HostCpuUsagePercent = round(((HostCpuUsage * 100) / HostCpuTotal),2)

        hosts_dict = {'hostnumber':d, 'hostname': hname.lower(), 'hoststatus': HostStatus, 'hostmemoryusage': HostMemoryUsage,
                      'hostcpuusage': HostCpuUsage, 'hosttotalmemory': HostTotalMemory, 'hostcputotal': HostCpuTotal,
                      'hostmemoryusagepercent': HostMemoryUsagePercent, 'hostcpuusagepercent': HostCpuUsagePercent,
                      'hostrunningvms': HostRunningVMS, 'hoststoppedvms': HostStoppedVMS, 'hosttotalvms': HostTotalVMS,
                      'hostbiosinfo': HostBiosInfo, 'hosttype': HostType, 'hostcpuhealthinfo': HostCPUHealthInfo}
        hosts_dict_data.append(hosts_dict)

    server.disconnect()
    return hosts_dict_data
Ejemplo n.º 30
0
#!/usr/bin/env python
from pysphere import VIServer

server = VIServer()
server.connect("my.esx.host.example.org", "username", "secret")

# datacenter is case-senstive
vmlist = server.get_registered_vms(datacenter="MyDataCenter", cluster="MyCluster")
for vm_path in vmlist:
  vm = server.get_vm_by_path(vm_path)
  status = vm.get_status()
  print "vm_path=[%s], status=[%s]" % (vm_path, status)

server.disconnect()
Ejemplo n.º 31
0
class VMWareSystem(MgmtSystemAPIBase):
    """Client to Vsphere API

    This class piggy backs off pysphere.

    Benefits of pysphere:
      - Don't need intimate knowledge w/ vsphere api itself.
    Detriments of pysphere:
      - Response often are not detailed enough.

    """

    def __init__(self, hostname, username, password, **kwargs):
        self.api = VIServer()
        self.api.connect(hostname, username, password)

    def _get_vm(self, vm_name=None):
        if vm_name is None:
            raise Exception('Could not find a VM named %s.' % vm_name)
        else:
            try:
                vm = self.api.get_vm_by_name(vm_name)
                return vm
            except VIException as ex:
                raise Exception(ex)

    def _get_resource_pool(self, resource_pool_name=None):
        rps = self.api.get_resource_pools()
        for mor, path in rps.iteritems():
            if re.match('.*%s' % resource_pool_name, path):
                return mor
        # Just pick the first
        return rps.keys()[0]

    def _find_ip(self, vm):
        maxwait = 600
        net_info = None
        waitcount = 0
        while net_info is None:
            if waitcount > maxwait:
                break
            net_info = vm.get_property('net', False)
            waitcount += 5
            time.sleep(5)
        if net_info:
            ipv4_re = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
            for ip in net_info[0]['ip_addresses']:
                if re.match(ipv4_re, ip) and ip != '127.0.0.1':
                    return ip
        return None

    def start_vm(self, vm_name):
        vm = self._get_vm(vm_name)
        if vm.is_powered_on():
            return True
        else:
            vm.power_on()
            ack = vm.get_status()
            if ack == 'POWERED ON':
                return True
        return False

    def stop_vm(self, vm_name):
        vm = self._get_vm(vm_name)
        if vm.is_powered_off():
            return True
        else:
            vm.power_off()
            ack = vm.get_status()
            if ack == 'POWERED OFF':
                return True
        return False

    def delete_vm(self, vm_name):
        vm = self._get_vm(vm_name)

        if vm.is_powered_on():
            self.stop_vm(vm_name)

        # When pysphere moves up to 0.1.8, we can just do:
        # vm.destroy()
        request = VI.Destroy_TaskRequestMsg()
        _this = request.new__this(vm._mor)
        _this.set_attribute_type(vm._mor.get_attribute_type())
        request.set_element__this(_this)
        rtn = self.api._proxy.Destroy_Task(request)._returnval

        task = VITask(rtn, self.api)
        status = task.wait_for_state([task.STATE_SUCCESS, task.STATE_ERROR])
        if status == task.STATE_SUCCESS:
            return True
        else:
            return False

    def create_vm(self, vm_name):
        raise NotImplementedError('This function has not yet been implemented.')

    def restart_vm(self, vm_name):
        if not self.stop_vm(vm_name):
            return False
        else:
            return self.start_vm(vm_name)

    def list_vm(self, **kwargs):
        vm_list = self.api.get_registered_vms(**kwargs)

        # The vms come back in an unhelpful format, so run them through a regex
        # Example vm name: '[datastore] vmname/vmname.vmx'
        def vm_name_generator():
            for vm in vm_list:
                match = re.match(r'\[.*\] (.*)/\1\..*', vm)
                if match:
                    yield match.group(1)

        # Unroll the VM name generator, and sort it to be more user-friendly
        return sorted(list(vm_name_generator()))

    def info(self):
        return '%s %s' % (self.api.get_server_type(), self.api.get_api_version())

    def disconnect(self):
        self.api.disconnect()

    def vm_status(self, vm_name):
        state = self._get_vm(vm_name).get_status()
        print "vm " + vm_name + " status is " + state
        return state

    def is_vm_running(self, vm_name):
        state = self.vm_status(vm_name)
        return "POWERED ON" == state

    def is_vm_stopped(self, vm_name):
        state = self.vm_status(vm_name)
        return "POWERED OFF" == state

    def is_vm_suspended(self, vm_name):
        state = self.vm_status(vm_name)
        return "SUSPENDED" == state

    def suspend_vm(self, vm_name):
        vm = self._get_vm(vm_name)
        if vm.is_powered_off():
            raise Exception('Could not suspend %s because it\'s not running.' % vm_name)
        else:
            vm.suspend()
            return self.is_vm_suspended(vm_name)

    def clone_vm(self, source_name, vm_name, resourcepool=None):
        vm = self._get_vm(source_name)
        if vm:
            clone = vm.clone(vm_name, sync_run=True,
                resourcepool=self._get_resource_pool(resourcepool))
            return self._find_ip(clone)
        else:
            raise Exception('Could not clone %s' % source_name)
Ejemplo n.º 32
0
class Server:
    """Vsphere server that a client can connect to"""

    SUPPORTED_FILTER_KEYWORDS = ["uuidSpec", "pathSpec", "nameSpec"]

    url = os.getenv("VSPHERE_URL")
    """URL of vSphere endpoint"""

    # : vSphere account username
    username = os.getenv("VSPHERE_USER")

    # : vSphere account password
    password = os.getenv("VSPHERE_PASSWORD")

    def __init__(self, url=None, username=None, password=None):
        """Constructs an Server instance with given endpoint and credentials
        
        :param url: end point hostname/URL to connect to.
           As of this release, url must be an http url with port 80, e.g.
           like this: http://vsphere.example.com
           
        :param username: vSphere account username
        :param password: vSphere account password
        
        """
        self._server = VIServer()
        self._vm_datacenters = {}

        # don't set to None if already set from environment
        if url:
            self.url = url
        if username:
            self.username = username
        if password:
            self.password = password

    def connect(self, url=None, username=None, password=None):
        """Connects to vSphere server using optional arguments
         that may override those in Server constructor.
        If arguments are not given, previously specified arguments will
        be used for connection in this order:
        
        * last connect arguments (if specified)
        * constructor arguments (if specified)
        * environment variables
        
        If none of the above is specified, the exception MissingArgumentException
        is raised
        
        
        :type url: string
        :param url: end point hostname/URL to connect to
        :type username: string
        :param username: vSphere account username
        :type password: string
        :param password: vSphere account password
        :type password: string
        :param password: vSphere account password
        
        """
        if url:
            self.url = url
        if username:
            self.username = username
        if password:
            self.password = password

        # check if all needed properties available for connect
        argErrors = []
        if not self.url:
            argErrors.append("url unknown")
        if not self.username:
            argErrors.append("username unknown")
        if not self.password:
            argErrors.append("password unknown")

        if argErrors:
            raise MissingArgumentError(" ".join(argErrors))
        # parse host from url
        host = urlparse(self.url).hostname
        # perform connect
        logger.debug("connect: %s; %s" % (url, username))
        self._server.connect(host, self.username, self.password, trace_file=prototrace_file)

    def disconnect(self):
        """Disconnects from vSphere server"""
        self._server.disconnect()
        self._server = []

    def power_on_vm(self, instanceUuid, sync_run=True, host=None):
        """Powers on a virtual machine for a given instanceUuid"""
        return self._get_instance(instanceUuid).power_on(sync_run, host)

    def power_off_vm(self, instanceUuid, sync_run=True):
        """Powers off a virtual machine for a given instanceUuid"""
        return self._get_instance(instanceUuid).power_off(sync_run)

    def clone_vm(self, instanceUuid, name=None, sync_run=True, host=None):
        """Clones a virtual machine for a given instanceUuid.
        
        :param instanceUuid: instanceUuid of VM to clone
        :param name: name to give to the cloned machine.
         if None, a new name will be generated using the original instance
         name with time stamp appended, e.g.:
         'ubuntu_csk1_08-1349968939'
         
        """
        import time

        instance = self._get_instance(instanceUuid)
        if not name:
            name = "%s-%d" % (instance.get_property("name"), time.time())
        return instance.clone(name, sync_run, host=host)

    def reset_vm(self, instanceUuid, sync_run=True):
        """Powers off a virtual machine for a given instanceUuid"""
        return self._get_instance(instanceUuid).reset(sync_run)

    def suspend_vm(self, instanceUuid, sync_run=True):
        """Suspends a virtual machine for a given instanceUuid"""
        return self._get_instance(instanceUuid).suspend(sync_run)

    def list_instances(self, instanceUuid=None, filter=None, datacenter=None):
        """Lists all vmware instances that match the given filter.

        :type instanceUuid: string
        :param instanceUuid: InstanceUuid to filter on. This is a convenience
          parameter that will override a corresponding value in filter, 
          if it exists. 
          
        :param datacenter: name of datacenter to filter VMs registered in that datacenter

        :type filter: dict
        :param filter: represents a filter specification and can consist of 
            any valid properties, such as
            
            { 'config.instanceUuid': [ '50398c64-55ad-7eb2-f14a-6f70b6903b06' ] }
            
            or
            
            {'runtime.powerState': ['poweredOn']}
            
            or
            
            {'runtime.powerState': ['poweredOff'], 'config.instanceUuid': [ '50398c64-55ad-7eb2-f14a-6f70b6903b06' ] }
            


        :rtype: list
        :return: A list of :class:`vmware.vsphere.VM`
        
        """

        # get the vm paths
        if instanceUuid and len(instanceUuid):
            if not isinstance(instanceUuid, str):
                raise BadParameterError("instanceUuid parameter must be a string")
            if not filter:
                filter = {}
            filter["config.instanceUuid"] = [instanceUuid]

        self._vmspaths = self._server.get_registered_vms(datacenter, advanced_filters=filter)
        logger.debug("list_instances: retrieved %d vm paths" % len(self._vmspaths))
        # instantiate instances for vm paths
        self.vms = []
        for p in self._vmspaths:
            self.vms.append(VM(p, self))

        # first time this function runs, fetch information about vm to datacenter mapping
        self._fetch_datacenter_vms()
        return self.vms

    def get_hosts(self, datacenter=None):
        """Returns a dictionary of the existing hosts keys are their names
        and values their ManagedObjectReference object.
        
        Example usage:
        >>> server.get_hosts()
        {'host-23': '108.61.71.220', 'host-19': '108.61.71.219', 'host-36': '173.71.195.168'}
        >>> server.get_hosts('datacenter-12')
        >>> from catosphere import Server
        >>> server = Server()
        >>> server.connect()
        >>> server.get_datacenters()
        {'datacenter-12': 'csk3', 'datacenter-2': 'csk1', 'datacenter-7': 'csk2'}
        >>> server.get_hosts('datacenter-2')
        {'host-23': '108.61.71.220', 'host-19': '108.61.71.219'}
        >>> server.get_hosts('datacenter-7')
        {'host-36': '173.71.195.168'}
        >>> server.get_hosts('datacenter-12')
        {}
        >>> server.get_hosts()
        {'host-23': '108.61.71.220', 'host-19': '108.61.71.219', 'host-36': '173.71.195.168'}
        >>> server.disconnect()
        
        
        :return: a dict   
         e.g.
        {'host-23': '108.61.71.220', 'host-19': '108.61.71.219', 'host-36': '173.71.195.168'}
        if not hosts are found, empty dict is returned.

        """
        if datacenter:
            hosts = self._server._get_managed_objects(MORTypes.HostSystem, from_mor=datacenter)
        else:
            hosts = self._server.get_hosts()
        return hosts

    def get_datacenters(self):
        """Returns a dictionary of the existing datacenters. keys are their
        ManagedObjectReference objects and values their names.
                
        :return: a dict   
         e.g.
        {'datacenter-12': 'csk3', 'datacenter-2': 'csk1', 'datacenter-7': 'csk2'}

        """
        return self._server.get_datacenters()

    # ******************************************************
    # ***************** Private Methods *******************
    # ******************************************************

    def _fetch_datacenter_vms(self):
        """ Fetch/cache datacenter vm mapping information.
        
        This can be later used to retrieve datacenter information for each
        VM.
        """
        if not self._vm_datacenters:
            dcs = self.get_datacenters()
            for name in dcs.keys():
                self._vm_datacenters[name] = self._server._get_managed_objects(MORTypes.VirtualMachine, from_mor=name)

            # logger.debug(': _vm_datacenters: %s' % self._vm_datacenters)

    def _get_instance(self, instanceUuid):
        """ Retrieves instance by its instanceUuid.
        
        TODO: make this faster by caching instances.
        """
        instances = self.list_instances(instanceUuid)
        if not instances:
            raise InstanceNotFoundError("Instance %s not found" % instanceUuid)
        else:
            return instances[0]
Ejemplo n.º 33
0
class VCenterManagement:
    server_ip = ''
    user_name = ''
    password = ''
    connect_flag = False
    server = None

    #vm_list      = []

    #def __init__(self):

    #Use the given args to connect the esxi server you want
    #@ip[string]: ESXi server's IP address
    #@name[string]: the username used to login the ESXi server
    #@pwd[string]: the password used to login the ESXi server
    def connect_server(self, ip, name, pwd):
        self.server_ip = ip
        self.user_name = name
        self.password = pwd
        self.server = VIServer()
        self.server.connect(self.server_ip, self.user_name, self.password)
        self.connect_flag = self.server.is_connected()
        if self.connect_flag:
            return True
        return False

    #To get all the definition registered vms from the connected server
    #@param[string]: can be set as ALL, POWER_ON, POWER_OFF, SUSPENDED
    #According to the param, returns a list of VM Paths. You might also filter by datacenter,
    #cluster, or resource pool by providing their name or MORs.
    #if  cluster is set, datacenter is ignored, and if resource pool is set
    #both, datacenter and cluster are ignored.
    def get_registered_vms(self,
                           param,
                           status=None,
                           datacenter=None,
                           cluster=None,
                           resource_pool=None):
        if param not in ['ALL', 'POWER_ON', 'POWER_OFF', 'SUSPENDED']:
            print "Get VMs error: param can only be set as ALL, POWER_ON, POWER_OFF, or SUSPENDED."
            return None
        if self.connect_flag == False:
            print "Get VMs error: Server not connected."
            return None
        if param == 'ALL':
            return self.server.get_registered_vms(datacenter, cluster,
                                                  resource_pool)
        elif param == 'POWER_ON':
            return self.server.get_registered_vms(datacenter,
                                                  cluster,
                                                  resource_pool,
                                                  status='poweredOn')
        elif param == 'POWER_OFF':
            return self.server.get_registered_vms(datacenter,
                                                  cluster,
                                                  resource_pool,
                                                  status='poweredOff')
        elif param == 'SUSPENDED':
            return self.server.get_registered_vms(datacenter,
                                                  cluster,
                                                  resource_pool,
                                                  status='suspended')
        else:
            return None

    #Disconnect to the Server
    def disconnect(self):
        if self.connect_flag == True:
            self.server = self.server.disconnect()
            self.connect_flag == False

    #To keep session alive
    def keep_session_alive(self):
        assert self.server.keep_session_alive()

    #To get the server type
    def get_server_type(self):
        return self.server.get_server_type()

    #To get performance manager
    def get_performance_manager(self):
        return self.server.get_performance_manager()

    #To get the all the server's hosts
    def get_all_hosts(self):
        """
        Returns a dictionary of the existing hosts keys are their names
        and values their ManagedObjectReference object.
        """
        return self.server.get_hosts()

    #To get all datastores
    def get_all_datastores(self):
        """
        Returns a dictionary of the existing datastores. Keys are
        ManagedObjectReference and values datastore names.
        """
        return self.server.get_datastores()

    #To get all clusters
    def get_all_clusters(self):
        """
        Returns a dictionary of the existing clusters. Keys are their 
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_clusters()

    #To get all datacenters
    def get_all_datacenters(self):
        """
        Returns a dictionary of the existing datacenters. keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_datacenters()

    #To get all resource pools
    def get_all_resource_pools(self):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        """
        return self.server.get_resource_pools()

    #To get hosts by name
    def get_hosts_by_name(self, from_mor):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        @from_mor: if given, retrieves the hosts contained within the specified 
            managed entity.
        """
        try:
            hosts_dic = self.server.get_hosts(from_mor)
        except:
            print "Get hosts error!"
            return None
        return hosts_dic

    def get_vm_by_name(self, vm_name):
        try:
            vm = self.server.get_vm_by_name(vm_name)
        except:
            print "Get vm error!"
            return None
        return vm

    def power_on_vm(self, vm_name):
        try:
            vm = self.get_vm_by_name(vm_name)
            if (vm.is_powered_off()):
                vm.power_on()
                print "vm " + vm_name + " power on success."
            else:
                print "vm " + vm_name + "is already power on"
                return False
        except:
            print "Power on vm " + vm_name + "error"
            return False
        return True

    def power_off_vm(self, vm_name):
        try:
            vm = self.get_vm_by_name(vm_name)
            if (vm.is_powered_on()):
                vm.power_off()
                print "vm " + vm_name + " power off success."
            else:
                print "vm " + vm_name + "is already power off"
                return False
        except:
            print "Power off vm " + vm_name + " error"
            return False
        return True
Ejemplo n.º 34
0
class EsxiController(object):
    def __init__(self, servername=None, password=None, username='******'):
        # Initialize viserver
        self.vi_server = VIServer()

        # Specify excluding VMs' preffix
        self.p = re.compile('xx|yy', re.I)

        self.class_name = self.__class__.__name__
        self.servername = servername
        self.username = username
        self.password = password
        self.vmlist = []
        self.vmstatusdict = {}
        self.inUse_vmstatusdict = {}
        self.vmfullnamelist = {}
        self.inUse_vmfullnamelist = {}
        self.vmdict = {}
        self.inUseDict = {}

    def connect(self):
        logging.debug('connecting to %s' % self.servername)

        try:
            self.vi_server.connect(self.servername,
                                   self.username,
                                   self.password,
                                   trace_file='/tmp/esxi_debug.txt')
        except BaseException as e:
            logging.debug('Can not connect to %s: %s' % (self.servername, e))
            # sys.exit(1)
        else:
            if self.vi_server.is_connected():
                logging.debug('connected to %s successfully' % self.servername)
                logging.debug('Currently server version is: %s %s' %
                              (self.vi_server.get_server_type(),
                               self.vi_server.get_api_version()))

    def disconnect(self):
        self.vi_server.disconnect()
        logging.debug('To disconnect from server %s\n' % self.servername)

    def get_vmlist(self):
        self.vmlist = self.vi_server.get_registered_vms()
        return self.vmlist

    def get_vmstatus(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmstatus = vm.get_status()
            vmname = vminfo['name']
            self.vmstatusdict[vmname] = vmstatus
        return self.vmstatusdict

    def get_inuse_vmstatus(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmstatus = vm.get_status()
            vmname = vminfo['name']
            in_use_vm = self.p.match(vmname)
            if in_use_vm is not None:
                self.inUse_vmstatusdict[vmname] = vmstatus
        return self.inUse_vmstatusdict

    def get_vmnamelist(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmname = vminfo['name']
            vmfullnameinfo = vminfo['guest_full_name']
            self.vmfullnamelist[vmname] = vmfullnameinfo
        return self.vmfullnamelist

    def get_inuse_vmnamelist(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmname = vminfo['name']
            vmfullnameinfo = vminfo['guest_full_name']
            in_use_vm = self.p.match(vmname)
            if in_use_vm is not None:
                self.inUse_vmfullnamelist[vmname] = vmfullnameinfo
        return self.inUse_vmfullnamelist

    def get_inuse_vmdict(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmname = vminfo['name']
            vmpath = vminfo['path']
            in_use_vm = self.p.match(vmname)
            if in_use_vm is not None:
                self.vmdict[vmname] = vmpath
        return self.vmdict

    def power_off_all(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            if not vm.is_powered_off():
                logging.debug('%s is powered on, now doing power off' % vmPath)
                vm.power_off()

    def power_on_all(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            if not vm.is_powered_on():
                logging.debug('%s is powered off, now doing power on' % vmPath)
                vm.power_on()

    def power_on_in_use(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmname = vminfo['name']
            vmpath = vminfo['path']
            in_use_vm = self.p.match(vmname)
            if in_use_vm is not None and not vm.is_powered_on():
                logging.debug('%s is powered off, now doing power on' % vmname)
                vm.power_on()

    def power_off_in_use(self):
        for vmPath in self.get_vmlist():
            vm = self.vi_server.get_vm_by_path(vmPath)
            vminfo = vm.get_properties(from_cache=False)
            vmname = vminfo['name']
            vmpath = vminfo['path']
            in_use_vm = self.p.match(vmname)
            if in_use_vm is not None and not vm.is_powered_off():
                logging.debug('%s is powered on, now doing power off' % vmname)
                vm.power_off()
Ejemplo n.º 35
0
class Stack(SimpleStack):

    state_translation = {"POWERED ON": "STARTED", "POWERED OFF": "STOPPED", "SUSPENDED": "PAUSED"}

    def __init__(self, poolinfo):
        self.connection = False
        self.poolinfo = poolinfo
        self.format_for = Formatter()
        self.connect()

    def libvirt_connect(self):
        self.libvirt_connection = libvirt.open(
            "esx://%s@%s/" % (self.poolinfo.get("username"), self.poolinfo.get("api_server"))
        )

    def connect(self):
        self.connection = VIServer()
        self.connection.connect(
            self.poolinfo.get("api_server"), self.poolinfo.get("username"), self.poolinfo.get("password")
        )
        return

    def pool_info(self):
        return self.format_for.pool(0, 0, self.poolinfo.get("api_server"))

    def guest_list(self):
        return [
            {"id": self.connection.get_vm_by_path(path).properties.name}
            for path in self.connection.get_registered_vms(cluster=self.poolinfo.get("cluster"))
        ]

    def guest_info(self, guest_id):
        vm = self._vm_ref(guest_id)
        return self._vm_info(vm)

    def guest_shutdown(self, guest_id, force=False):
        vm = self._vm_ref(guest_id)
        if force:
            return vm.power_off()
        else:
            return vm.shutdown_guest()

    def guest_start(self, guest_id):
        vm = self._vm_ref(guest_id)
        return vm.power_on()

    def guest_reboot(self, guest_id, force=False):
        vm = self._vm_ref(guest_id)
        if force:
            return vm.reset()
        else:
            return vm.reboot_guest()

    def guest_suspend(self, guest_id):
        vm = self._vm_ref(guest_id)
        return vm.suspend()

    def guest_resume(self, guest_id):
        return self.guest_start(guest_id)

    def guest_update(self, guest_id, guestdata):
        vm = self._vm_ref(guest_id)
        vmware.update_vm(self.connection, vm, guestdata)
        return self._vm_info(self._vm_ref(guest_id))

    def guest_delete(self, guest_id):
        vm = self._vm_ref(guest_id)
        vmware.delete_vm(self.connection, vm)

    def media_mount(self, guest_id, media_data):
        vm = self._vm_ref(guest_id)
        vmware.update_vm(self.connection, vm, {"iso": media_data})

    def media_info(self, guest_id):
        vm = self._vm_ref(guest_id)
        media = vmware.get_cd(vm)
        if media.connectable.connected:
            return {"name": media.backing.fileName}
        else:
            return {"name": None}

    def network_interface_list(self, guest_id):
        vm = self._vm_ref(guest_id)
        vifs = vmware.get_network_interfaces(vm)
        return [self._network_interface_info(n) for n in vifs]

    def network_interface_info(self, guest_id, network_interface_id):
        vm = self._vm_ref(guest_id)
        vifs = vmware.get_network_interfaces(vm)

        for vif in vifs:
            if vif.macAddress == network_interface_id:
                return self._network_interface_info(vif)

        entity_info = "%s - on Guest %s" % (network_interface_id, guest_id)
        raise EntityNotFound("NetworkInterface", entity_info)

    def snapshot_list(self, guest_id):
        vm = self._vm_ref(guest_id)
        snaps = [self._snapshot_info(s) for s in vm.get_snapshots()]
        return snaps

    def snapshot_create(self, guest_id, snapshot_name=None):
        if not snapshot_name:
            snapshot_name = str(datetime.datetime.now())
        vm = self._vm_ref(guest_id)
        snap = vmware.create_snapshot(self.connection, vm, snapshot_name)
        return self._snapshot_info(snap)

    def snapshot_info(self, guest_id, snapshot_id):
        vm = self._vm_ref(guest_id)
        snap = vmware.get_snapshot(vm, snapshot_id)
        if snap:
            return self._snapshot_info(snap)
        else:
            raise EntityNotFound("Snapshot", snapshot_id)

    def snapshot_revert(self, guest_id, snapshot_id):
        vm = self._vm_ref(guest_id)
        snap = vmware.get_snapshot(vm, snapshot_id)
        vmware.revert_to_snapshot(self.connection, vm, snap)

    def snapshot_delete(self, guest_id, snapshot_id):
        vm = self._vm_ref(guest_id)
        snap = vmware.get_snapshot(vm, snapshot_id)
        vmware.delete_snapshot(self.connection, vm, snap)

    def tag_list(self, guest_id):
        vm = self._vm_ref(guest_id)
        return vmware.get_tags(vm)

    def tag_create(self, guest_id, tag_name):
        vm = self._vm_ref(guest_id)
        tags = vmware.create_tag(tag_name, vm)
        vmware.update_vm(self.connection, vm, {"tags": tags})
        return tags

    def tag_delete(self, guest_id, tag_name):
        vm = self._vm_ref(guest_id)
        tags = vmware.delete_tag(tag_name, vm)
        vmware.update_vm(self.connection, vm, {"tags": tags})
        return tags

    def _vm_ref(self, vm_id):
        regex = r"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
        if re.match(regex, vm_id, re.I):
            return vmware.get_vm_by_uuid(self.connection, vm_id)
        else:
            return self.connection.get_vm_by_name(vm_id)

    def _vm_info(self, vm):
        vm_info = vm.get_properties()
        return self.format_for.guest(
            vm.properties.config.uuid,
            vm_info.get("name"),
            vm_info.get("num_cpu"),
            vm_info.get("memory_mb"),
            vmware.get_disk_size(vm) / (1024 * 1024),
            vmware.get_vmi_driver(vm) is not None,
            vm.properties.guest.toolsStatus == "toolsOk",
            None,
            self.state_translation[vm.get_status()],
            None,
        )

    def _network_interface_info(self, vif):
        return self.format_for.network_interface(
            vif.macAddress, vif.unitNumber, vif.macAddress, "", "", "", vif.backing.network.name
        )

    def _snapshot_info(self, snapshot):
        return self.format_for.snapshot(
            snapshot.get_description(),
            snapshot.get_name(),
            snapshot.get_state(),
            snapshot.get_path(),
            snapshot.get_create_time(),
        )
Ejemplo n.º 36
0
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

from pysphere import VIServer

server = VIServer()
HOST = "172.17.11.74"
LOGIN = "******"
PASSWORD = "******"
server.connect(HOST, LOGIN, PASSWORD)

oc = []
oc.append(server._retrieve_properties_traversal(obj_type='VirtualMachine'))

power = []
machines = server.get_registered_vms()

for machine in server.get_registered_vms():
    power.append(server.get_vm_by_path(machine).get_status())

zindex = -1

for elem in oc:
    for b in elem:
        s = (b)
        zindex = zindex + 1
        print "vmrc://" + LOGIN + ":" + PASSWORD + "@" + HOST + ":443/?moid=" + s.Obj, machines[zindex], power[zindex]

server.disconnect()
Ejemplo n.º 37
0
class EsxiServer:
    server_ip = ''
    user_name = ''
    password = ''
    connect_flag = False
    server = None

    def opearte_guest_power(self, src_vm_name, operate):
        """"
       |##desc: 操作客户机电源(重启、关机、开机),这种模式不需要vmtools,就是强制操作电源,不走操作系统 ,可能损坏数据
       |##:param: >vm1.power_on()
                        >vm1.reset()
                        >vm1.suspend() #since pysphere 0.1.5
                        >vm1.power_off()
       |##:return: None
       |##@author: jhuang
       |##@time:12/12/2017
       """
        ovm = self.server.get_vm_by_name(src_vm_name)

        if operate == 'power_on':
            ovm.power_on()
            return True
        elif operate == 'reset':
            ovm.reset()
            return True
        elif operate == 'suspend':
            ovm.suspend()
            return True
        elif operate == 'power_off':
            ovm.power_off()
            return True
        else:
            print "Operate guest error: operate can noly be set as power_on, reset, suspend, power_off"
            return False

    def clone(self, src_vm_name, dest_vm_name, datacenter=None, sync_run=True, folder=None, resourcepool=None,
              datastore=None, host=None, power_on=True, template=False,
              snapshot=None, linked=False):
        """
        |##desc: 克隆虚拟机
        |##:param: None
        |##:return: None
        |##@author: jhuang
        |##@time:12/12/2017
        """
        # get_vm_by_name 在包含2个数据中心的情况下,需要指定参数  datacenter 其中的限定条件为datacenter
        # vm1 = server.get_vm_by_path("[DataStore1] Ubantu/Ubantu-10.vmx") 通过路径方法获取对象
        logger.debug(src_vm_name)
        logger.debug(datacenter)
        ovm = self.server.get_vm_by_name(src_vm_name, datacenter)
        new_vm = ovm.clone(dest_vm_name)

    def create_snapshot(self, src_vm_name, snapShotName):
        """
        |##desc: 创建快照
        |##:param: None
        |##:return: None
        |##@author: jhuang
        |##@time:12/12/2017
        """
        ovm = self.server.get_vm_by_name(src_vm_name)
        ovm.create_snapshot(snapShotName)

    def set_ssl_no_verify(self):
        ssl._create_default_https_context = ssl._create_unverified_context

    # Use the given args to connect the esxi server you want
    # @ip[string]: ESXi server's IP address
    # @name[string]: the username used to login the ESXi server
    # @pwd[string]: the password used to login the ESXi server
    def connect_server(self, ip, name, pwd, ssl_no_verify=True):
        logger.debug(ip)
        logger.debug(name)
        logger.debug(pwd)
        self.server_ip = ip
        self.user_name = name
        self.password = pwd
        self.server = VIServer()
        if ssl_no_verify:
            self.set_ssl_no_verify()
        self.server.connect(self.server_ip, self.user_name, self.password)
        self.connect_flag = self.server.is_connected()
        if self.connect_flag:
            return True
        return False

    # To get all the definition registered vms from the connected server
    # @param[string]: can be set as ALL, POWER_ON, POWER_OFF, SUSPENDED
    # According to the param, returns a list of VM Paths. You might also filter by datacenter,
    # cluster, or resource pool by providing their name or MORs.
    # if  cluster is set, datacenter is ignored, and if resource pool is set
    # both, datacenter and cluster are ignored.
    def get_registered_vms(self, param='ALL', status=None, datacenter=None, cluster=None,
                           resource_pool=None):
        """
        获取注册的主机 (虚拟机)

        :param param1: this is a first param
        :param param2: this is a second param
        :returns: this is a description of what is returned
        :raises keyError: raises an exception
        @author: jhuang
        @time:28/02/2018
        """
        if param not in ['ALL', 'POWER_ON', 'POWER_OFF', 'SUSPENDED']:
            print "Get VMs error: param can only be set as ALL, POWER_ON, POWER_OFF, or SUSPENDED."
            return None
        if self.connect_flag == False:
            print "Get VMs error: Server not connected."
            return None
        if param == 'ALL':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool)
        elif param == 'POWER_ON':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool, status='poweredOn')
        elif param == 'POWER_OFF':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool, status='poweredOff')
        elif param == 'SUSPENDED':
            return self.server.get_registered_vms(datacenter, cluster, resource_pool, status='suspended')
        else:
            return None

    # Disconnect to the Server
    def disconnect(self):
        if self.connect_flag is True:
            self.server = self.server.disconnect()
            self.connect_flag == False

    # To keep session alive
    def keep_session_alive(self):
        assert self.server.keep_session_alive()

    # To get the server type
    def get_server_type(self):
        return self.server.get_server_type()

    # To get performance manager
    def get_performance_manager(self):
        return self.server.get_performance_manager()

    # To get the all the server's hosts
    def get_all_hosts(self):
        """
        获取所有主机(这个是宿主机)
        Returns a dictionary of the existing hosts keys are their names
        and values their ManagedObjectReference object.
        """
        return self.server.get_hosts()

    # To get all datastores
    def get_all_datastores(self):
        """
        获取存储列表
        Returns a dictionary of the existing datastores. Keys are
        ManagedObjectReference and values datastore names.
        """
        return self.server.get_datastores()

    # To get all clusters
    def get_all_clusters(self):
        """
        获取所有集群列表
        Returns a dictionary of the existing clusters. Keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_clusters()

    # To get all datacenters
    def get_all_datacenters(self):
        """
        获取数据中心列表
        Returns a dictionary of the existing datacenters. keys are their
        ManagedObjectReference objects and values their names.
        """
        return self.server.get_datacenters()

    # To get all resource pools
    def get_all_resource_pools(self):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        """
        return self.server.get_resource_pools()

    # To get hosts by name
    def get_hosts_by_name(self, from_mor):
        """
        Returns a dictionary of the existing ResourcePools. keys are their
        ManagedObjectReference objects and values their full path names.
        @from_mor: if given, retrieves the hosts contained within the specified
            managed entity.
        """
        try:
            hosts_dic = self.server.get_hosts(from_mor)
        except:
            print "Get hosts error!"
            return None
        return hosts_dic
    # Getting clusters
    logger.debug('Getting clusters')
    clusters = con.get_clusters().values()

    # Getting Hosts
    logger.debug('Getting Hosts')
    hosts = con.get_hosts().values()

    # Getting Datastores 
    logger.debug('Getting Datastores')
    datastores = con.get_datastores().values()

    # Getting Registered VMs
    logger.debug('Getting VMs')
    vms = con.get_registered_vms()
    
    # Disconnecting from server
    con.disconnect()
except VIException as ins:
	logger.error(ins)
	logger.debug('An error ocurred getting vSphere data.')
        con.disconnect()
	sys.exit()

# printing main report    
print_main(datacenters, clusters, hosts, datastores, vms)

# printing DC report
if dc_i:
    logger.debug('Printing datacentres')
Ejemplo n.º 39
0
Archivo: report.py Proyecto: Pryz/misc
class Report:
    """Class report. Generate a dictionnary with the VMs and these properties"""

    def __init__(self, config):
        self.login = config['user']
        self.password = config['password']
        self.vcenter = config['vcenter']
        self.server = VIServer()

    def connect(self):
        """Connect to the hypervisor"""
        self.server.connect(self.vcenter, self.login, self.password)

    def disconnect(self):
        """Close the connection with the hypervisor"""
        if self.server:
            self.server.disconnect()

    def generate_report(self):
        """Generate the report of the actual connection"""
        report = []
        # Create the report
        vms_list = self.server.get_registered_vms()
        for vm_path in vms_list:
            virtual_machine = self.server.get_vm_by_path(vm_path)
            if str(virtual_machine.__class__) != "pysphere.vi_virtual_machine.VIVirtualMachine":
                continue
            if re.match(r'rhel', virtual_machine.get_property('guest_id')):
                vm_infos = { 
                    'name': virtual_machine.get_property('name'), 
                    'ip': virtual_machine.get_property('ip_address'),
                    'os': virtual_machine.get_property('guest_id')
                }
            try:
                status = virtual_machine.get_status()
            except Exception, e:
                print "Couldn't do it: %s" % e
                vm_infos['powered'] = 'none'
                report.append(vm_infos)
                continue
            if status == "POWERED ON":
                vm_infos['powered'] = 'on'
                # Get version in ssh 
                ssh = subprocess.Popen([
                  "ssh", 
                  "-i ~/.ssh/id_rsa", 
                  "%s" % vm_infos['name'],
                  "cat /etc/redhat-release"],
                  shell=False,  stdout=subprocess.PIPE, stderr=subprocess.PIPE
                )
                release = ssh.stdout.readlines()
                if release == []:
                    error = ssh.stderr.readlines()
                    vm_infos['release'] = "error: " + error
                else:
                    regex = re.compile("release (\d.*).+\(\D*(\d*)\)")
                    r = regex.search(release[0])
                    release = r.groups()
                    if release[1].strip():
                        vm_infos['release'] = release[0] + "." + release[1]
                    else:
                        vm_infos['release'] = release[0]
            else:
                vm_infos['powered'] = 'off'
        report.append(vm_infos)

        return report
Ejemplo n.º 40
0
class VMWareSystem(MgmtSystemAPIBase):
    """Client to Vsphere API

    This class piggy backs off pysphere.

    Benefits of pysphere:
      - Don't need intimate knowledge w/ vsphere api itself.
    Detriments of pysphere:
      - Response often are not detailed enough.

    """
    def __init__(self, hostname, username, password, **kwargs):
        self.api = VIServer()
        self.api.connect(hostname, username, password)

    def _get_vm(self, vm_name=None):
        if vm_name is None:
            raise Exception('Could not find a VM named %s.' % vm_name)
        else:
            try:
                vm = self.api.get_vm_by_name(vm_name)
                return vm
            except VIException as ex:
                raise Exception(ex)

    def _get_resource_pool(self, resource_pool_name=None):
        rps = self.api.get_resource_pools()
        for mor, path in rps.iteritems():
            if re.match('.*%s' % resource_pool_name, path):
                return mor
        # Just pick the first
        return rps.keys()[0]

    def _find_ip(self, vm):
        maxwait = 600
        net_info = None
        waitcount = 0
        while net_info is None:
            if waitcount > maxwait:
                break
            net_info = vm.get_property('net', False)
            waitcount += 5
            time.sleep(5)
        if net_info:
            ipv4_re = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
            for ip in net_info[0]['ip_addresses']:
                if re.match(ipv4_re, ip) and ip != '127.0.0.1':
                    return ip
        return None

    def start_vm(self, vm_name):
        vm = self._get_vm(vm_name)
        if vm.is_powered_on():
            return True
        else:
            vm.power_on()
            ack = vm.get_status()
            if ack == 'POWERED ON':
                return True
        return False

    def stop_vm(self, vm_name):
        vm = self._get_vm(vm_name)
        if vm.is_powered_off():
            return True
        else:
            vm.power_off()
            ack = vm.get_status()
            if ack == 'POWERED OFF':
                return True
        return False

    def delete_vm(self, vm_name):
        vm = self._get_vm(vm_name)

        if vm.is_powered_on():
            self.stop_vm(vm_name)

        # When pysphere moves up to 0.1.8, we can just do:
        # vm.destroy()
        request = VI.Destroy_TaskRequestMsg()
        _this = request.new__this(vm._mor)
        _this.set_attribute_type(vm._mor.get_attribute_type())
        request.set_element__this(_this)
        rtn = self.api._proxy.Destroy_Task(request)._returnval

        task = VITask(rtn, self.api)
        status = task.wait_for_state([task.STATE_SUCCESS, task.STATE_ERROR])
        if status == task.STATE_SUCCESS:
            return True
        else:
            return False

    def create_vm(self, vm_name):
        raise NotImplementedError(
            'This function has not yet been implemented.')

    def restart_vm(self, vm_name):
        if not self.stop_vm(vm_name):
            return False
        else:
            return self.start_vm(vm_name)

    def list_vm(self, **kwargs):
        vm_list = self.api.get_registered_vms(**kwargs)

        # The vms come back in an unhelpful format, so run them through a regex
        # Example vm name: '[datastore] vmname/vmname.vmx'
        def vm_name_generator():
            for vm in vm_list:
                match = re.match(r'\[.*\] (.*)/\1\..*', vm)
                if match:
                    yield match.group(1)

        # Unroll the VM name generator, and sort it to be more user-friendly
        return sorted(list(vm_name_generator()))

    def info(self):
        return '%s %s' % (self.api.get_server_type(),
                          self.api.get_api_version())

    def disconnect(self):
        self.api.disconnect()

    def vm_status(self, vm_name):
        state = self._get_vm(vm_name).get_status()
        print "vm " + vm_name + " status is " + state
        return state

    def is_vm_running(self, vm_name):
        state = self.vm_status(vm_name)
        return "POWERED ON" == state

    def is_vm_stopped(self, vm_name):
        state = self.vm_status(vm_name)
        return "POWERED OFF" == state

    def is_vm_suspended(self, vm_name):
        state = self.vm_status(vm_name)
        return "SUSPENDED" == state

    def suspend_vm(self, vm_name):
        vm = self._get_vm(vm_name)
        if vm.is_powered_off():
            raise Exception('Could not suspend %s because it\'s not running.' %
                            vm_name)
        else:
            vm.suspend()
            return self.is_vm_suspended(vm_name)

    def clone_vm(self, source_name, vm_name, resourcepool=None):
        vm = self._get_vm(source_name)
        if vm:
            clone = vm.clone(
                vm_name,
                sync_run=True,
                resourcepool=self._get_resource_pool(resourcepool))
            return self._find_ip(clone)
        else:
            raise Exception('Could not clone %s' % source_name)
Ejemplo n.º 41
0
www_ip = '192.168.0.103'
www_user = '******'
www_pass = '******'

def printlog(text):
  fileToBeWriten = "/home/dimi/prog/exsi/exsi_reboot.txt"
  fichierWrite = open(fileToBeWriten,'a')
  fichierWrite.write(text)
  fichierWrite.write('\n')
  fichierWrite.close()

server = VIServer()
server.connect(exsi_ip, exsi_user, exsi_pass)

vms = server.get_registered_vms()

vm = server.get_vm_by_path(vms[0])

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
  ssh.connect(www_ip, username=www_user, password=www_pass)
except:
  printlog(time.asctime())
  printlog('----------------------------')
  printlog('ssh down, trying to reboot www vm')
  vm.power_off()
  vm.power_on()
  printlog(vm.get_property('name',from_cache=False))
  printlog(vm.get_status())
Ejemplo n.º 42
0
        guest.shutdown_guest()
    elif cmd == "reset":
        guest.reset(sync_run=False)
    elif cmd == "hard":
        guest.terminate_process()
    else:
        print "Unrecognized Command!"


if len(sys.argv) == 1:
    print """ 
    commandline : esxpy.py 'GuestName' 'option'
    The available options are: 'REBOOT', 'ON', 'OFF', 'SHUTDOWN', 'RESET',
    or 'HARD' (which terminates the process of a stuck VM).

    If no option is given the status of the Guest is returned.
    
    Currently available VM's are:
    """
    for i in server.get_registered_vms():
        print "\t" + i
    # print server.get_registered_vms()
    sys.exit(0)

guest = server.get_vm_by_path(sys.argv[1])

print "The guest's current state is: \n %s\n" % guest_status()

if sys.argv[2:]:
    guest_power(sys.argv[2].lower())
Ejemplo n.º 43
0
class Report:
    """Class report. Generate a dictionnary with the VMs and these properties"""
    def __init__(self, config):
        self.login = config['user']
        self.password = config['password']
        self.vcenter = config['vcenter']
        self.server = VIServer()

    def connect(self):
        """Connect to the hypervisor"""
        self.server.connect(self.vcenter, self.login, self.password)

    def disconnect(self):
        """Close the connection with the hypervisor"""
        if self.server:
            self.server.disconnect()

    def generate_report(self):
        """Generate the report of the actual connection"""
        report = []
        # Create the report
        vms_list = self.server.get_registered_vms()
        for vm_path in vms_list:
            virtual_machine = self.server.get_vm_by_path(vm_path)
            if str(virtual_machine.__class__
                   ) != "pysphere.vi_virtual_machine.VIVirtualMachine":
                continue
            if re.match(r'rhel', virtual_machine.get_property('guest_id')):
                vm_infos = {
                    'name': virtual_machine.get_property('name'),
                    'ip': virtual_machine.get_property('ip_address'),
                    'os': virtual_machine.get_property('guest_id')
                }
            try:
                status = virtual_machine.get_status()
            except Exception, e:
                print "Couldn't do it: %s" % e
                vm_infos['powered'] = 'none'
                report.append(vm_infos)
                continue
            if status == "POWERED ON":
                vm_infos['powered'] = 'on'
                # Get version in ssh
                ssh = subprocess.Popen([
                    "ssh", "-i ~/.ssh/id_rsa",
                    "%s" % vm_infos['name'], "cat /etc/redhat-release"
                ],
                                       shell=False,
                                       stdout=subprocess.PIPE,
                                       stderr=subprocess.PIPE)
                release = ssh.stdout.readlines()
                if release == []:
                    error = ssh.stderr.readlines()
                    vm_infos['release'] = "error: " + error
                else:
                    regex = re.compile("release (\d.*).+\(\D*(\d*)\)")
                    r = regex.search(release[0])
                    release = r.groups()
                    if release[1].strip():
                        vm_infos['release'] = release[0] + "." + release[1]
                    else:
                        vm_infos['release'] = release[0]
            else:
                vm_infos['powered'] = 'off'
        report.append(vm_infos)

        return report
Ejemplo n.º 44
0
def get_stats():
    stats = dict()

    v = VCENTERLIST.split()

    for vcenter in v:

        logger('verb', "get_stats calls vcenter %s user %s" % (vcenter, USERNAME))
        server = VIServer()

        try:
            # Untrusted vSphere certificate bypass
            # SSL: CERTIFICATE_VERIFY_FAILED
            default_context = ssl._create_default_https_context
            ssl._create_default_https_context = ssl._create_unverified_context
            server.connect(vcenter, USERNAME, PASSWORD)
        except Exception:
            logger('warn', "failed to connect to %s" % (vcenter))
            continue

        # get datastores
        for ds, dsname in server.get_datastores().items():

            DatastoreCapacity = 0
            DatastoreFreespace = 0
            DatastoreUsagePercent = 0

            try:
                logger('verb', "get_stats calls Datastore metrics query on vcenter: %s for datastore: %s" % (vcenter, dsname))

                props = server._retrieve_properties_traversal(property_names=['name', 'summary.capacity', 'summary.freeSpace'], from_node=ds, obj_type="Datastore")

                for prop_set in props:
                    # mor = prop_set.Obj #in case you need it
                        for prop in prop_set.PropSet:
                            if prop.Name == "summary.capacity":
                                DatastoreCapacity = (prop.Val / 1048576)
                            elif prop.Name == "summary.freeSpace":
                                DatastoreFreespace = (prop.Val / 1048576)
            except Exception:
                logger('warn', "failed to get Datastore metrics value on vcenter: %s for datastore: %s" % (vcenter, dsname))

            DatastoreUsagePercent = (((DatastoreCapacity - DatastoreFreespace) * 100) / DatastoreCapacity) if DatastoreCapacity > 0 else 0

            metricnameZoneDatastoreCapacity = METRIC_DELIM.join([vcenter.lower(), "datastores",  dsname.lower(), 'datastorecapacity'])
            metricnameZoneDatastoreFreespace = METRIC_DELIM.join([vcenter.lower(), "datastores", dsname.lower(), 'datastorefreespace'])
            metricnameZoneDatastoreUsagePercent = METRIC_DELIM.join([vcenter.lower(), "datastores", dsname.lower(), 'datastoreusagepercent'])

            try:
                stats[metricnameZoneDatastoreCapacity] = DatastoreCapacity
                stats[metricnameZoneDatastoreFreespace] = DatastoreFreespace
                stats[metricnameZoneDatastoreUsagePercent] = DatastoreUsagePercent
            except (TypeError, ValueError):
                pass

        ZoneDatacentersCount = 0
        ZoneClustersCount = 0
        ZoneHostsCount = 0
        ZoneRunningVMS = 0
        ZoneStoppedVMS = 0
        ZoneTotalVMS = 0
        ZoneMemoryUsage = 0
        ZoneCpuUsage = 0
        ZoneTotalMemory = 0
        ZoneCpuTotal = 0

        logger('verb', "get_stats calls get_datacenters query on vcenter: %s" % (vcenter))
        datacenters = server.get_datacenters()
        logger('verb', "get_stats completed get_datacenters query on vcenter: %s" % (vcenter))
        ZoneDatacentersCount = len(datacenters)

        for d, dname in server.get_datacenters().items():

            if "." in dname:
                dname = dname.split(".")[0]

            DatacenterRunningVMS = 0
            DatacenterStoppedVMS = 0
            DatacenterTotalVMS = 0
            DatacenterClustersCount = 0
            DatacenterHostsCount = 0
            DatacenterMemoryUsage = 0
            DatacenterCpuUsage = 0
            DatacenterTotalMemory = 0
            DatacenterCpuTotal = 0

            logger('verb', "get_stats calls get_clusters query on vcenter: %s for datacenter: %s" % (vcenter, dname))
            clusters = server.get_clusters(d)
            logger('verb', "get_stats completed get_clusters query on vcenter: %s for datacenter: %s" % (vcenter, dname))
            DatacenterClustersCount = len(clusters)
            ZoneClustersCount = ZoneClustersCount + DatacenterClustersCount

            for c, cname in server.get_clusters(d).items():

                if "." in cname:
                    cname = cname.split(".")[0]

                ClusterMemoryUsage = 0
                ClusterCpuUsage = 0
                ClusterTotalMemory = 0
                ClusterCpuTotal = 0
                ClusterRunningVMS = 0
                ClusterStoppedVMS = 0
                ClusterTotalVMS = 0

                logger('verb', "get_stats calls get_hosts query on vcenter: %s for cluster: %s" % (vcenter, cname))
                hosts = server.get_hosts(c)
                logger('verb', "get_stats completed get_hosts query on vcenter: %s for cluster: %s" % (vcenter, cname))
                ClusterHostsCount = len(hosts)
                DatacenterHostsCount = DatacenterHostsCount + ClusterHostsCount
                ZoneHostsCount = ZoneHostsCount + DatacenterHostsCount

                for h, hname in server.get_hosts(c).items():

                    HostMemoryUsage = 0
                    HostCpuUsage = 0
                    HostTotalMemory = 0
                    HostNumCpuCores = 0
                    HostMhzPerCore = 0
                    HostStatus = ''

                    if "." in hname:
                        hname = hname.split(".")[0]

                    try:
                        logger('verb', "get_stats calls Host CPU and Memory metrics query on vcenter: %s for host: %s" % (vcenter, hname))

                        props = server._retrieve_properties_traversal(property_names=['name', 'summary.overallStatus', 'summary.quickStats.overallMemoryUsage', 'summary.quickStats.overallCpuUsage', 'summary.hardware.memorySize', 'summary.hardware.numCpuCores', 'summary.hardware.cpuMhz'], from_node=h, obj_type="HostSystem")

                        for prop_set in props:
                            # mor = prop_set.Obj #in case you need it
                            for prop in prop_set.PropSet:
                                if prop.Name == "summary.quickStats.overallMemoryUsage":
                                    HostMemoryUsage = prop.Val
                                elif prop.Name == "summary.quickStats.overallCpuUsage":
                                    HostCpuUsage = prop.Val
                                elif prop.Name == "summary.hardware.memorySize":
                                    HostTotalMemory = (prop.Val / 1048576)
                                elif prop.Name == "summary.hardware.numCpuCores":
                                    HostNumCpuCores = prop.Val
                                elif prop.Name == "summary.hardware.cpuMhz":
                                    HostMhzPerCore = prop.Val
                                elif prop.Name == "summary.overallStatus":
                                    HostStatus = prop.Val
                                    if HostStatus == "green":
                                        HostStatus = 0
                                    elif HostStatus == "gray":
                                        HostStatus = 1
                                    elif HostStatus == "yellow":
                                        HostStatus = 2
                                    elif HostStatus == "red":
                                        HostStatus = 3
                    except Exception:
                        logger('warn', "failed to get Host CPU and Memory metrics value on vcenter: %s for host: %s" % (vcenter, hname))

                    try:
                        logger('verb', "get_stats calls HostRunningVMS query on vcenter: %s for host: %s" % (vcenter, hname))
                        HostRunningVMS = len(server.get_registered_vms(h, status='poweredOn'))
                    except Exception:
                        logger('warn', "failed to get nb of running VMS value on %s" % (hname))
                    try:
                        logger('verb', "get_stats calls HostStoppedVMS query on vcenter: %s for host: %s" % (vcenter, hname))
                        HostStoppedVMS = len(server.get_registered_vms(h, status='poweredOff'))
                    except Exception:
                        logger('warn', "failed to get nb of stopped VMS value on %s" % (hname))
                    try:
                        logger('verb', "get_stats calls HostTotalVMS query on vcenter: %s for host: %s" % (vcenter, hname))
                        HostTotalVMS = len(server.get_registered_vms(h))
                    except Exception:
                        logger('warn', "failed to get all VMS count on %s" % (hname))

                    HostCpuTotal = (HostNumCpuCores * HostMhzPerCore)
                    HostMemoryUsagePercent = ((HostMemoryUsage * 100) / HostTotalMemory)
                    HostCpuUsagePercent = ((HostCpuUsage * 100) / HostCpuTotal)

                    metricnameHostStatus = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hoststatus'])
                    metricnameHostMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostmemoryusagepercent'])
                    metricnameHostCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostcpuusagepercent'])
                    metricnameHostMemoryUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostmemoryusage'])
                    metricnameHostCpuUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostcpuusage'])
                    metricnameHostTotalMemory = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hosttotalmemory'])
                    metricnameHostCpuTotal = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostcputotal'])
                    metricnameHostRunningVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hostrunningvms'])
                    metricnameHostStoppedVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hoststoppedvms'])
                    metricnameHostTotalVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), hname.lower(), 'hosttotalvms'])

                    ClusterMemoryUsage = ClusterMemoryUsage + HostMemoryUsage
                    ClusterCpuUsage = ClusterCpuUsage + HostCpuUsage
                    ClusterTotalMemory = ClusterTotalMemory + HostTotalMemory
                    ClusterCpuTotal = ClusterCpuTotal + HostCpuTotal
                    ClusterRunningVMS = ClusterRunningVMS + HostRunningVMS
                    ClusterStoppedVMS = ClusterStoppedVMS + HostStoppedVMS
                    ClusterTotalVMS = ClusterTotalVMS + HostTotalVMS
                    ClusterMemoryUsagePercent = ((ClusterMemoryUsage * 100) / ClusterTotalMemory)
                    ClusterCpuUsagePercent = ((ClusterCpuUsage * 100) / ClusterCpuTotal)

                    try:
                        stats[metricnameHostStatus] = HostStatus
                        stats[metricnameHostMemoryUsage] = HostMemoryUsage
                        stats[metricnameHostCpuUsage] = HostCpuUsage
                        stats[metricnameHostTotalMemory] = HostTotalMemory
                        stats[metricnameHostCpuUsagePercent] = HostCpuUsagePercent
                        stats[metricnameHostMemoryUsagePercent] = HostMemoryUsagePercent
                        stats[metricnameHostCpuTotal] = HostCpuTotal
                        stats[metricnameHostRunningVMS] = HostRunningVMS
                        stats[metricnameHostStoppedVMS] = HostStoppedVMS
                        stats[metricnameHostTotalVMS] = HostTotalVMS
                    except (TypeError, ValueError):
                        pass

                DatacenterRunningVMS = DatacenterRunningVMS + ClusterRunningVMS
                DatacenterStoppedVMS = DatacenterStoppedVMS + ClusterStoppedVMS
                DatacenterTotalVMS = DatacenterTotalVMS + ClusterTotalVMS
                DatacenterMemoryUsage = DatacenterMemoryUsage + ClusterMemoryUsage
                DatacenterCpuUsage = DatacenterCpuUsage + ClusterCpuUsage
                DatacenterTotalMemory = DatacenterTotalMemory + ClusterTotalMemory
                DatacenterCpuTotal = DatacenterCpuTotal + ClusterCpuTotal
                DatacenterMemoryUsagePercent = ((DatacenterMemoryUsage * 100) / DatacenterTotalMemory)
                DatacenterCpuUsagePercent = ((DatacenterCpuUsage * 100) / DatacenterCpuTotal)

                metricnameClusterRunningVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clusterrunningvms'])
                metricnameClusterStoppedVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clusterstoppedvms'])
                metricnameClusterTotalVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustertotalvms'])
                metricnameClusterMemoryUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustermemoryusage'])
                metricnameClusterCpuUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustercpuusage'])
                metricnameClusterTotalMemory = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustertotalmemory'])
                metricnameClusterCpuTotal = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustercputotal'])
                metricnameClusterMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustermemoryusagepercent'])
                metricnameClusterCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), cname.lower(), 'clustercpuusagepercent'])
                try:
                    stats[metricnameClusterRunningVMS] = ClusterRunningVMS
                    stats[metricnameClusterStoppedVMS] = ClusterStoppedVMS
                    stats[metricnameClusterTotalVMS] = ClusterTotalVMS
                    stats[metricnameClusterMemoryUsage] = ClusterMemoryUsage
                    stats[metricnameClusterCpuUsage] = ClusterCpuUsage
                    stats[metricnameClusterMemoryUsagePercent] = ClusterMemoryUsagePercent
                    stats[metricnameClusterCpuUsagePercent] = ClusterCpuUsagePercent
                    stats[metricnameClusterTotalMemory] = ClusterTotalMemory
                    stats[metricnameClusterCpuTotal] = ClusterCpuTotal
                except (TypeError, ValueError):
                    pass

            # post datacenter metrics count here

            ZoneRunningVMS = ZoneRunningVMS + DatacenterRunningVMS
            ZoneStoppedVMS = ZoneStoppedVMS + DatacenterStoppedVMS
            ZoneTotalVMS = ZoneTotalVMS + DatacenterTotalVMS
            ZoneMemoryUsage = ZoneMemoryUsage + DatacenterMemoryUsage
            ZoneCpuUsage = ZoneCpuUsage + DatacenterCpuUsage
            ZoneTotalMemory = ZoneTotalMemory + DatacenterTotalMemory
            ZoneCpuTotal = ZoneCpuTotal + DatacenterCpuTotal
            ZoneMemoryUsagePercent = ((ZoneMemoryUsage * 100) / ZoneTotalMemory)
            ZoneCpuUsagePercent = ((ZoneCpuUsage * 100) / ZoneCpuTotal)

            metricnameDatacenterRunningVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacenterrunningvms'])
            metricnameDatacenterStoppedVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacenterstoppedvms'])
            metricnameDatacenterTotalVMS = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentertotalvms'])
            metricnameDatacenterMemoryUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentermemoryusage'])
            metricnameDatacenterCpuUsage = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentercpuusage'])
            metricnameDatacenterMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentermemoryusagepercent'])
            metricnameDatacenterCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentercpuusagepercent'])
            metricnameDatacenterTotalMemory = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentertotalmemory'])
            metricnameDatacenterCpuTotal = METRIC_DELIM.join([vcenter.lower(), dname.lower(), 'datacentercputotal'])

            try:
                stats[metricnameDatacenterRunningVMS] = DatacenterRunningVMS
                stats[metricnameDatacenterStoppedVMS] = DatacenterStoppedVMS
                stats[metricnameDatacenterTotalVMS] = DatacenterTotalVMS
                stats[metricnameDatacenterMemoryUsage] = DatacenterMemoryUsage
                stats[metricnameDatacenterCpuUsage] = DatacenterCpuUsage
                stats[metricnameDatacenterMemoryUsagePercent] = DatacenterMemoryUsagePercent
                stats[metricnameDatacenterCpuUsagePercent] = DatacenterCpuUsagePercent
                stats[metricnameDatacenterTotalMemory] = DatacenterTotalMemory
                stats[metricnameDatacenterCpuTotal] = DatacenterCpuTotal
            except (TypeError, ValueError):
                pass

        # post zone metrics count here
        metricnameZoneRunningVMS = METRIC_DELIM.join([vcenter.lower(), 'zonerunningvms'])
        metricnameZoneStoppedVMS = METRIC_DELIM.join([vcenter.lower(), 'zonestoppedvms'])
        metricnameZoneTotalVMS = METRIC_DELIM.join([vcenter.lower(), 'zonetotalvms'])
        metricnameZoneMemoryUsage = METRIC_DELIM.join([vcenter.lower(), 'zonememoryusage'])
        metricnameZoneCpuUsage = METRIC_DELIM.join([vcenter.lower(), 'zonecpuusage'])
        metricnameZoneMemoryUsagePercent = METRIC_DELIM.join([vcenter.lower(), 'zonememoryusagepercent'])
        metricnameZoneCpuUsagePercent = METRIC_DELIM.join([vcenter.lower(), 'zonecpuusagepercent'])
        metricnameZoneTotalMemory = METRIC_DELIM.join([vcenter.lower(), 'zonetotalmemory'])
        metricnameZoneCpuTotal = METRIC_DELIM.join([vcenter.lower(), 'zonecputotal'])

        try:
            stats[metricnameZoneRunningVMS] = ZoneRunningVMS
            stats[metricnameZoneStoppedVMS] = ZoneStoppedVMS
            stats[metricnameZoneTotalVMS] = ZoneTotalVMS
            stats[metricnameZoneMemoryUsage] = ZoneMemoryUsage
            stats[metricnameZoneCpuUsage] = ZoneCpuUsage
            stats[metricnameZoneMemoryUsagePercent] = ZoneMemoryUsagePercent
            stats[metricnameZoneCpuUsagePercent] = ZoneCpuUsagePercent
            stats[metricnameZoneTotalMemory] = ZoneTotalMemory
            stats[metricnameZoneCpuTotal] = ZoneCpuTotal
        except (TypeError, ValueError):
            pass

        metricnameZoneDatacentersCount = METRIC_DELIM.join([vcenter.lower(), 'zonedatacenterscount'])
        metricnameZoneClustersCount = METRIC_DELIM.join([vcenter.lower(), 'zoneclusterscount'])
        metricnameZoneHostsCount = METRIC_DELIM.join([vcenter.lower(), 'zonehostscount'])

        try:
            stats[metricnameZoneDatacentersCount] = ZoneDatacentersCount
            stats[metricnameZoneClustersCount] = ZoneClustersCount
            stats[metricnameZoneHostsCount] = ZoneHostsCount
        except (TypeError, ValueError):
            pass

        server.disconnect()
    return stats
Ejemplo n.º 45
0
from pysphere import VIServer

def connect_to_server(ip,user,pw):
	server=VIServer()
	server.connect(ip,user,pw)
	try:
		server.is_connected()
		


from pysphere import VIServer
server=VIServer()
server.connect(XXXXXXXX","root","********")
vms=server.get_registered_vms()
vms



def get all hostnames(System_name)
	for vm in vms:
		vms=server.get_registered_vms()
		if System_name in vm:
             vm1=server.get_vm_by_path(vm)
             print vm1.get_property('hostname')
			 
			 
 
mvas-omu-app1a
smsc-sfe4
smsc-sfe3
smsc-cdrpp2
Ejemplo n.º 46
0
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

from pysphere import VIServer

server = VIServer()
HOST = "172.17.11.74"
LOGIN = "******"
PASSWORD = "******"
server.connect(HOST, LOGIN, PASSWORD)

oc = []
oc.append(server._retrieve_properties_traversal(obj_type='VirtualMachine'))

power = []
machines = server.get_registered_vms()

for machine in server.get_registered_vms():
    power.append(server.get_vm_by_path(machine).get_status())

zindex = -1

for elem in oc:
    for b in elem:
        s = (b)
        zindex = zindex + 1
        print "vmrc://" + LOGIN + ":" + PASSWORD + "@" + HOST + ":443/?moid=" + s.Obj, machines[
            zindex], power[zindex]

server.disconnect()
verbose     = args.verbose
password    = args.password[0]

# Asking Users password for server
#password=getpass.getpass(prompt='Enter password for vCenter %s for user %s: ' % (server,username))

# Connecting to server
print_verbose('Connecting to server %s with username %s' % (server,username))
con = VIServer()
con.connect(server,username,password)
print_verbose('Connected to server %s' % server)
print_verbose('Server type: %s' % con.get_server_type())
print_verbose('API version: %s' % con.get_api_version())

if allvms:
    vms = con.get_registered_vms(None, None, None, 'poweredOn', None)
    for vmpath in vms:
        print_verbose('================================================================================')
        vm = con.get_vm_by_path(vmpath)
        vmname = vm.get_property('name')
        ip = find_ip(vm,ipv6)
        if ip:
            print '%s : %s' % (vmname,ip)
        else:
            print 'ERROR: IP for VM %s not found' % vmname
else:
    print_verbose('================================================================================')
    print_verbose('Trying to find IP for VM %s' % vmname)
    vm = find_vm(vmname)
    if vm:
        ip = find_ip(vm,ipv6)
Ejemplo n.º 48
0
def getVMdata(configFilePath, host, user, password, vmListFile):
  if (host is None and user is None and password is None):
    OPTION_CHAR = '='
    options = {}
    if os.path.exists(configFilePath):
      content = open(configFilePath)
      for line in content:
        if OPTION_CHAR in line:
          option, value = line.split(OPTION_CHAR, 1)
          option = option.strip()
          value = value.strip()

          if value.startswith('"') and value.endswith('"'):
            value = value[1:-1]
            options[option] = value

      HOST = options['HOST']
      USER = options['USER']
      PASSWORD = options['PASSWORD']
    else:
      print "Must supply valid ESX configuration file."
      sys.exit(1)
  else:
    HOST = host
    USER = user
    PASSWORD = password

  try:
    server = VIServer()
    server.connect(HOST, USER, PASSWORD)

    if vmListFile is None:
      vmlist = server.get_registered_vms()
    else:
      if os.path.exists(vmListFile):
        fileptr = open(vmListFile)
        content = fileptr.read()
        vmlist = content.split(",")

    metric = []

    vmMetrics = {'disk.write': 131079, 'disk.read': 131078, 'disk.usage': 131073, 'cpu.usage': 1, 'mem.usage': 65537}
    for vms in vmlist:
      vms = vms.strip()
      start = vms.find(']') + 2
      end = vms.find('/', start)
      vmName = vms[start:end]
      pm = server.get_performance_manager()
      vm = server.get_vm_by_path(vms)
      mor = vm._mor
      for key, value in vmMetrics.iteritems():
        entitystats = pm.get_entity_statistic(mor, key)
        for i in entitystats:
          dict_result = dict((name, getattr(i, name)) for name in dir(i))
          metric_name = vmName+'.'+dict_result['group']+'.'+dict_result['counter']
          group = dict_result['group']
          timeTuple = dict_result['time']
          ts = time.mktime(timeTuple.timetuple())
          maxValue = getMaxValue(group)
          if dict_result['unit'] == 'percent':
            mvalue = float(dict_result['value'])/100
          else:
            mvalue = dict_result['value']
          metric.append({"metric_name": metric_name, "value": mvalue, "unit":dict_result['unit'], "server":vmName, "maxValue":maxValue,"time_stamp":ts})

    return metric
  except Exception as e:
    print e
    sys.exit(1)