vmware 批量自动删除虚拟机脚本,可以设置白名单
最近因为要重搭容灾环境,之前部署了将近380台的虚拟机其中85%靠上需要回收掉,部分虚拟机需要保留(很烦哎.....),业务部门提供了需要保留的虚拟机的IP,然后保留的大概有60台左右吧(好烦呀),手动回收.....,这可不是俺的风格,来吧,脚本躁动起来吧(https://mianbao.cn.com/thread-358-1-1.html):
importosimporttimeimportpprintfrompysphereimportVIPropertyfrompysphere.vi_taskimportVITaskfromconnectimportvcenter_connectionasconfrompysphere.resourcesimportVimService_servicesasVIfrompysphere.vi_virtual_machineimportVIVirtualMachines=con()classVM_Del():def__init__(self,s):self.__s=sself.__vm=Noneself.__ip_path=os.path.join(os.path.dirname(__file__),'ip.txt')defGetVmInfo(self):prope=['guest.ipAddress','name','summary.runtime.powerState',]dict_key={'guest.ipAddress':'ip','name':'name','summary.runtime.powerState':'power'}props=s._retrieve_properties_traversal(property_names=prope,obj_type='VirtualMachine')vm={}one_vm=dict()foriteminprops:forpinitem.PropSet:one_vm[dict_key.get(p.Name)]=p.Valvm[one_vm.get('name')]={'ip':one_vm.get('ip'),'power':one_vm.get('power')}printvmreturnvmdefGetIpWhiteList(self):ip_list=list()withopen(self.__ip_path)asfile:all_ip_white_list=file.readlines()[ip_list.append(x.strip())forxinall_ip_white_list]returnip_listdefPowerDownVm(self,vm):self.__vm=self.__s.get_vm_by_name(vm)self.__vm.power_off()defDone(self):white_list=self.GetIpWhiteList()all_vm=self.GetVmInfo()forx,yinall_vm.items():ify.get('ip',None)inwhite_list:passelif'WG_'inx:printxify.get('power')=='poweredOn':self.PowerDownVm(x)print'|--->Poeroff.....OK'time.sleep(5)print'|---->del.....start'self.DelVm()print'|----->del.........OK'time.sleep(10)else:print'%spowerstatusis%s'%(x,y.get('power'))printwhite_listdefDelVm(self):request=VI.Destroy_TaskRequestMsg()_this=request.new__this(self.__vm._mor)_this.set_attribute_type(self.__vm._mor.get_attribute_type())request.set_element__this(_this)ret=s._proxy.Destroy_Task(request)._returnval#Waitforthetasktofinishtask=VITask(ret,s)status=task.wait_for_state([task.STATE_SUCCESS,task.STATE_ERROR])ifstatus==task.STATE_SUCCESS:print"|------>VMsuccessfullydeletedfromdisk"elifstatus==task.STATE_ERROR:print"Errorremovingvm:",task.get_error_message()if__name__=="__main__":vm_del=VM_Del(s)vm_del.Done()
实验脚本,很粗糙,随后会优化,效果如下,脚本输出:
VC任务显示:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。