cluster_bomb 0.2.6 → 0.3.0
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.
- data/lib/cluster_bomb/bomb.rb +1 -1
- data/lib/cluster_bomb/bomb_shell.rb +1 -1
- data/lib/cluster_bomb/cluster.rb +7 -4
- data/lib/cluster_bomb/dispatcher.rb +11 -10
- metadata +72 -71
data/lib/cluster_bomb/bomb.rb
CHANGED
@@ -142,7 +142,7 @@ module ClusterBomb
|
|
142
142
|
if @configuration.has_ssh_options? user
|
143
143
|
ssh_options = @configuration.ssh_options(user)
|
144
144
|
else
|
145
|
-
ssh_options={}
|
145
|
+
ssh_options={} # Use ssh agent or config file
|
146
146
|
end
|
147
147
|
@username = ssh_options[:user] || user
|
148
148
|
@cluster.credentials(@username, ssh_options)
|
data/lib/cluster_bomb/cluster.rb
CHANGED
@@ -2,6 +2,7 @@ require 'net/ssh'
|
|
2
2
|
require 'net/scp'
|
3
3
|
require 'net/sftp'
|
4
4
|
require 'cluster_bomb/logging'
|
5
|
+
require 'shellwords'
|
5
6
|
|
6
7
|
# Represents a cluster of hosts over which to operate
|
7
8
|
module ClusterBomb
|
@@ -109,12 +110,14 @@ module ClusterBomb
|
|
109
110
|
elsif !host.connect_failed
|
110
111
|
Thread.new {
|
111
112
|
begin
|
112
|
-
#puts "Connecting #{host.name}"
|
113
|
-
|
113
|
+
#puts "Connecting #{host.name}"
|
114
|
+
name, port = host.name.split(':')
|
115
|
+
port ||= "22"
|
116
|
+
c = Net::SSH.start(name, @user_name, @ssh_options.merge({:port=>port.to_i}))
|
114
117
|
@connection_cache[host.name] = c
|
115
118
|
@connection_mutex.synchronize { @connections << {:connection=>c, :host=>host} }
|
116
119
|
host.connected=true
|
117
|
-
#puts "Connected #{host.name}"
|
120
|
+
#puts "Connected #{host.name}"
|
118
121
|
rescue Exception => e
|
119
122
|
host.connect_failed = true
|
120
123
|
host.connected=false
|
@@ -183,7 +186,7 @@ module ClusterBomb
|
|
183
186
|
|
184
187
|
# Build sudo-fied command. Really only works for bash afaik
|
185
188
|
def mksudo(command)
|
186
|
-
"sudo
|
189
|
+
"sudo /bin/bash -c #{Shellwords.escape(command)}"
|
187
190
|
end
|
188
191
|
|
189
192
|
def run(command, options={}, &task)
|
@@ -19,9 +19,9 @@ module ClusterBomb
|
|
19
19
|
COMMAND_AUTOCOMPLETE = COMMANDS.collect{|c|c[:name]} + ['with','use']
|
20
20
|
def init_autocomplete
|
21
21
|
Readline.completion_proc=proc {|s| self.dispatcher_completion_proc(s)}
|
22
|
-
Readline.completer_word_break_characters = 7.chr
|
22
|
+
Readline.completer_word_break_characters = 7.chr
|
23
23
|
Readline.completion_case_fold = true
|
24
|
-
Readline.completion_append_character = ''
|
24
|
+
Readline.completion_append_character = ''
|
25
25
|
end
|
26
26
|
def process_cmd(line)
|
27
27
|
# cmd = cmd.strip.downcase
|
@@ -44,10 +44,11 @@ module ClusterBomb
|
|
44
44
|
puts "Available commands:"
|
45
45
|
COMMANDS.each do |cr|
|
46
46
|
puts " #{cr[:name]} - #{cr[:description]}"
|
47
|
-
end
|
47
|
+
end
|
48
48
|
end
|
49
49
|
return true
|
50
50
|
end
|
51
|
+
|
51
52
|
def dispatcher_completion_proc(s)
|
52
53
|
# No line buffer for mac, so no way to get command context
|
53
54
|
# Very lame with libedit. Will not return candidates, and
|
@@ -61,7 +62,7 @@ module ClusterBomb
|
|
61
62
|
tokens << ''
|
62
63
|
end
|
63
64
|
# Initial command only
|
64
|
-
if tokens.length
|
65
|
+
if tokens.length <= 1 && tokens[0] != '\\'
|
65
66
|
ret = COMMAND_AUTOCOMPLETE.grep(/^#{s}/)
|
66
67
|
else
|
67
68
|
if tokens[0]=~/:?with.*/
|
@@ -78,16 +79,16 @@ module ClusterBomb
|
|
78
79
|
ret = shawtie_names.grep(/#{tokens[0][1..-1]}/)
|
79
80
|
ret = ret.collect {|r|"\\#{r}"}
|
80
81
|
end
|
81
|
-
|
82
|
-
end
|
82
|
+
|
83
|
+
end
|
83
84
|
ret
|
84
85
|
end
|
85
|
-
|
86
|
+
|
86
87
|
def dir_completion_proc(tokens)
|
87
88
|
choices=dir_list(tokens[1])
|
88
89
|
secondary_completion_proc(tokens,choices)
|
89
90
|
end
|
90
|
-
|
91
|
+
|
91
92
|
def dir_list(token)
|
92
93
|
m = token.match(/(.*\/).*$/)
|
93
94
|
if m && m[1]
|
@@ -97,10 +98,10 @@ module ClusterBomb
|
|
97
98
|
end
|
98
99
|
ret.collect {|p| (File.directory? p) ? "#{p}/" : "#{p}"}
|
99
100
|
end
|
100
|
-
|
101
|
+
|
101
102
|
def secondary_completion_proc(tokens, choices)
|
102
103
|
if tokens[1]==''
|
103
|
-
choices
|
104
|
+
choices.collect {|c| "#{tokens[0]} #{c}"}
|
104
105
|
else
|
105
106
|
tokens[1] = tokens[1].gsub(/\./,'\.')
|
106
107
|
choices.grep(/^#{tokens[1]}/).collect {|c| "#{tokens[0]} #{c}"}
|
metadata
CHANGED
@@ -1,76 +1,87 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cluster_bomb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 2
|
8
|
-
- 6
|
9
|
-
version: 0.2.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- hayzeus
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-11-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: net-ssh
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 2
|
30
|
-
- 0
|
31
|
-
- 0
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
32
21
|
version: 2.0.0
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: net-scp
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: net-scp
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 1
|
45
|
-
- 0
|
46
|
-
- 0
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
47
37
|
version: 1.0.0
|
48
38
|
type: :runtime
|
49
|
-
|
50
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
51
47
|
name: net-sftp
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.0.0
|
54
|
+
type: :runtime
|
52
55
|
prerelease: false
|
53
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
57
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
segments:
|
59
|
-
- 2
|
60
|
-
- 0
|
61
|
-
- 0
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
62
61
|
version: 2.0.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rb-readline
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.5'
|
63
70
|
type: :runtime
|
64
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.5'
|
65
78
|
description: Capistrano-like multi-host shell and task execution
|
66
79
|
email: mikey@swampgas.com
|
67
|
-
executables:
|
80
|
+
executables:
|
68
81
|
- cb
|
69
82
|
extensions: []
|
70
|
-
|
71
83
|
extra_rdoc_files: []
|
72
|
-
|
73
|
-
files:
|
84
|
+
files:
|
74
85
|
- bin/cb
|
75
86
|
- lib/cluster_bomb/actest.rb
|
76
87
|
- lib/cluster_bomb/bomb.rb
|
@@ -84,39 +95,29 @@ files:
|
|
84
95
|
- lib/cluster_bomb/roles.rb
|
85
96
|
- lib/cluster_bomb/shawties.rb
|
86
97
|
- lib/cluster_bomb/stdtasks.rb
|
87
|
-
has_rdoc: true
|
88
98
|
homepage: http://www.swampgas.com
|
89
99
|
licenses: []
|
90
|
-
|
91
100
|
post_install_message:
|
92
101
|
rdoc_options: []
|
93
|
-
|
94
|
-
require_paths:
|
102
|
+
require_paths:
|
95
103
|
- lib
|
96
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
105
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
segments:
|
102
|
-
- 1
|
103
|
-
- 8
|
104
|
-
- 6
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
105
109
|
version: 1.8.6
|
106
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
111
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
|
112
|
-
- 0
|
113
|
-
version: "0"
|
112
|
+
requirements:
|
113
|
+
- - ! '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
114
116
|
requirements: []
|
115
|
-
|
116
117
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
118
|
+
rubygems_version: 1.8.23
|
118
119
|
signing_key:
|
119
120
|
specification_version: 3
|
120
121
|
summary: Do stuff across clusters
|
121
122
|
test_files: []
|
122
|
-
|
123
|
+
has_rdoc:
|