cluster_bomb 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)
@@ -1,4 +1,4 @@
1
- require 'readline'
1
+ require 'rb-readline'
2
2
  require 'cluster_bomb/history.rb'
3
3
  require 'cluster_bomb/logging.rb'
4
4
  require 'cluster_bomb/dispatcher.rb'
@@ -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
- c = Net::SSH.start(host.name, @user_name, @ssh_options)
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 sh -c '(#{command})'"
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 <= 1 && tokens[0] != '\\'
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
- prerelease: false
5
- segments:
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
- date: 2011-11-10 00:00:00 -06:00
18
- default_executable: cb
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- version_requirements: *id003
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
- segments:
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.3.7.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: