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
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)
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
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)