@@ -135,8 +135,7 @@ def postprocess_vm(test, params, env, name):
"Waiting for VM to kill itself..."):
kvm_log.debug("'kill_vm' specified; killing VM...")
vm.destroy(gracefully = params.get("kill_vm_gracefully") == "yes")
-
-
+
def process(test, params, env, image_func, vm_func):
"""Pre- or post-process VMs and images according to the instructions in params.
@@ -169,6 +168,7 @@ def preprocess(test, params, env):
params -- a dict containing all VM and image parameters
env -- the environment (a dict-like object)
+ Also, runs any setup command defined in the parameter pre_command
Also, collect some host information, such as the KVM version.
"""
# Verify the identities of all living VMs
@@ -192,6 +192,22 @@ def preprocess(test, params, env):
vm.destroy()
del env[key]
+ #execute any pre_commands
+ pre_command = params.get("pre_command")
+ if pre_command:
+ # export environment vars
+ for k in params.keys():
+ kvm_log.info("Adding KVM_TEST_%s to Environment" % (k))
+ os.putenv("KVM_TEST_%s" % (k), str(params[k]))
+
+ # execute command
+ kvm_log.info("Executing command '%s'..." % pre_command)
+ (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir, pre_command),
+ None, kvm_log.debug, "(pre_command) ", timeout=600)
+ if status != 0:
+ kvm_utils.safe_kill(pid, signal.SIGTERM)
+ raise error.TestError, "Custom processing pre_command failed"
+
# Preprocess all VMs and images
process(test, params, env, preprocess_image, preprocess_vm)
@@ -232,6 +248,8 @@ def postprocess(test, params, env):
test -- an Autotest test object
params -- a dict containing all VM and image parameters
env -- the environment (a dict-like object)
+
+ Also, runs any command defined in the parameter post_command
"""
process(test, params, env, postprocess_image, postprocess_vm)
@@ -241,6 +259,15 @@ def postprocess(test, params, env):
kvm_log.debug("'keep_ppm_files' not specified; removing all PPM files from results dir...")
kvm_utils.run_bg("rm -vf %s" % os.path.join(test.debugdir, "*.ppm"), None, kvm_log.debug, "(rm) ", timeout=5.0)
+ #execute any post_commands
+ post_command = params.get("post_command")
+ if post_command:
+ kvm_log.info("Executing command '%s'..." % post_command)
+ (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir, post_command),
+ None, kvm_log.debug, "(post_command) ", timeout=600)
+ if status != 0:
+ kvm_utils.safe_kill(pid, signal.SIGTERM)
+ raise error.TestError, "Custom processing command failed"
def postprocess_on_error(test, params, env):
"""Perform postprocessing operations required only if the test failed.