pySphere 管理 VCenter
来源:互联网 发布:旅游网络市场调查 编辑:程序博客网 时间:2024/06/07 07:13
VMWare 的核心VCenter提供了针对Python的开发接口-pySphere.由于Python能够在Windows/Linux平台良好运行,所以选择Python能够实现更多的平台适应性。上一篇讲过如何使用PowerShell管理VCenter,其实使用Python来管理的具体做法也是大同小异,尤其体现在函数调用上。
需要说明的是:
1.使用pySphere必须安装python环境(推荐2.7环境,3.4环境由于语法不同,在安装的时候会大量报错)
2.pySphere连接vcenter的方式是使用https形式的ssl连接,最好先安装vcenter的加密证书,否则会报错(certificate validation failed)
3.如果安装证书后还报错,那么在代码import之后,加一句:ssl._create_default_https_context = ssl._create_unverified_context 这句话的作用是设置ssl不验证
下面是我整合的一个针对VCenter管理的一个类,实现了大部分的功能,还在继续完善中,提供源代码出来,欢迎补充。
'''@Created on 2015-7-24@author: Justin'''import osimport os.pathimport timeimport socketimport sysimport stringimport sslimport base64from pysphere import VIServerfrom pysphere import VIException, VIApiException, FaultTypes#import esxi_exception#to resolve the ssl problem#import ssl ssl._create_default_https_context = ssl._create_unverified_context#Server Controlclass 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下面我写了一些测试
server = VCenterManagement()if(server.connect_server("135.251.34.48","administrator","asb#2345") == True): print "connected"else: print "connect fail"datacenters = server.get_all_datacenters()for k,v in datacenters.items(): print "key:" + k + ",value:" + str(v);clusters = server.get_all_clusters()for k,v in clusters.items(): print "key:" + k + ",value:" + str(v);v = server.get_vm_by_name("MyVM1")vms = server.get_registered_vms("ALL")#print vms.get_property("name")for vm in vms: print vm#server.power_off_vm("MyVM1")if(v.get_status() == "POWERED ON"): server.power_off_vm("MyVM1")else: server.power_on_vm("MyVM1")print v.get_property("name")print v.get_status()server.disconnect()print "server disconnected!"运行结果如下:
总结:Python脚本非常高效,开发效率也是非常高的,尤其在自动化方面,是非常好的帮手,熟悉python能够非常方便地开发一些服务器管理的功能。
0 0
- pySphere 管理 VCenter
- vcenter
- "Vcenter
- vCenter and Memory metrics (由VCenter管理的ESX的内存指标分析)
- View 5部署之四:vCenter插件简化存储管理
- View 5部署之四:vCenter插件简化存储管理
- 通过vCenter Server管理多台ESXi主机
- vCenter Server Appliance 环境部署及管理 ESXI主机
- VMware vSphere服务器虚拟化实验五 vCenter Server 网络管理
- VMware vSphere 5.1 学习系列之六:vCenter Server 主机管理
- 《转》VMware vSphere 5.1 学习系列之六:vCenter Server 主机管理
- VMware vSphere服务器虚拟化实验五 vCenter Server 网络管理
- 22. vCenter上解决”此主机当前没有管理网络冗余“的警告
- VMware Vsphere 6.0安装部署 (四) vCenter Server的配置与管理
- VMware Vsphere 6.0安装部署 (四) vCenter Server的配置与管理
- VCenter 5.0 安装
- 如何清除vCenter日志
- vCenter Server Linked Mode
- Makefile.am 文件介绍
- hdoj 3622 Bomb Game 【2-sat + 二分搜索】
- 单链表的基本操作
- 编译升级内核时需要安装的六个包
- wed service客户端在JDK1.7以上无法生成
- pySphere 管理 VCenter
- android : 使用注解初始化控件
- 动画
- PHP 实现多网站共享用户SESSION 数据解决方案
- windows服务
- POJ 3126:Prime Path
- 随笔-property follows cocoa naming convention for returning 'owned' objects
- Django Models的数据类型 汇总
- 欢迎使用CSDN-markdown编辑器