Ejemplo n.º 1
0
def vmware_create(
    _WorkingDirectory,
    _DestinationDirectory,
    _StartUpFile=None,
    _NewVmx="default.vmx",
    _NewVmdk="default.vmdk",
    _CloneMachine=True,
):

    _Vmx, _Vmdk = find_files(_WorkingDirectory)

    _VirtualMachine = vm(_WorkingDirectory, _Vmx, _Vmdk, _StartUpFile, True, True)

    _Vmx = _NewVmx

    _Vmdk = _NewVmdk

    if _CloneMachine:

        _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, False, False)

    else:

        _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, True, True)

    _ClonedMachine.set_function(vmware_entry_point)

    # increasing machine count ** need to lock **

    _Lock.acquire()

    _MachineCount.value = _MachineCount.value + 1

    _Lock.release()  # synchronize finished

    if _CloneMachine:
        clone_vm(_VirtualMachine, _ClonedMachine)

    else:

        _ClonedMachine._m_disk_file = find_snapshot(_ClonedMachine)

        _CollectionNumber = get_number()

        _Command = (
            "mkdir " + '"' + "/home/jarret/Virtual Machines/collected/virtual_machine" + str(_CollectionNumber) + '"'
        )

        _ClonedMachine._m_collection = "/home/jarret/Virtual Machines/collected/virtual_machine" + str(
            _CollectionNumber
        )

        print _Command

        os.system(_Command)

        _ClonedMachine()  # if the machine is created then just run it

    return _ClonedMachine
Ejemplo n.º 2
0
    def task_modify(self, task_item):
        vm_name = task_item.data['vm_name']
        memory = task_item.data['mem']
        cpu_num = task_item.data['cpu']
        has_error = False
        new_xml = None
        
        avm = vm(vm_name)
        new_xml = avm.change_memory(int(memory)/1024)
        if new_xml is None:
            has_error = True
            logger.error("change_memory faild")
            
        new_xml = avm.change_cur_cpu_number(cpu_num)
        if new_xml is None:
            has_error = True
            logger.error("change_cur_cpu_number failed")
        ret = avm.extend_img(task_item)
        if ret == False:
            has_error = True
            logger.error("extend_img failed")

        logger.debug("new_xml = \n%s" % new_xml)
        if has_error:
            return {"status_code": -1, "msg":"error"}
        else:
            return avm.edit_conf(new_xml)

        pass
Ejemplo n.º 3
0
    def task_restore_snapshot(self, task_item):
        vm_name = task_item.data['vm_name']
        snapshot_name = task_item.data['snapshot_name']

        avm = vm(vm_name)
        result = avm.restore_snapshot(snapshot_name)
        return result
Ejemplo n.º 4
0
    def task_delete(self, task_item):
        vm_name = task_item.data['vm_name']
        delete_disk = task_item.data['delete_disk']

        avm = vm(vm_name)
        if delete_disk == 1:
            avm.delete_img()
        avm.destroy()
        result = avm.undefine()

        return result
Ejemplo n.º 5
0
    def wait_for_startup_complete(self, task_item):
        """
        wait for vm setting up os
        """
        vm_name = task_item.data['vm_name']
        install_method = task_item.data['install_method']
        avm = vm(vm_name)
        if install_method == 0:
            #iso
            new_xml = avm.change_boot_type('cdrom')
            avm.edit_conf(new_xml)

        #start
        result = avm.start()
        if result['status_code'] == -1:
            return result

        new_xml = avm.change_boot_type('hd')
        avm.edit_conf(new_xml)

        check_cmd = 'virsh qemu-agent-command %s \'{"execute":"guest-ping"}\' ' % vm_name
        ok_result = '{"return":{}}\n'
        timeout = 1800
        while task_item.consuming < timeout :
            #waiting
            task_item.consuming = int(time.time() - self.begin_handle_time)
            cmd_result = commands.getoutput(check_cmd)
            if cmd_result == ok_result:
                break
            time.sleep(10)

        if task_item.consuming >= timeout:
            avm.destroy()
            avm.undefine()
            status_code = -1
            msg = "timeout"
        else:
            status_code = 0
            msg = "OK"

        ret = {}
        ret["status_code"] = status_code
        ret["msg"] = str(msg)

        return ret 
