def postprocess(test, params, env): """ Postprocess all VMs and images according to the instructions in params. @param test: An Autotest test object. @param params: Dict containing all VM and image parameters. @param env: The environment (a dict-like object). """ # Postprocess all VMs and images process(test, params, env, postprocess_image, postprocess_vm) # Terminate the screendump thread global _screendump_thread, _screendump_thread_termination_event if _screendump_thread: logging.debug("Terminating screendump thread...") _screendump_thread_termination_event.set() _screendump_thread.join(10) _screendump_thread = None _screendump_thread_termination_event = None # Warn about corrupt PPM files for f in glob.glob(os.path.join(test.debugdir, "*.ppm")): if not ppm_utils.image_verify_ppm_file(f): logging.warn("Found corrupt PPM file: %s", f) # Should we convert PPM files to PNG format? if params.get("convert_ppm_files_to_png") == "yes": logging.debug("'convert_ppm_files_to_png' specified; converting PPM " "files to PNG format...") try: for f in glob.glob(os.path.join(test.debugdir, "*.ppm")): if ppm_utils.image_verify_ppm_file(f): new_path = f.replace(".ppm", ".png") image = PIL.Image.open(f) image.save(new_path, format='PNG') except NameError: pass # Should we keep the PPM files? if params.get("keep_ppm_files") != "yes": logging.debug("'keep_ppm_files' not specified; removing all PPM files " "from debug dir...") for f in glob.glob(os.path.join(test.debugdir, '*.ppm')): os.unlink(f) # Should we keep the screendump dirs? if params.get("keep_screendumps") != "yes": logging.debug("'keep_screendumps' not specified; removing screendump " "dirs...") for d in glob.glob(os.path.join(test.debugdir, "screendumps_*")): if os.path.isdir(d) and not os.path.islink(d): shutil.rmtree(d, ignore_errors=True) # Kill all unresponsive VMs if params.get("kill_unresponsive_vms") == "yes": logging.debug("'kill_unresponsive_vms' specified; killing all VMs " "that fail to respond to a remote login request...") for vm in kvm_utils.env_get_all_vms(env): if vm.is_alive(): session = vm.remote_login() if session: session.close() else: vm.destroy(gracefully=False) # Kill all kvm_subprocess tail threads kvm_subprocess.kill_tail_threads() # Terminate tcpdump if no VMs are alive living_vms = [vm for vm in kvm_utils.env_get_all_vms(env) if vm.is_alive()] if not living_vms and "tcpdump" in env: env["tcpdump"].close() del env["tcpdump"] # Execute any post_commands if params.get("post_command"): process_command(test, params, env, params.get("post_command"), int(params.get("post_command_timeout", "600")), params.get("post_command_noncritical") == "yes")
# Kill all unresponsive VMs if params.get("kill_unresponsive_vms") == "yes": logging.debug("'kill_unresponsive_vms' specified; killing all VMs " "that fail to respond to a remote login request...") for vm in env.get_all_vms(): if vm.is_alive(): try: session = vm.login() session.close() except (kvm_utils.LoginError, kvm_vm.VMError), e: logging.warn(e) vm.destroy(gracefully=False) # Kill all kvm_subprocess tail threads kvm_subprocess.kill_tail_threads() # Terminate tcpdump if no VMs are alive living_vms = [vm for vm in env.get_all_vms() if vm.is_alive()] if not living_vms and "tcpdump" in env: env["tcpdump"].close() del env["tcpdump"] if params.get("setup_hugepages") == "yes": h = test_setup.HugePageConfig(params) h.cleanup() if params.get("type") == "enospc": e = test_setup.EnospcConfig(test, params) e.cleanup()
# Kill all unresponsive VMs if params.get("kill_unresponsive_vms") == "yes": logging.debug("'kill_unresponsive_vms' specified; killing all VMs " "that fail to respond to a remote login request...") for vm in env.get_all_vms(): if vm.is_alive(): try: session = vm.login() session.close() except (kvm_utils.LoginError, kvm_vm.VMError), e: logging.warn(e) vm.destroy(gracefully=False) # Kill all kvm_subprocess tail threads kvm_subprocess.kill_tail_threads() # Terminate tcpdump if no VMs are alive living_vms = [vm for vm in env.get_all_vms() if vm.is_alive()] if not living_vms and "tcpdump" in env: env["tcpdump"].close() del env["tcpdump"] if params.get("setup_hugepages") == "yes": h = kvm_utils.HugePageConfig(params) h.cleanup() if params.get("type") == "enospc": e = test_setup.EnospcConfig(test, params) e.cleanup()