def create_vm(self, lab_spec, vm_id=""): logger.debug("centos_openvz_adapter: 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 = base_adapter.find_available_ip() m = re.match(r'[0-9]+.[0-9]+.([0-9]+).([0-9]+)', ip_address) if m is not None: vm_id = str((int(m.group(1) + m.group(2)))) # vm_id = m.group(1) + m.group(2) else: ip_address = None vm_id = self.validate_vm_id(vm_id) (vm_create_args, vm_set_args) = self.construct_vzctl_args(lab_spec) logger.debug("centos_openvz_adapter: 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"' % (base_config.NO_STRICT_CHECKING, base_config.BASE_IP_ADDRESS, VZCTL, vm_id, vm_create_args)) logger.debug("centos_openvz_adapter: 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"' % (base_config.NO_STRICT_CHECKING, base_config.BASE_IP_ADDRESS, VZCTL, vm_id)) logger.debug("centos_openvz_adapter: 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"' % (base_config.NO_STRICT_CHECKING, base_config.BASE_IP_ADDRESS, VZCTL, vm_id, vm_set_args)) logger.debug("centos_openvz_adapter: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(self, 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 = base_adapter.find_available_ip() m = re.match(r'[0-9]+.[0-9]+.([0-9]+).([0-9]+)', IP_ADDRESS) if m is not None: vm_id = str((int(m.group(1) + m.group(2)))) else: vm_id = self.validate_vm_id(vm_id) logger.debug("create_vm_id(): vm_id = %s" % vm_id) return vm_id
def construct_vzctl_args(self, 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 = None if vm_spec["lab_ID"] == "": lab_ID = base_adapter.get_test_lab_id() else: lab_ID = vm_spec["lab_ID"] host_name = lab_ID + "." + base_adapter.get_adapter_hostname() ip_address = base_adapter.find_available_ip() os_template = base_adapter.find_os_template(vm_spec["os"], vm_spec["os_version"], config.supported_template) (ram, swap) = vm_utils.get_ram_swap(vm_spec["ram"], vm_spec["swap"]) (disk_soft, disk_hard) = vm_utils.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 " + base_config.ADAPTER_NAME_SERVER + \ " --ram " + ram + \ " --swap " + swap + \ " --onboot yes" + \ " --save" return (vm_create_args, vm_set_args)