コード例 #1
0
ファイル: __init__.py プロジェクト: krig/parallax
def copy(hosts, src, dst, opts=Options()):
    """
    Copies from the local node to a set of remote hosts
    hosts: [(host, port, user)...]
    src: local path
    dst: remote path
    opts: CopyOptions (optional)
    Returns {host: (rc, stdout, stdin) | Error}
    """
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(limit=opts.limit,
                      timeout=opts.timeout,
                      askpass=opts.askpass,
                      outdir=opts.outdir,
                      errdir=opts.errdir,
                      callbacks=_CopyOutputBuilder())
    for host, port, user in _expand_host_port_user(hosts):
        cmd = _build_copy_cmd(host, port, user, src, dst, opts)
        t = Task(host, port, user, cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()
    except FatalError as err:
        raise IOError(str(err))
コード例 #2
0
ファイル: __init__.py プロジェクト: krig/parallax
def call(hosts, cmdline, opts=Options()):
    """
    Executes the given command on a set of hosts, collecting the output
    Returns {host: (rc, stdout, stdin) | Error}
    """
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(limit=opts.limit,
                      timeout=opts.timeout,
                      askpass=opts.askpass,
                      outdir=opts.outdir,
                      errdir=opts.errdir,
                      callbacks=_CallOutputBuilder())
    for host, port, user in _expand_host_port_user(hosts):
        cmd = _build_call_cmd(host, port, user, cmdline,
                              options=opts.ssh_options,
                              extra=opts.ssh_extra)
        t = Task(host, port, user, cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()
    except FatalError as err:
        raise IOError(str(err))
コード例 #3
0
ファイル: crm_pssh.py プロジェクト: redfoxfox/crmsh
def do_pssh(l, opts):
    '''
    Adapted from psshlib. Perform command across list of hosts.
    l = [(host, command), ...]
    '''
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(opts)
    user = ""
    port = ""
    hosts = []
    for host, cmdline in l:
        cmd = [
            'ssh', host, '-o', 'PasswordAuthentication=no', '-o',
            'SendEnv=PARALLAX_NODENUM', '-o', 'StrictHostKeyChecking=no'
        ]
        if hasattr(opts, 'options'):
            for opt in opts.options:
                cmd += ['-o', opt]
        if user:
            cmd += ['-l', user]
        if port:
            cmd += ['-p', port]
        if os.path.exists(SSH_KEY_CRMSH):
            cmd += ['-i', SSH_KEY_CRMSH]
        if hasattr(opts, 'extra'):
            cmd.extend(opts.extra)
        if cmdline:
            cmd.append(cmdline)
        hosts.append(host)
        t = Task(host,
                 port,
                 user,
                 cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()  # returns a list of exit codes
    except FatalError:
        common_err("SSH to nodes failed")
        show_output(opts.errdir, hosts, "stderr")
        return False
コード例 #4
0
ファイル: crm_pssh.py プロジェクト: lge/crmsh
def do_pssh(l, opts):
    '''
    Adapted from psshlib. Perform command across list of hosts.
    l = [(host, command), ...]
    '''
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(opts)
    user = ""
    port = ""
    hosts = []
    for host, cmdline in l:
        cmd = ['ssh', host,
               '-o', 'PasswordAuthentication=no',
               '-o', 'SendEnv=PSSH_NODENUM',
               '-o', 'StrictHostKeyChecking=no']
        if hasattr(opts, 'options'):
            for opt in opts.options:
                cmd += ['-o', opt]
        if user:
            cmd += ['-l', user]
        if port:
            cmd += ['-p', port]
        if hasattr(opts, 'extra'):
            cmd.extend(opts.extra)
        if cmdline:
            cmd.append(cmdline)
        hosts.append(host)
        t = Task(host, port, user, cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()  # returns a list of exit codes
    except FatalError:
        common_err("pssh to nodes failed")
        show_output(opts.errdir, hosts, "stderr")
        return False
コード例 #5
0
def slurp(hosts, src, dst, opts=Options()):
    """
    Copies from the remote node to the local node
    hosts: [(host, port, user)...]
    src: remote path
    dst: local path
    opts: CopyOptions (optional)
    Returns {host: (rc, stdout, stdin, localpath) | Error}
    """
    if os.path.isabs(dst):
        raise ValueError("slurp: Destination must be a relative path")
    localdirs = _slurp_make_local_dirs(hosts, dst, opts)
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(limit=opts.limit,
                      timeout=opts.timeout,
                      askpass=opts.askpass,
                      outdir=opts.outdir,
                      errdir=opts.errdir,
                      callbacks=_SlurpOutputBuilder(localdirs))
    for host, port, user in _expand_host_port_user(hosts):
        localpath = localdirs[host]
        cmd = _build_slurp_cmd(host, port, user, src, localpath, opts)
        t = Task(host,
                 port,
                 user,
                 cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()
    except FatalError as err:
        raise IOError(str(err))
コード例 #6
0
def call(hosts, cmdline, opts=Options()):
    """
    Executes the given command on a set of hosts, collecting the output
    Returns {host: (rc, stdout, stdin) | Error}
    """
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(limit=opts.limit,
                      timeout=opts.timeout,
                      askpass=opts.askpass,
                      outdir=opts.outdir,
                      errdir=opts.errdir,
                      callbacks=_CallOutputBuilder())
    for host, port, user in _expand_host_port_user(hosts):
        cmd = _build_call_cmd(host,
                              port,
                              user,
                              cmdline,
                              options=opts.ssh_options,
                              extra=opts.ssh_extra)
        t = Task(host,
                 port,
                 user,
                 cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()
    except FatalError as err:
        raise IOError(str(err))
コード例 #7
0
ファイル: __init__.py プロジェクト: krig/parallax
def slurp(hosts, src, dst, opts=Options()):
    """
    Copies from the remote node to the local node
    hosts: [(host, port, user)...]
    src: remote path
    dst: local path
    opts: CopyOptions (optional)
    Returns {host: (rc, stdout, stdin, localpath) | Error}
    """
    if os.path.isabs(dst):
        raise ValueError("slurp: Destination must be a relative path")
    localdirs = _slurp_make_local_dirs(hosts, dst, opts)
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(limit=opts.limit,
                      timeout=opts.timeout,
                      askpass=opts.askpass,
                      outdir=opts.outdir,
                      errdir=opts.errdir,
                      callbacks=_SlurpOutputBuilder(localdirs))
    for host, port, user in _expand_host_port_user(hosts):
        localpath = localdirs[host]
        cmd = _build_slurp_cmd(host, port, user, src, localpath, opts)
        t = Task(host, port, user, cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()
    except FatalError as err:
        raise IOError(str(err))
コード例 #8
0
def copy(hosts, src, dst, opts=Options()):
    """
    Copies from the local node to a set of remote hosts
    hosts: [(host, port, user)...]
    src: local path
    dst: remote path
    opts: CopyOptions (optional)
    Returns {host: (rc, stdout, stdin) | Error}
    """
    if opts.outdir and not os.path.exists(opts.outdir):
        os.makedirs(opts.outdir)
    if opts.errdir and not os.path.exists(opts.errdir):
        os.makedirs(opts.errdir)
    manager = Manager(limit=opts.limit,
                      timeout=opts.timeout,
                      askpass=opts.askpass,
                      outdir=opts.outdir,
                      errdir=opts.errdir,
                      callbacks=_CopyOutputBuilder())
    for host, port, user in _expand_host_port_user(hosts):
        cmd = _build_copy_cmd(host, port, user, src, dst, opts)
        t = Task(host,
                 port,
                 user,
                 cmd,
                 stdin=opts.input_stream,
                 verbose=opts.verbose,
                 quiet=opts.quiet,
                 print_out=opts.print_out,
                 inline=opts.inline,
                 inline_stdout=opts.inline_stdout,
                 default_user=opts.default_user)
        manager.add_task(t)
    try:
        return manager.run()
    except FatalError as err:
        raise IOError(str(err))