def construct_vzctl_args(lab_specz={}):
    """ Returns a tuple of vzctl create arguments and set arguments """

    def get_vm_spec():
        lab_spec = dict2default(lab_specz)
        vm_spec = { "lab_ID" : lab_spec['lab']['description']['id'],
            "os" : lab_spec['lab']['runtime_requirements']['platform']['os'],
            "os_version" : lab_spec['lab']['runtime_requirements']['platform']['osVersion'],
            "ram" : lab_spec['lab']['runtime_requirements']['platform']['memory']['min_required'],
            "diskspace" : lab_spec['lab']['runtime_requirements']['platform']['storage']['min_required'],
            "swap" : lab_spec['lab']['runtime_requirements']['platform']['memory']['swap']
        }
        return vm_spec

    vm_spec = get_vm_spec()
    lab_ID = get_test_lab_id() if vm_spec["lab_ID"] == "" else vm_spec["lab_ID"]
    host_name = lab_ID + "." + get_adapter_hostname()
    ip_address = BaseAdapter.find_available_ip()
    os_template = find_os_template(vm_spec["os"], vm_spec["os_version"])
    (ram, swap) = VMUtils.get_ram_swap(vm_spec["ram"], vm_spec["swap"])
    (disk_soft, disk_hard) = VMUtils.get_disk_space(vm_spec["diskspace"])
    vm_create_args = " --ostemplate " + os_template + \
                     " --ipadd " + ip_address + \
                     " --diskspace " + disk_soft + ":" + disk_hard + \
                     " --hostname " + host_name
    # Note to self: check ram format "0:256M" vs "256M"
    vm_set_args = " --nameserver " + get_adapter_nameserver() + \
                  " --ram " + ram + \
                  " --swap " + swap + \
                  " --onboot yes" + \
                  " --save"
    return (vm_create_args, vm_set_args)
    def create_vm(self, lab_spec, vm_id=""):
        CENTOSVZ_LOGGER.debug("CentOSVZAdapter: create_vm()")
        """If no vm_id is specified, it is computed using the last two segments of
           an available IP address; vm_spec is an object """
        if vm_id == "":
            ip_address = BaseAdapter.find_available_ip()
            m = re.match(r'[0-9]+.[0-9]+.([0-9]+).([0-9]+)', ip_address)
            if m != None:
                vm_id = m.group(1) + m.group(2)
        else:
            ip_address = None
            vm_id = validate_vm_id(vm_id)
        (vm_create_args, vm_set_args) = construct_vzctl_args(lab_spec)

        CENTOSVZ_LOGGER.debug("CentOSVZAdapter: create_vm(): ip = %s, vm_id = %s, vm_create_args = %s, vm_set_args = %s" % \
                              (ip_address, vm_id, vm_create_args, vm_set_args))
        try:
            ret_code = subprocess.check_call(VZCTL + " create " + vm_id + vm_create_args, stdout=LOG_FD, stderr=LOG_FD, shell=True)
            if ret_code == 0:
                ret_code = subprocess.check_call(VZCTL + " start " + vm_id, stdout=LOG_FD, stderr=LOG_FD, shell=True)
            if ret_code == 0:
                ret_code = subprocess.check_call(VZCTL + " set " + vm_id + vm_set_args, stdout=LOG_FD, stderr=LOG_FD, shell=True)
            if ret_code == 0:
                return vm_id
        except subprocess.CalledProcessError, e:
            CENTOSVZ_LOGGER.error("Error creating VM: " + str(e))
            #raise e
            return 105 
Example #3
0
    def create_vm(self, lab_spec, vm_id=""):
        logger.debug("CentOSVZAdapter: create_vm()")
        """If no vm_id is specified, it is computed using the last two segments"""
        """of an available IP address; vm_spec is an object """
        if vm_id == "":
            ip_address = BaseAdapter.find_available_ip()
            m = re.match(r'[0-9]+.[0-9]+.([0-9]+).([0-9]+)', ip_address)
            if m != None:
#                vm_id = str((int(m.group(1) + m.group(2)) + 10))
                vm_id = m.group(1) + m.group(2)
        else:
            ip_address = None
            vm_id = validate_vm_id(vm_id)

        (vm_create_args, vm_set_args) = construct_vzctl_args(lab_spec)

        logger.debug("CentOSVZAdapter: create_vm(): ip = %s, vm_id = %s, vm_create_args = %s, vm_set_args = %s" % 
                        (ip_address, vm_id, vm_create_args, vm_set_args))
        
        try:
            command = (r'ssh -o "%s" %s "%s create %s %s"' % 
                        (settings.NO_STRICT_CHECKING, settings.BASE_IP_ADDRESS, 
                            VZCTL, vm_id, vm_create_args))
            logger.debug("CentOSVZAdapter: create_vm(): create command = %s" %
                            command)
            (ret_code, output) = execute_command(command)

            if ret_code == 0:

                command = (r'ssh -o "%s" %s "%s start %s"' %
                            (settings.NO_STRICT_CHECKING,
                            settings.BASE_IP_ADDRESS,
                            VZCTL, vm_id))
                logger.debug("CentOSVZAdapter: create_vm(): start command = %s" %
                                command)
                (ret_code,output) = execute_command(command)

                if ret_code == 0:

                    command = (r'ssh -o "%s" %s "%s set %s %s"' %
                                (settings.NO_STRICT_CHECKING,
                                settings.BASE_IP_ADDRESS,
                                VZCTL, vm_id, vm_set_args))
                    logger.debug("CentOSVZAdapter: create_vm(): set command = %s" %
                                    command)
                    (ret_code, output) = execute_command(command)

                    if ret_code == 0:
                        return (True, vm_id)

        except Exception, e:
            logger.error("Error creating VM: " + str(e))
            #raise e
            return (False, -1) 
