From: David Huff <dhuff@redhat.com>
To: Lucas Meneghel Rodrigues <lmr@redhat.com>
Cc: kvm@vger.kernel.org
Subject: Re: [KVM_AUTOTEST PATCH] Added functionality to the preprocessor to run scripts
Date: Mon, 15 Jun 2009 16:57:17 -0400 [thread overview]
Message-ID: <4A36B5AD.6060901@redhat.com> (raw)
In-Reply-To: <1245098092.2919.36.camel@freedom>
Lucas Meneghel Rodrigues wrote:
> On Fri, 2009-06-12 at 10:43 -0400, David Huff wrote:
>> This patch adds the processes_command function to the preprocessor which
>> will run custom scripts before and after a test is executed.
>>
>> processes_command will export all test parameters as environmental variables
>> for passing parameters to a custom script.
>>
>> processes_command uses parameters defined in the config file:
>> pre_command, pre_command_timeout, pre_command_noncritical
>> post_command, post_command_timeout, post_commmand_noncritical
>>
>> command - just defines the script to be run
>> timeout - timeout to kill script if hung
>> noncritical - if yes do not fail test if command fails, default no
>>
>> Currently it is still using the returned status from kvm_utils.run_bg If
>> kvm_utils.run_bg is changed to throw an exception, process_command will
>> have to be updated at that time.
>
> Ok David, I have applied your patch with some slight modifications.
> Please check it out. Thanks!
>
> Index: client/tests/kvm/kvm_preprocessing.py
> ===================================================================
> --- client/tests/kvm/kvm_preprocessing.py (revision 3261)
> +++ client/tests/kvm/kvm_preprocessing.py (working copy)
> @@ -1,4 +1,4 @@
> -import sys, os, time, commands, re, logging
> +import sys, os, time, commands, re, logging, signal
> from autotest_lib.client.bin import test
> from autotest_lib.client.common_lib import error
> import kvm_vm, kvm_utils
> @@ -133,6 +133,43 @@
> vm.destroy(gracefully = params.get("kill_vm_gracefully") == "yes")
>
>
> +def process_command(test, params, env, command, command_timeout,
> + command_noncritical):
> + """
> + Pre- or post- custom commands to be executed before/after a test is run
> +
> + @param test: An Autotest test object.
> + @param params: A dict containing all VM and image parameters.
> + @param env: The environment (a dict-like object).
> + @param command: Script containing the command to be run.
> + @param commmand_timeout: Timeout for command execution.
> + @param command_noncritical: if 'yes' test will not fail if command fails.
> + """
> + if command_timeout is None:
> + command_timeout = "600"
> +
> + if command_noncritical is None:
> + command_noncritical = "no"
> +
> + # export environment vars
> + for k in params.keys():
> + logging.info("Adding KVM_TEST_%s to Environment" % (k))
This was changed to logging.debug per Uri's request
> + os.putenv("KVM_TEST_%s" % (k), str(params[k]))
> + # execute command
> + logging.info("Executing command '%s'..." % command)
> + timeout = int(command_timeout)
> + (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir,
> + command),
> + None, logging.debug,
> + "(command) ",
This was also changed to "(%s) " % os.path.basename(command), per Uri's
comments....
> + timeout = timeout)
> + if status != 0:
> + kvm_utils.safe_kill(pid, signal.SIGTERM)
> + logging.warn("Custom processing command failed: '%s'..." % command)
> + if command_noncritical != "yes":
> + raise error.TestError("Custom processing command failed")
I also changed the verbiage here for better clarification however not
critical...
> +
> +
> def process(test, params, env, image_func, vm_func):
> """
> Pre- or post-process VMs and images according to the instructions in params.
> @@ -190,6 +227,12 @@
> vm.destroy()
> del env[key]
>
> + #execute any pre_commands
> + if params.get("pre_command"):
> + process_command(test, params, env, params.get("pre_command"),
> + params.get("pre_command_timeout"),
> + params.get("pre_command_noncritical"))
> +
> # Preprocess all VMs and images
> process(test, params, env, preprocess_image, preprocess_vm)
>
> @@ -242,7 +285,13 @@
> kvm_utils.run_bg("rm -vf %s" % os.path.join(test.debugdir, "*.ppm"),
> None, logging.debug, "(rm) ", timeout=5.0)
>
> + #execute any post_commands
> + if params.get("post_command"):
> + process_command(test, params, env, params.get("post_command"),
> + params.get("post_command_timeout"),
> + params.get("post_command_noncritical"))
>
> +
> def postprocess_on_error(test, params, env):
> """
> Perform postprocessing operations required only if the test failed.
>
prev parent reply other threads:[~2009-06-15 20:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-12 14:43 [KVM_AUTOTEST PATCH] Added functionality to the preprocessor to run scripts David Huff
2009-06-15 20:34 ` Lucas Meneghel Rodrigues
2009-06-15 20:57 ` David Huff [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A36B5AD.6060901@redhat.com \
--to=dhuff@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lmr@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox