cast-ssh 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.md +6 -4
  2. data/bin/cast +5 -1
  3. data/lib/cast.rb +13 -5
  4. metadata +2 -2
data/README.md CHANGED
@@ -24,12 +24,16 @@ group2:
24
24
  - host5
25
25
  ```
26
26
 
27
- Run commands in your shell:
27
+ Run commands in your shell using this pattern:
28
+ ```bash
29
+ cast [<flags>] <target> <command>
30
+ ```
28
31
 
32
+ For example:
29
33
  ```bash
30
34
  cast group1 echo test
31
35
  cast group1,group2 sudo whoami
32
- cast -s group1,host4 df -h
36
+ cast -s group1,host4 "df -h"
33
37
  ```
34
38
 
35
39
  The output from the second command will look something like this:
@@ -40,11 +44,9 @@ The output from the second command will look something like this:
40
44
  [cast] running ssh host2 'sudo whoami'
41
45
  [cast] running ssh host3 'sudo whoami'
42
46
  [cast] running ssh host4 'sudo whoami'
43
- [cast] running ssh host5 'sudo whoami'
44
47
  [host3] root
45
48
  [host1] root
46
49
  [host2] root
47
- [host5] root
48
50
  [host4] root
49
51
  ```
50
52
 
data/bin/cast CHANGED
@@ -34,6 +34,7 @@ EOS
34
34
  opt :list, 'Print out contents of groupfile without executing command', :short => 'l'
35
35
  opt :clusters, 'Print out only groupnames without executing command', :short => 'c'
36
36
  opt :ssh, 'SSH command to run', :default => 'ssh'
37
+ opt :strict, 'Return a non-zero exit code if ANY of the ssh commands exit non-zero', :short => 't'
37
38
  end
38
39
 
39
40
  opt = Trollop::with_standard_exception_handling p do
@@ -57,5 +58,8 @@ end
57
58
  cmd = ARGV[1..-1].join(' ')
58
59
  hosts = Cast::expand_groups ARGV[0].split(','), groups
59
60
 
60
- Cast::run hosts, cmd, opt[:serial], opt[:delay], opt[:ssh]
61
+ result = Cast::run hosts, cmd, opt[:serial], opt[:delay], opt[:ssh], opt[:strict]
62
+ if opt[:strict] and not result
63
+ exit 1
64
+ end
61
65
 
data/lib/cast.rb CHANGED
@@ -8,7 +8,7 @@ STDOUT.sync = true
8
8
  STDERR.sync = true
9
9
 
10
10
  module Cast
11
- VERSION = '0.1.7'
11
+ VERSION = '0.1.8'
12
12
  DEFAULTGROUPS = '~/.cast.yml'
13
13
 
14
14
  @@mux = Mutex.new
@@ -51,24 +51,32 @@ module Cast
51
51
  return hosts.uniq
52
52
  end
53
53
 
54
- def self.run hosts, cmd, serial = false, delay = nil, ssh = 'ssh'
54
+ def self.run hosts, cmd, serial = false, delay = nil, ssh = 'ssh', strict = false
55
+ success = true
55
56
  if serial or delay
56
57
  hosts.each_with_index do |host, i|
57
- remote host, cmd, ssh
58
+ exitCode = remote host, cmd, ssh
59
+ if strict
60
+ success &&= (exitCode == 0)
61
+ end
58
62
  if delay and i < hosts.size - 1
59
63
  log "delay for #{delay} seconds"
60
64
  sleep delay
61
65
  end
62
66
  end
63
67
  else
64
- hosts.peach { |host| remote host, cmd, ssh }
68
+ exitCodes = hosts.pmap { |host| remote host, cmd, ssh }
69
+ if strict
70
+ success = (exitCodes.reduce(:+) == 0)
71
+ end
65
72
  end
73
+ return success
66
74
  end
67
75
 
68
76
  def self.remote host, cmd, ssh = 'ssh'
69
77
  fullcmd = "#{ssh} #{host} '#{cmd}'"
70
78
  log "running #{fullcmd}"
71
- local fullcmd, {:prefix => host}
79
+ return local fullcmd, {:prefix => host}
72
80
  end
73
81
 
74
82
  def self.local cmd, options = {}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cast-ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-08 00:00:00.000000000 Z
12
+ date: 2015-09-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mocha