Example #4
0
def create_vm_id(vm_id):
    """If no vm_id is specified, it is computed using the last two segments"""
    """of an available IP address; vm_spec is an object """
    logger.debug("create_vm_id(): vm_id = %s" % vm_id)
    if vm_id == "":
        global IP_ADDRESS
        IP_ADDRESS = BaseAdapter.find_available_ip()
        m = re.match(r'[0-9]+.[0-9]+.([0-9]+).([0-9]+)', IP_ADDRESS)
        if m != None:
            vm_id = str((int(m.group(1) + m.group(2)) + 100))
        else:
            vm_id = validate_vm_id(vm_id)
    logger.debug("create_vm_id(): vm_id = %s" % vm_id)
    return vm_id
Example #5
0
def construct_vzctl_args(lab_specz={}):
    """ Returns a tuple of vzctl create arguments and set arguments """
    def get_vm_spec():
        lab_spec = dict2default(lab_specz)
        vm_spec = {
            "lab_ID":
            lab_spec['lab']['description']['id'],
            "os":
            lab_spec['lab']['runtime_requirements']['platform']['os'],
            "os_version":
            lab_spec['lab']['runtime_requirements']['platform']['osVersion'],
            "ram":
            lab_spec['lab']['runtime_requirements']['platform']['memory']
            ['min_required'],
            "diskspace":
            lab_spec['lab']['runtime_requirements']['platform']['storage']
            ['min_required'],
            "swap":
            lab_spec['lab']['runtime_requirements']['platform']['memory']
            ['swap']
        }
        return vm_spec

    vm_spec = get_vm_spec()
    lab_ID = get_test_lab_id(
    ) if vm_spec["lab_ID"] == "" else vm_spec["lab_ID"]
    host_name = lab_ID + "." + settings.get_adapter_hostname()
    ip_address = BaseAdapter.find_available_ip()
    os_template = find_os_template(vm_spec["os"], vm_spec["os_version"])
    (ram, swap) = VMUtils.get_ram_swap(vm_spec["ram"], vm_spec["swap"])
    (disk_soft, disk_hard) = VMUtils.get_disk_space(vm_spec["diskspace"])
    vm_create_args = " --ostemplate " + os_template + \
                     " --ipadd " + ip_address + \
                     " --diskspace " + disk_soft + ":" + disk_hard + \
                     " --hostname " + host_name
    # Note to self: check ram format "0:256M" vs "256M"
    vm_set_args = " --nameserver " + settings.get_adapter_nameserver() + \
                  " --ram " + ram + \
                  " --swap " + swap + \
                  " --onboot yes" + \
                  " --save"
    return (vm_create_args, vm_set_args)
Example #6
0
    def create_vm(self, lab_spec, vm_id=""):
        CENTOSVZ_LOGGER.debug("CentOSVZAdapter: create_vm()")
        """If no vm_id is specified, it is computed using the last two segments of
           an available IP address; vm_spec is an object """
        if vm_id == "":
            ip_address = BaseAdapter.find_available_ip()
            m = re.match(r'[0-9]+.[0-9]+.([0-9]+).([0-9]+)', ip_address)
            if m != None:
                vm_id = m.group(1) + m.group(2)
        else:
            ip_address = None
            vm_id = validate_vm_id(vm_id)
        (vm_create_args, vm_set_args) = construct_vzctl_args(lab_spec)

        CENTOSVZ_LOGGER.debug("CentOSVZAdapter: create_vm(): ip = %s, vm_id = %s, vm_create_args = %s, vm_set_args = %s" % \
                              (ip_address, vm_id, vm_create_args, vm_set_args))
        try:
            ret_code = subprocess.check_call(VZCTL + " create " + vm_id +
                                             vm_create_args,
                                             stdout=LOG_FD,
                                             stderr=LOG_FD,
                                             shell=True)
            if ret_code == 0:
                ret_code = subprocess.check_call(VZCTL + " start " + vm_id,
                                                 stdout=LOG_FD,
                                                 stderr=LOG_FD,
                                                 shell=True)
            if ret_code == 0:
                ret_code = subprocess.check_call(VZCTL + " set " + vm_id +
                                                 vm_set_args,
                                                 stdout=LOG_FD,
                                                 stderr=LOG_FD,
                                                 shell=True)
            if ret_code == 0:
                return vm_id
        except subprocess.CalledProcessError, e:
            CENTOSVZ_LOGGER.error("Error creating VM: " + str(e))
            #raise e
            return 105