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)