# Description rcmd (remote command) is a command line utility written in Ruby for executing the same command on multiple systems through ssh. This is done by assigning a host to a thread and creating the ssh sessions in those threads. ## Features - Command line switch for setting number of threads to be used at a time. (Default is 4) - A comma seperated list of hosts piped from another command can be used as the node list. - Username can be specified. (Default is root. Requires valid ssh-key in ~/.ssh) - Output shows which host the output is from - Stdout can be suppressed, only allowing for stderr to be shown ## Installation rcmd is available as a gem and kan be installed with `gem install rcmd` # Usage Examples ## Help Screen ```bash Usage: rcmd [options] -u, --username username Username for SSH connections -n, --nodes x,y,z Comma seperated list of nodes. use '-' for a space seperated list piped from another command -r, --regexp regex Use Regex to build host list (ruby regexp) -t, --threads threads Number of threads to run -c, --command Quoted string containing the command to be run -q, --quiet Suppress stdout of commands. stderr will still be displayed -v, --version Print what version of the command is in use -D, --debug Print debug information ``` ## Specifying nodes manually Specifying a comma seperated list of hosts and timing the total execution time. ```bash daibhidh@darkstar:~/$ time rcmd -n node1,node2,node3,node4 -c 'cat /etc/redhat-release' node2 :: Red Hat Enterprise Linux ComputeNode release 6.8 (Santiago) node1 :: Red Hat Enterprise Linux ComputeNode release 6.8 (Santiago) node4 :: Red Hat Enterprise Linux ComputeNode release 6.9 (Santiago) node3 :: Red Hat Enterprise Linux ComputeNode release 6.9 (Santiago) real 0m2.749s user 0m0.272s sys 0m0.050s ``` ## Piping list of nodes Using the hammer cli to get a list of hosts from a RedHat Satellite and providing it to rcmd as the node list. ```bash daibhidh@darkstar:~/$ hammer --output base host list --organization org | awk '/Name:/ {print $2}' | rcmd -n - -c 'cat /etc/redhat-release' node1.example.com :: Red Hat Enterprise Linux ComputeNode release 6.8 (Santiago) node3.example.com :: Red Hat Enterprise Linux ComputeNode release 6.9 (Santiago) node2.example.com :: Red Hat Enterprise Linux ComputeNode release 6.8 (Santiago) node4.example.com :: Red Hat Enterprise Linux ComputeNode release 6.9 (Santiago) ``` ## Using regex to build node list ```bash daibhidh@darkstar:~/$ rcmd -r 'node([1-9]|1[1-2])$' -c 'hostname -f' node2 :: node2.example.com node1 :: node1.example.com node4 :: node4.example.com node3 :: node3.example.com node5 :: node5.example.com node6 :: node6.example.com node8 :: node8.example.com node7 :: node7.example.com node11 :: CONNECT ERROR :: Unable to connect to host! node9 :: node9.example.com node12 :: node12.example.com ``` # Development If you are wanting to modify the code by all means do so. If you clone this repository you can then run `bundle install` to install the dependencies needed. Tests are performed with *rspec* and can be run with *rake*. Available Rake tasks are: ```bash rake build # Build rcmd-1.5.5.gem into the pkg directory rake clean # Remove any temporary products rake clobber # Remove any generated files rake clobber_rdoc # Remove RDoc HTML files rake console # Open an IRB console with this gem loaded rake install # Build and install rcmd-1.5.5.gem into system gems rake install:local # Build and install rcmd-1.5.5.gem into system gems without network access rake rdoc # Build RDoc HTML files rake reinstall # Remove, build, and install gem rake release[remote] # Create tag v1.5.5 and build and push rcmd-1.5.5.gem to Rubygems rake rerdoc # Rebuild RDoc HTML files rake spec # Run RSpec code examples ```