Ejemplo n.º 6
0
    def task_define(self, task_item):
        vm_name = task_item.data['vm_name']
        memory = task_item.data['memory']
        cpu_num = task_item.data['cpu_num']
        os_size = task_item.data['disk_os']
        data_size = task_item.data['disk_data']
        install_method = task_item.data['install_method']
        vm_file = os.path.basename(task_item.data['vm_file'])

        
        has_delete = 0
        avm = vm(vm_name)
        if avm.xml != "":
            #vm is already exist
            avm.destroy()
            avm.undefine()
            has_delete = 1

        root = construct_vm_xml(vm_name, memory, cpu_num)

        os_path,disk_list = vm.prepare_img(task_item)
        i = 1
        c_hd_xml = hd_xml("file", os_path, i)
        root.find('devices').append(c_hd_xml.tree)
        for disk_path in disk_list:
            i += 1
            c_hd_xml = hd_xml("file", disk_path, i)
            root.find('devices').append(c_hd_xml.tree)

        if install_method == 0:
            #mount iso
            c_cdrom_xml = cdrom_xml('file', constants.iso_path + '/' + vm_file, i+1)
            if c_cdrom_xml is not None:
                root.find('devices').append(c_cdrom_xml.tree)

        result = vm.define(name = vm_name, xml = ET.tostring(root))
        if result['status_code'] == 0:
            result = self.wait_for_startup_complete(task_item)

        if has_delete == 1:
            result['msg'] = "Attention: have deleted an existed vm!!  " + result['msg']
        return result
        #self.task_done(task_item, result)

        pass
Ejemplo n.º 7
0
 def create_new_dev(self,
                    tname,
                    name,
                    override,
                    did=-1,
                    vcpu=0,
                    mem=0,
                    vif_prefix=None,
                    VCPUs_params=None):
     if did == -1:
         did = self.get_new_id()
     template = self.template_dict[tname]
     node = vm(self.session, did, template, name, vif_prefix=vif_prefix)
     if override:
         node.set_fixed_VCPUs(self.session, vcpu)
         node.set_memory(self.session, mem)
     self.node_list[did] = node
     self.dev_set.add(did)
     if VCPUs_params:
         node.set_VCPUs_params_dict(self.session, VCPUs_params)
     return node
Ejemplo n.º 8
0
    def task_action(self, task_item):
        vm_name = task_item.data['vm_name']
        action = task_item.data['action']

        result = None
        avm = vm(vm_name)
        if action == "start":
            if task_item.data.has_key('boot_type'):
                #change boot type
                boot_type = ''
                if task_item['boot_type'] == 0:
                    boot_type = 'cdrom'
                elif task_item['boot_type'] == 1:
                    boot_type = 'hd'
                else:
                    logger.error("invalid boot_type : %d" % task_item['boot_type']) 
                    boot_type = 'hd'
                new_xml = avm.change_boot_type(boot_type)
                result = avm.edit_conf(new_xml)
                if result['status_code'] == -1:
                    return result
            result = avm.start()
            return result

        elif action == "stop":
            result = avm.destroy()
            return result

        elif action == "reboot":
            result = avm.destroy()
            if result['status_code'] == -1:
                return result
            result = avm.start()
            return result
        else:
            return {"status_code": -1, "msg":"invalid action: %s" % action}

        pass
Ejemplo n.º 9
0
    def task_set_ip(self, task_item):
        vm_name = task_item.data['vm_name']
        bootproto = task_item.data['bootproto']
        nic_name = task_item.data['nic_name']

        content = """DEVICE=%s\nTYPE=Ethernet\nNAME=%s\nONBOOT=yes\nBOOTPROTO=%s\n""" % (nic_name, nic_name, bootproto)
        if bootproto == "static":
            ip = task_item.data['ip']
            netmask = task_item.data['netmask']
            gateway = task_item.data['gateway']
            dns = task_item.data['dns']
            content = content + "IPADDR=%s\nNETMASK=%s\nGATEWAY=%s\nDNS3=%s\n"%(ip, netmask, gateway, dns)
        elif bootproto == "dhcp":
            pass
        else:
            logger.error("invalid nic type: %s" % bootproto)
            return {"status_code": -1, "msg":"invalid nic type"}

        path = "/etc/sysconfig/network-scripts/ifcfg-%s"%nic_name
        avm = vm(vm_name)
        ret_count = avm.write_vm_file(path, content)
        if ret_count <=0:
            return {"status_code": -1, "msg":"error"}
        else:
            ret = avm.shutdown()
            time.sleep(10)
            i = 0
            while i < 5:
                i += 1
                run_status = avm.get_status()
                if run_status['vm_status'] == constants.vm_status_shutoff:
                    break
                time.sleep(10)
            if i == 5:
                avm.destroy()
            ret = avm.start()
            return ret
