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
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
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')))
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
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
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 = ""
#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()
# 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)
#!/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()
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()))
#!/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)
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"
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()
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
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()
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!")
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()
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()
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
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
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)
#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()
# 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)
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)
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)
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')
# 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')
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())
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
#!/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()
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)
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]
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
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()
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(), )
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()
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')
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
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)
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())
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())
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
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
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
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)
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)