diff options
author | Soren Hansen <soren@linux2go.dk> | 2011-03-17 21:11:58 +0000 |
---|---|---|
committer | Tarmac <> | 2011-03-17 21:11:58 +0000 |
commit | 5726430038ce01f6dc1efba6d1f51a84cadfecf9 (patch) | |
tree | 5af9a1dd73fb3988a0c8d1f9935e086850389d46 /nova/utils.py | |
parent | 4b5a775ae4169faaf5716d362ead66aa443a2748 (diff) | |
parent | 06c0b81e54adf3fb0635a7cd7679bcdb051e6263 (diff) | |
download | nova-5726430038ce01f6dc1efba6d1f51a84cadfecf9.tar.gz nova-5726430038ce01f6dc1efba6d1f51a84cadfecf9.tar.xz nova-5726430038ce01f6dc1efba6d1f51a84cadfecf9.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 24b8da9ea..499af2039 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, |