Ejemplo n.º 10
0
import os,sys
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)
from vm import vm 


a = vm()
ret = a.start_from_cdrom("qemu:///system", "vm_name1", "cdrom_name1")
print ret
Ejemplo n.º 11
0
    "type": 1,    "vm_name": "xingyu",    "formula": "",    "topology" : { "cpu" : 1, "disk" : 1},  
    "cpu_num":2, 
    "memory":512000000,  
    "disk_os":30,  
    "disk_data":100,
    "install_method": 1,
    "vm_file": "/home/iso/centos6.7-for-xingyu.iso",  
    "father_id": 1,
    "uri":"http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso",
    "save_path":"/home/",
    "md5": "111",


}
import os,sys

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)

from vm import vm 
from host import vmmhost 
import task

a = vm("cds")
#a.write_vm_file("/etc/sysconfig/network-scripts/ifcfg-bond0", "aaaaa")
tm = task.task_manager()
ctask = task.task(task_dict)

tm.task_set_ip(ctask)

Ejemplo n.º 12
0
import os,sys

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)

from vm import vm 

a = vm('cds')
ret = a.get_info()

print ret
Ejemplo n.º 13
0
import os,sys

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)

from vm import vm 
import libvirt

a = vm('cds')
conn = libvirt.open("qemu:///system")

ret = a.get_os_version()


print ret
Ejemplo n.º 14
0
    except Exception, e:
        logger.exception(e)

    ret_dict = {}
    ret_dict['req'] = "vm.conf"
    ret_dict['sn'] = sn

    doms_info = []
    chost = vmmhost(sn, conn)
    now_time = get_now_str()
    for name in chost.get_vmlist():
        dom_info = {}
        dom_info['name'] = name 
        dom_info['update_time'] = now_time
        dom_info['type'] = 0
        avm = vm(name)
        dom_info['os'] = avm.get_os_version() #todo: lsb_release -d
        dom_info['cpu_num'] = avm.get_cpu_num()
        dom_info['memory'] = avm.get_mem()
        dom_info['disk'] = avm.get_disk_info()
        dom_info['network'] = avm.get_net_info()
        snapshot_list = avm.get_snapshots()
        snapshot_list_info = []
        for item in snapshot_list:
            snap_item = {}
            snap_item['name'] = item
            snap_item['create_time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  #todo
            snap_item['comment'] = "xxxx" 
            snapshot_list_info.append(snap_item)
        dom_info['snapshots'] = snapshot_list_info
Ejemplo n.º 15
0
import os,sys
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)
from vm import vm 

a = vm('aaa')

print a.xml
if a.xml == "":
    print "11"
else:
    print "22"

Ejemplo n.º 16
0
import os, sys

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parentdir)
import os, sys

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parentdir)

from vm import vm

a = vm()
ret = a.destroy("qemu:///system", sys.argv[1])
print ret
Ejemplo n.º 17
0
    "topology": {
        "cpu": 1,
        "disk": 1
    },
    "cpu_num": 2,
    "memory": 512000000,
    "disk_os": 30,
    "disk_data": 100,
    "install_method": 1,
    "vm_file": "/home/iso/centos6.7-for-xingyu.iso",
    "father_id": 1,
    "uri":
    "http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso",
    "save_path": "/home/",
    "md5": "111",
}
import os, sys

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parentdir)

from vm import vm
from host import vmmhost
import task

a = vm("cds")
tm = task.task_manager()
ctask = task.task(task_dict)

