raise exception.SSHInjectionThreat(command=cmd_list)
-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()
- stdout_stream.close()
- stderr_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)
- channel.close()
- return (stdout, stderr)
-
-
def create_channel(client, width, height):
"""Invoke an interactive shell session on server."""
channel = client.invoke_shell()
from cinder import exception
from cinder.openstack.common import excutils
from cinder.openstack.common import log as logging
+from cinder.openstack.common import processutils
from cinder import utils
from cinder.volume import driver
while attempts > 0:
attempts -= 1
try:
- return utils.ssh_execute(
+ return processutils.ssh_execute(
ssh,
command,
check_exit_code=check_exit_code)