cast-ssh 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/cast +2 -1
  3. data/lib/cast.rb +14 -6
  4. metadata +22 -34
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 37009c124655311f2e1243b095350dd8e288703d
4
+ data.tar.gz: a4d19f749ba99a3e0e7623553e7085fe63033791
5
+ SHA512:
6
+ metadata.gz: 9a3d926ad83c436dae5f8c68ae14e53bddedf7556784309faa4b364b9406da455c68d609a12673330a9f8b885cb170e858f0ba10e5499794e8eec0cb595bb0c4
7
+ data.tar.gz: a0223e63aafcbfcbf34c69a96dbd5187571304901a5d4775442957ccaa5a2862d2008475b6edc20cd024c16c14ef89de7693142c5cd76ed481100c7bf24edc74
data/bin/cast CHANGED
@@ -35,6 +35,7 @@ EOS
35
35
  opt :clusters, 'Print out only groupnames without executing command', :short => 'c'
36
36
  opt :ssh, 'SSH command to run', :default => 'ssh'
37
37
  opt :strict, 'Return a non-zero exit code if ANY of the ssh commands exit non-zero', :short => 't'
38
+ opt :controlfolder, 'Path to look in for any ControlMaster tunnels', :short => 'o', :default => '~/.ssh/'
38
39
  end
39
40
 
40
41
  opt = Trollop::with_standard_exception_handling p do
@@ -58,7 +59,7 @@ end
58
59
  cmd = ARGV[1..-1].join(' ')
59
60
  hosts = Cast::expand_groups ARGV[0].split(','), groups
60
61
 
61
- result = Cast::run hosts, cmd, opt[:serial], opt[:delay], opt[:ssh], opt[:strict]
62
+ result = Cast::run hosts, cmd, opt[:serial], opt[:delay], opt[:ssh], opt[:strict], opt[:controlfolder]
62
63
  if opt[:strict] and not result
63
64
  exit 1
64
65
  end
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.8'
11
+ VERSION = '0.1.9'
12
12
  DEFAULTGROUPS = '~/.cast.yml'
13
13
 
14
14
  @@mux = Mutex.new
@@ -51,11 +51,14 @@ module Cast
51
51
  return hosts.uniq
52
52
  end
53
53
 
54
- def self.run hosts, cmd, serial = false, delay = nil, ssh = 'ssh', strict = false
54
+ def self.run hosts, cmd, serial = false, delay = nil, ssh = 'ssh', strict = false, controlfolder = nil
55
+ if controlfolder != nil
56
+ controlfolder = File.expand_path(controlfolder)
57
+ end
55
58
  success = true
56
59
  if serial or delay
57
60
  hosts.each_with_index do |host, i|
58
- exitCode = remote host, cmd, ssh
61
+ exitCode = remote host, cmd, ssh, controlfolder
59
62
  if strict
60
63
  success &&= (exitCode == 0)
61
64
  end
@@ -65,7 +68,7 @@ module Cast
65
68
  end
66
69
  end
67
70
  else
68
- exitCodes = hosts.pmap { |host| remote host, cmd, ssh }
71
+ exitCodes = hosts.pmap { |host| remote host, cmd, ssh, controlfolder }
69
72
  if strict
70
73
  success = (exitCodes.reduce(:+) == 0)
71
74
  end
@@ -73,8 +76,13 @@ module Cast
73
76
  return success
74
77
  end
75
78
 
76
- def self.remote host, cmd, ssh = 'ssh'
77
- fullcmd = "#{ssh} #{host} '#{cmd}'"
79
+ def self.remote host, cmd, ssh = 'ssh', controlfolder = nil
80
+ controlpath = ""
81
+ if controlfolder != nil and File.exists?("#{controlfolder}/#{host}-controlmaster")
82
+ controlpath = "-o 'ControlPath=#{controlfolder}/#{host}-controlmaster'"
83
+ end
84
+
85
+ fullcmd = "#{ssh} #{controlpath} #{host} '#{cmd}'"
78
86
  log "running #{fullcmd}"
79
87
  return local fullcmd, {:prefix => host}
80
88
  end
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cast-ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
5
- prerelease:
4
+ version: 0.1.9
6
5
  platform: ruby
7
6
  authors:
8
7
  - Peter Bakkum
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-09-28 00:00:00.000000000 Z
11
+ date: 2015-10-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mocha
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: autotest-standalone
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: peach
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: trollop
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: Execute remote commands via ssh on groups of machines
@@ -101,42 +90,41 @@ extra_rdoc_files:
101
90
  - LICENSE.md
102
91
  - README.md
103
92
  files:
93
+ - ".rspec"
94
+ - ".travis.yml"
95
+ - Gemfile
104
96
  - LICENSE.md
105
97
  - README.md
98
+ - bin/cast
106
99
  - cast.gemspec
107
- - Gemfile
108
- - .rspec
109
- - .travis.yml
110
100
  - lib/cast.rb
111
- - bin/cast
112
101
  - spec/lib/cast_spec.rb
113
102
  - spec/spec_helper.rb
114
103
  - spec/test.yml
115
104
  homepage: http://github.com/bakks/cast
116
105
  licenses:
117
106
  - MIT
107
+ metadata: {}
118
108
  post_install_message:
119
109
  rdoc_options:
120
- - --charset=UTF-8
110
+ - "--charset=UTF-8"
121
111
  require_paths:
122
112
  - lib
123
113
  required_ruby_version: !ruby/object:Gem::Requirement
124
- none: false
125
114
  requirements:
126
- - - ! '>='
115
+ - - ">="
127
116
  - !ruby/object:Gem::Version
128
117
  version: '0'
129
118
  required_rubygems_version: !ruby/object:Gem::Requirement
130
- none: false
131
119
  requirements:
132
- - - ! '>='
120
+ - - ">="
133
121
  - !ruby/object:Gem::Version
134
122
  version: 1.3.6
135
123
  requirements: []
136
124
  rubyforge_project:
137
- rubygems_version: 1.8.23.2
125
+ rubygems_version: 2.2.2
138
126
  signing_key:
139
- specification_version: 3
127
+ specification_version: 4
140
128
  summary: Execute remote commands via ssh on groups of machines
141
129
  test_files:
142
130
  - spec/lib/cast_spec.rb