tm.task_action(ctask)
Ejemplo n.º 18
0
def vmware_create(_WorkingDirectory, _DestinationDirectory, _StartUpFile = None, _NewVmx = "default.vmx", _NewVmdk = "default.vmdk", _CloneMachine = True, _ContinueNumber = 0, _Gui = True):

   _Vmx, _Vmdk = find_files(_WorkingDirectory)

   _VirtualMachine = vm(_WorkingDirectory, _Vmx, _Vmdk, _StartUpFile, True, True, _ContinueNumber, _Gui)

   _Vmx = _NewVmx

   _Vmdk = _NewVmdk

   if _CloneMachine:

      _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, False, False, _VirtualMachine._m_continue, _Gui)

   else:

      _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, True, True, _VirtualMachine._m_continue, _Gui)

   _ClonedMachine.set_function(vmware_entry_point)

   # increasing machine count ** need to lock **

   _Lock.acquire()

   _MachineCount.value = _MachineCount.value + 1

   _Lock.release() # synchronize finished

   if _CloneMachine: 

      _ContinueThread = heavy_thread(continue_execution, (_ClonedMachine, None, True, _VirtualMachine,))

      _ThreadList.append(_ContinueThread)
   
      _ContinueThread.start()

   else: 

      _ClonedMachine._m_disk_file = find_snapshot(_ClonedMachine)

      _Url = get_url()

      if _Url is None: return

      _DirUrl = _Url[7:]

      if (_Shelve.has_key(_DirUrl)):

         while(_Shelve.has_key(_DirUrl)):

            _Url = get_url()

            _DirUrl = _Url[7:]

      _SavedUrl = _DirUrl

      _DirUrl = _DirUrl.replace("/", "_")

      _DirUrl = _DirUrl.replace(".", "_")

      _Shelve[_SavedUrl] = _DirUrl

      _DirCommand = "sudo mkdir " + "\"" + "/media/hdd0/Virtual Machines/collected/" + _DirUrl + "\""

      _ClonedMachine._m_collection = "/media/hdd0/Virtual Machines/collected/" + _DirUrl

      _ClonedMachine._m_url = _Url

      print _DirCommand

      os.system(_DirCommand)

      _Thread = heavy_thread(continue_execution, (_ClonedMachine, None, False,))

      _ThreadList.append(_Thread)

      _Thread.start()

   return _ClonedMachine
Ejemplo n.º 19
0
    except Exception, e:
        logger.exception(e)

    ret_dict = {}
    ret_dict['req'] = "vm.conf"
    ret_dict['sn'] = sn

    doms_info = []
    chost = vmmhost(sn, conn)
    now_time = get_now_str()
    for name in chost.get_vmlist():
        dom_info = {}
        dom_info['name'] = name
        dom_info['update_time'] = now_time
        dom_info['type'] = 0
        avm = vm(name)
        dom_info['os'] = avm.get_os_version()  #todo: lsb_release -d
        dom_info['cpu_num'] = avm.get_cpu_num()
        dom_info['memory'] = avm.get_mem()
        dom_info['disk'] = avm.get_disk_info()
        dom_info['network'] = avm.get_net_info()
        snapshot_list = avm.get_snapshots()
        snapshot_list_info = []
        for item in snapshot_list:
            snap_item = {}
            snap_item['name'] = item
            snap_item['create_time'] = time.strftime("%Y-%m-%d %H:%M:%S",
                                                     time.localtime())  #todo
            snap_item['comment'] = "xxxx"
            snapshot_list_info.append(snap_item)
        dom_info['snapshots'] = snapshot_list_info
Ejemplo n.º 20
0
import os,sys
import libvirt

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,parentdir)

from host import vmmhost 
from vm import vm

cvm = vm()
conn = libvirt.open("qemu:///system")
chost = vmmhost('123123', conn)
ret = chost.download_res("http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso", "123","/home/louzhengwei/test/sdb2/iso/" )
print ret

#print ret
Ejemplo n.º 21
0
import vm

dd = vm.vm()
dfdf = vm.vm()
dfdff = vm.vm()
ddd = vm.vm()
print(ddd.vm_id)