App-nrun

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

nrun
====

nrun will run a single command or script on a multiple of target servers
synchronously.  ncopy will copy a file or directory to multiple target servers.

the underlying remote access mechanism is exchangeable. as of now, ssh, nsh, rsh
and local execution modes are implemented.

the return code and all command output will be logged.

Copyright 2013 Timo Benk <benk@b1-systems.de>

nrun is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

nrun is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.  See the GNU General Public License for more details.

installation
============

installation is straight forward:

# perl Makefile.PL
# make install

if desired it is possible to change the installation prefix using the
parameter DESTDIR:

# perl Makefile.PL DESTDIR=~/applications

usage
=====

usage: nrun -t HOST1[,HOST2,...] -- COMMAND
--copy                      copy command to target host before execution.
--log-directory DIR         base directory for the log files.
--parallel,-p MAX           number of parallel connections (defaults to 5).
--reverse,-r                reverse copy the source file from all target hosts.
--target,-t HOST1,HOST2     comma separated list of target hosts.
--timeout SEC               timeout for each command execution (defaults to 60).
--version,-v                print the version string and exit.
--mode,-m MODE              remote execution mode:
                            generic - generic mode
                            local - execute the script locally, set TARGET_HOST on each execution
                            nsh - nsh based remote execution
                            rsh - rsh based remote execution
                          * ssh - ssh based remote execution
--filter,-f FILTER          output filter to be applied:
                            async - dump the command output asynchroniously
                            null - do nothing
                            raw - dump the raw data received from the worker module
                            result - dump only the exit code
                          * sync - dump the command output synchroniously
--logger,-l LOGGER1,LOGGER2 logger to be used:
                            null - do nothing
                          * output - log the command output
                          * raw - log the raw data received from the worker module
                          * result - log only the exit code
--check,-c CHECK1,CHECK2    checks to be applied to each host:
                          * ns - check if hostname is resolvable
                            null - do nothing
                          * ping - check if host answers to ping
                            rscd - check if rscd agent answers

usage: ncopy -t HOST1[,HOST2,...] -- SOURCE TARGET
--log-directory DIR         base directory for the log files.
--parallel,-p MAX           number of parallel connections (defaults to 5).
--target,-t HOST1,HOST2     comma separated list of target hosts.
--timeout SEC               timeout for each command execution (defaults to 60).
--version,-v                print the version string and exit.
--mode,-m MODE              remote execution mode:
                            generic - generic mode
                            local - execute the script locally, set TARGET_HOST on each execution
                            nsh - nsh based remote execution
                            rsh - rsh based remote execution
                          * ssh - ssh based remote execution
--filter,-f FILTER          output filter to be applied:
                            async - dump the command output asynchroniously
                            null - do nothing
                            raw - dump the raw data received from the worker module
                          * result - dump only the exit code
                            sync - dump the command output synchroniously
--logger,-l LOGGER1,LOGGER2 logger to be used:
                            null - do nothing
                          * output - log the command output
                          * raw - log the raw data received from the worker module
                          * result - log only the exit code
--check,-c CHECK1,CHECK2    checks to be applied to each host:
                          * ns - check if hostname is resolvable
                            null - do nothing
                          * ping - check if host answers to ping
                            rscd - check if rscd agent answers

examples
========

1. run the command "ls" on host1 and host2.

$ nrun --target host1,host2 -- ls

2. run the command "ls -al" on host1, host2 and all hosts in the file HOSTS.LST.

$ nrun --target HOSTS.LST,host1,host2 -- ls -al

3. run the command "ls" on all hosts in the file HOSTS.LST - mode "ssh".

$ nrun --target HOSTS.LST --mode ssh -- ls 

4. copy the script bin/script.sh to each target hosts and execute it.

$ nrun --target HOSTS.LST --copy -- bin/script.sh

5. execute the local script test.sh for each target host

$ nrun --target HOSTS.LST --mode local -- ./test.sh

6. copy file test.tar to all hosts in the file HOSTS.LST

$ ncopy --target HOSTS.LST -- test.tar /tmp 

7. reverse copy file /etc/passwd from all hosts in the file HOSTS.LST

$ ncopy --target HOSTS.LST --reverse -- /etc/passwd /tmp 

configuration
=============

special configuration options for the different modes and additional all
commandline options can be given in a configuration file. the following three
places will be searched for configuration files (values in the last
configuration file will overwrite values in the first configuration file).
indentation does matter (YAML syntax).

- $FindBin::Bin/../etc/nrunrc
- /etc/nrunrc
- $HOME/.nrunrc

--<snip>--
---
# mode ssh options
ssh_copy: >
    /usr/bin/scp

README  view on Meta::CPAN

an example that resembles the mode ssh would look the following way:

--<snip>--
generic_copy: >
    /usr/bin/scp
    -o User=root
    -o PreferredAuthentications=hostbased,publickey 
    -o StrictHostKeyChecking=no 
    -o UserKnownHostsFile=/dev/null
    -o LogLevel=FATAL 
    SOURCE HOSTNAME:TARGET 

generic_rcopy: >
    /usr/bin/scp
    -o User=root
    -o PreferredAuthentications=hostbased,publickey 
    -o StrictHostKeyChecking=no 
    -o UserKnownHostsFile=/dev/null
    -o LogLevel=FATAL 
    HOSTNAME:SOURCE TARGET 

generic_exec: >
    /usr/bin/ssh
    -o User=root
    -o PreferredAuthentications=hostbased,publickey
    -o StrictHostKeyChecking=no
    -o UserKnownHostsFile=/dev/null
    -o LogLevel=FATAL
    HOSTNAME COMMAND ARGUMENTS

generic_delete: >
    /usr/bin/ssh
    -o User=root
    -o PreferredAuthentications=hostbased,publickey
    -o StrictHostKeyChecking=no
    -o UserKnownHostsFile=/dev/null
    -o LogLevel=FATAL
    HOSTNAME rm -f "FILE"

--<snap>--

filters
=======

a filter reads the raw output generated by the worker processes and prints this
output in a specific format.

filter raw
==========

this filter will just dump the output as it is provided by the worker process. no
formatting will be done.

format:

        HOSTNAME;[stdout|stderr];TSTAMP;PID;PID(CHILD);[debug|error|exit|output|end];"OUTPUT"

filter async
============

this filter dumps the worker process output unsynchronized in the following format. unsynchronised
means, that output lines from the different worker processes are printed at the same time they are
generated.

format:

        HOSTNAME: OUTPUT

filter sync
============

this filter dumps the worker process output synchronised in the following format. synchronized
means, that the complete output for a single hosts will be dumped at once when the worker proces
has finished execution.

format:

        HOSTNAME: OUTPUT

filter result
=============

this filter will only print the exit codes for the worker processes.

format:

        HOSTNAME: exit code CODE


LOGGERS
=======

a logger reads the raw output generated by the worker processes and logs this
output in a specific format.

logger output
=============

this logger creates a logfile in the logging directory called output.log which
contains the same data that the filter sync produces.

logger result
=============

this logger creates a logfile in the logging directory called result.log which
contains the same data that the filter result produces.

logger raw
==========

this logger creates a logfile in the logging directory called raw.log which contains the same
data that the filter raw produces.

checks
======

a check does a specific check for each hostname. if the check fails, the hostname
that failed will be removed from the target list and an error message will be
printed. multiple checks may be given at the command line.

check ping
==========

checks that the host is pingable.

check ns
========

checks that the hostname is resolvable to an ip address.

check rscd
==========



( run in 0.672 second using v1.01-cache-2.11-cpan-437f7b0c052 )