diff options
author | Devin Carlen <devin.carlen@gmail.com> | 2011-02-12 18:34:36 -0800 |
---|---|---|
committer | Devin Carlen <devin.carlen@gmail.com> | 2011-02-12 18:34:36 -0800 |
commit | 2e75026ef11dfac37f1449a54c0d6f85ff8bfca6 (patch) | |
tree | 5af966fce0491b62f3e2871472dfbce1cf8dfc71 /nova/utils.py | |
parent | 6f6a09216458ffdba17d1960bbad723a3e71e7b2 (diff) | |
parent | 2df3182b6e9637fe0e9ce9358a60ee874a97acb3 (diff) | |
download | nova-2e75026ef11dfac37f1449a54c0d6f85ff8bfca6.tar.gz nova-2e75026ef11dfac37f1449a54c0d6f85ff8bfca6.tar.xz nova-2e75026ef11dfac37f1449a54c0d6f85ff8bfca6.zip |
Merged trunk
Diffstat (limited to 'nova/utils.py')
-rw-r--r-- | nova/utils.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/nova/utils.py b/nova/utils.py index 5f5225289..8d7ff1f64 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -152,6 +152,42 @@ def execute(cmd, process_input=None, addl_env=None, check_exit_code=True): return result +def ssh_execute(ssh, cmd, process_input=None, + addl_env=None, check_exit_code=True): + LOG.debug(_("Running cmd (SSH): %s"), cmd) + if addl_env: + raise exception.Error("Environment not supported over SSH") + + if process_input: + # This is (probably) fixable if we need it... + raise exception.Error("process_input not supported over SSH") + + stdin_stream, stdout_stream, stderr_stream = ssh.exec_command(cmd) + channel = stdout_stream.channel + + #stdin.write('process_input would go here') + #stdin.flush() + + # NOTE(justinsb): This seems suspicious... + # ...other SSH clients have buffering issues with this approach + stdout = stdout_stream.read() + stderr = stderr_stream.read() + stdin_stream.close() + + exit_status = channel.recv_exit_status() + + # exit_status == -1 if no exit code was returned + if exit_status != -1: + LOG.debug(_("Result was %s") % exit_status) + if check_exit_code and exit_status != 0: + raise exception.ProcessExecutionError(exit_code=exit_status, + stdout=stdout, + stderr=stderr, + cmd=cmd) + + return (stdout, stderr) + + def abspath(s): return os.path.join(os.path.dirname(__file__), s) |