def serial_login(self, timeout=LOGIN_TIMEOUT): """ Log into the guest via the serial console. If timeout expires while waiting for output from the guest (e.g. a password prompt or a shell prompt) -- fail. @param timeout: Time (seconds) before giving up logging into the guest. @return: ShellSession object on success and None on failure. """ error.context("logging into '%s' via serial console" % self.name) username = self.params.get("username", "") password = self.params.get("password", "") prompt = self.params.get("shell_prompt", "[\#\$]") linesep = eval("'%s'" % self.params.get("shell_linesep", r"\n")) status_test_command = self.params.get("status_test_command", "") self.serial_console.set_linesep(linesep) self.serial_console.set_status_test_command(status_test_command) # Try to get a login prompt self.serial_console.sendline() virt_remote._remote_login(self.serial_console, username, password, prompt, timeout) return self.serial_console
def login(self, timeout=LOGIN_TIMEOUT): """ Log into the hypervisor using required URIs . @timeout: Time in seconds that we will wait before giving up on logging into the host. @return: A ShellSession object. """ if self.driver is None: uri = utils.system_output('%s uri' % self.virsh_exec) else: uri = "%s+ssh://%s@%s/system" % (self.driver, self.username, self.host) command = "%s --connect %s" % (self.virsh_exec, uri) session = aexpect.ShellSession(command, linesep=self.linesep, prompt=self.prompt) if self.username is not None: try: virt_remote._remote_login(session, self.username, self.password, self.prompt, timeout) except aexpect.ShellError: session.close() session = None return session
def preprocess(test, params, env): """ Preprocess all VMs and images according to the instructions in params. Also, collect some host information, such as the KVM version. @param test: An Autotest test object. @param params: A dict containing all VM and image parameters. @param env: The environment (a dict-like object). """ error.context("preprocessing") port = params.get('shell_port') prompt = params.get('shell_prompt') address = params.get('ovirt_node_address') username = params.get('ovirt_node_user') password = params.get('ovirt_node_password') # Start tcpdump if it isn't already running if "address_cache" not in env: env["address_cache"] = {} if "tcpdump" in env and not env["tcpdump"].is_alive(): env["tcpdump"].close() del env["tcpdump"] if "tcpdump" not in env and params.get("run_tcpdump", "yes") == "yes": cmd = "%s -npvi any 'dst port 68'" % virt_utils.find_command("tcpdump") if params.get("remote_preprocess") == "yes": logging.debug("Starting tcpdump '%s' on remote host", cmd) login_cmd = ("ssh -o UserKnownHostsFile=/dev/null -o \ PreferredAuthentications=password -p %s %s@%s" % (port, username, address)) env["tcpdump"] = aexpect.ShellSession( login_cmd, output_func=_update_address_cache, output_params=(env["address_cache"],)) virt_remote._remote_login(env["tcpdump"], username, password, prompt) env["tcpdump"].sendline(cmd) else: logging.debug("Starting tcpdump '%s' on local host", cmd) env["tcpdump"] = aexpect.Tail( command=cmd, output_func=_update_address_cache, output_params=(env["address_cache"],)) if virt_utils.wait_for(lambda: not env["tcpdump"].is_alive(), 0.1, 0.1, 1.0): logging.warn("Could not start tcpdump") logging.warn("Status: %s" % env["tcpdump"].get_status()) logging.warn("Output:" + virt_utils.format_str_for_message( env["tcpdump"].get_output())) # Destroy and remove VMs that are no longer needed in the environment requested_vms = params.objects("vms") for key in env.keys(): vm = env[key] if not virt_utils.is_vm(vm): continue if not vm.name in requested_vms: logging.debug("VM '%s' found in environment but not required for " "test, destroying it" % vm.name) vm.destroy() del env[key] # Get Host cpu type if params.get("auto_cpu_model") == "yes": if not env.get("cpu_model"): env["cpu_model"] = virt_utils.get_cpu_model() params["cpu_model"] = env.get("cpu_model") kvm_ver_cmd = params.get("kvm_ver_cmd", "") if kvm_ver_cmd: try: cmd_result = utils.run(kvm_ver_cmd) kvm_version = cmd_result.stdout.strip() except error.CmdError, e: kvm_version = "Unknown"