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.
@@ -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: