vmware 批量自动删除虚拟机脚本,可以设置白名单
admin
2023-07-30 11:20:08
0

最近因为要重搭容灾环境,之前部署了将近380台的虚拟机其中85%靠上需要回收掉,部分虚拟机需要保留(很烦哎.....),业务部门提供了需要保留的虚拟机的IP,然后保留的大概有60台左右吧(好烦呀),手动回收.....,这可不是俺的风格,来吧,脚本躁动起来吧(https://mianbao.cn.com/thread-358-1-1.html):

import os
import time
import pprint
from pysphere import VIProperty 
from pysphere.vi_task import VITask
from connect import vcenter_connection as con
from pysphere.resources import VimService_services as VI
from pysphere.vi_virtual_machine import VIVirtualMachine

s = con()

class VM_Del():
    
    def __init__(self,s):
        self.__s = s
        self.__vm = None
        self.__ip_path = os.path.join(os.path.dirname(__file__),'ip.txt')
    
    
    def GetVmInfo(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()
        
        for item in props:
            for p in item.PropSet:
                one_vm[dict_key.get(p.Name)] = p.Val
            vm[one_vm.get('name')] = {'ip':one_vm.get('ip'),'power':one_vm.get('power')}
        print vm
        return vm
    
    
    def GetIpWhiteList(self):
        ip_list = list()
        with open(self.__ip_path) as file:
            all_ip_white_list = file.readlines()
            [ip_list.append(x.strip()) for x in all_ip_white_list]
            return ip_list
    
    def PowerDownVm(self,vm):
        self.__vm = self.__s.get_vm_by_name(vm)
        self.__vm.power_off()
        
    def Done(self):
        white_list = self.GetIpWhiteList()
        all_vm = self.GetVmInfo()
        for x,y in all_vm.items():
            if y.get('ip',None) in white_list:
                pass
            elif 'WG_' in x:
                print x
                if y.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 '%s power status is %s' % (x, y.get('power'))
        print white_list
    
    
    def DelVm(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
        
        
        #Wait for the task to finish
        task = VITask(ret, s) 
        
        status = task.wait_for_state([task.STATE_SUCCESS, task.STATE_ERROR]) 
        if status == task.STATE_SUCCESS:
            print " |------>VM successfully deleted from disk" 
        elif status == task.STATE_ERROR: 
            print "Error removing vm:", task.get_error_message() 



            
if __name__ == "__main__":
    vm_del = VM_Del(s)
    vm_del.Done()

实验脚本,很粗糙,随后会优化,效果如下,脚本输出:
vmware 批量自动删除虚拟机脚本,可以设置白名单 
VC任务显示:
vmware 批量自动删除虚拟机脚本,可以设置白名单 

相关内容

热门资讯

等不及毕业了!年薪600万抢人 6月28日,毕业季尾声,清华大学计算机系NLP实验室(全称“自然语言处理与社会人文计算实验室”)公布...
洗衣机显示e3是什么意思 1、脱水时洗衣桶重力不平衡。如果洗衣机的衣服集中在一起,重量会侧向一边,滚筒在旋转的过程中,重量不平...
海尔热水器显示e3是什么意思 出现了海尔热水器e3错误,往往有三个原因导致一是风机的接口位置出现了接触不良的问题,二是交流风机的启...
燃气热水器显示e3是什么意思 燃气热水器的E3表示风机故障,这个故障都是人为操作不当导致的,风机故障一般来说就是端子脱落或者内部的...
奥克斯空调显示e3是什么意思 该代码提示空调的制冷剂用完了。可能是空调的制冷系统内冷冻油缺乏,而且空调的制冷部件之间距离太近,散热...
惠而浦空调出现e3是什么意思 原因可能是在空调的使用过程中漏氟或者是空调使用的时间太长氟消耗,可以检查空调的压力是否在正常范围内,...
乌克兰首都遭袭,传出多次强烈爆... 新华社基辅7月6日电(记者李东旭) 当地时间6日凌晨2时9分至16分,新华社记者在乌克兰首都基辅听到...
特朗普一通电话后,国际足联“破... 全世界都看得目瞪口呆。我估计,很多韩国人都会感到很惊诧,事情还能这样干?嗯,韩国人可能都不会干的事情...
法国一博物馆约20件珠宝被盗,... 据法新社和《太阳报》报道,当地时间7月5日,法国东部下莱茵省莱俪博物馆遭遇盗窃。消息人士称,窃贼进入...
美国典礼,伊朗葬礼,同一天两个... 7月4日,全球迎来极具反差感的一天。在西半球,美国高调举办建国250周年独立日庆典,特朗普发表演讲宣...