diff options
author | Soren Hansen <soren@linux2go.dk> | 2011-03-14 10:46:26 +0100 |
---|---|---|
committer | Soren Hansen <soren@linux2go.dk> | 2011-03-14 10:46:26 +0100 |
commit | 9164b8d224ae6629cdac00248b98fad762bdfc10 (patch) | |
tree | e48b1c1f184c770a101093af6aa5de0503da9ce8 /nova/utils.py | |
parent | 3fb5da952e041f88a29ad0b049c52236b84954e9 (diff) | |
download | nova-9164b8d224ae6629cdac00248b98fad762bdfc10.tar.gz nova-9164b8d224ae6629cdac00248b98fad762bdfc10.tar.xz nova-9164b8d224ae6629cdac00248b98fad762bdfc10.zip |
Make utils.execute not overwrite std{in,out,err} args to Popen on retries.
Make utils.execute reject unknown kwargs.
Add a couple of unit tests for utils.execute.
Diffstat (limited to 'nova/utils.py')
-rw-r--r-- | nova/utils.py | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/nova/utils.py b/nova/utils.py index 87e726394..2a98411ea 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -133,13 +133,14 @@ def fetchfile(url, target): def execute(*cmd, **kwargs): - process_input = kwargs.get('process_input', None) - addl_env = kwargs.get('addl_env', None) - check_exit_code = kwargs.get('check_exit_code', 0) - stdin = kwargs.get('stdin', subprocess.PIPE) - stdout = kwargs.get('stdout', subprocess.PIPE) - stderr = kwargs.get('stderr', subprocess.PIPE) - attempts = kwargs.get('attempts', 1) + process_input = kwargs.pop('process_input', None) + addl_env = kwargs.pop('addl_env', None) + check_exit_code = kwargs.pop('check_exit_code', 0) + delay_on_retry = kwargs.pop('delay_on_retry', True) + attempts = kwargs.pop('attempts', 1) + if len(kwargs): + raise exception.Error(_('Got unknown keyword args ' + 'to utils.execute: %r') % kwargs) cmd = map(str, cmd) while attempts > 0: @@ -149,8 +150,11 @@ def execute(*cmd, **kwargs): env = os.environ.copy() if addl_env: env.update(addl_env) - obj = subprocess.Popen(cmd, stdin=stdin, - stdout=stdout, stderr=stderr, env=env) + obj = subprocess.Popen(cmd, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=env) result = None if process_input != None: result = obj.communicate(process_input) @@ -176,7 +180,8 @@ def execute(*cmd, **kwargs): raise else: LOG.debug(_("%r failed. Retrying."), cmd) - greenthread.sleep(random.randint(20, 200) / 100.0) + if delay_on_retry: + greenthread.sleep(random.randint(20, 200) / 100.0) def ssh_execute(ssh, cmd, process_input=None, |