solutious-rudy 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rudyfile +1 -1
- data/bin/rudy-ec2 +7 -8
- data/lib/annoy.rb +27 -3
- data/lib/rudy.rb +1 -1
- data/lib/rudy/aws/ec2/instance.rb +8 -1
- data/lib/rudy/cli/aws/ec2/groups.rb +0 -3
- data/lib/rudy/cli/aws/ec2/instances.rb +34 -3
- data/lib/rudy/cli/aws/ec2/keypairs.rb +1 -1
- data/lib/rudy/routines.rb +0 -2
- data/rudy.gemspec +1 -1
- metadata +1 -1
data/Rudyfile
CHANGED
data/bin/rudy-ec2
CHANGED
@@ -23,6 +23,8 @@ require 'drydock'
|
|
23
23
|
module RudyCLI_EC2
|
24
24
|
extend Drydock
|
25
25
|
|
26
|
+
debug :off
|
27
|
+
default :instances
|
26
28
|
|
27
29
|
# ----------------------------------- AMAZON EC2 COMMANDS --------
|
28
30
|
# ------------------------------------------------------------------
|
@@ -47,6 +49,8 @@ module RudyCLI_EC2
|
|
47
49
|
|
48
50
|
about "Amazon EC2 instance console output"
|
49
51
|
usage "rudy-ec2 console [-g group] [instance ID]"
|
52
|
+
usage "rudy-ec2 [-k path/2/privatekey] console [instance ID]"
|
53
|
+
usage "NOTE: Private key is required only for Windows instances"
|
50
54
|
option :g, :group, String, "A security group name"
|
51
55
|
argv :awsid
|
52
56
|
command :consoles => Rudy::CLI::AWS::EC2::Instances
|
@@ -54,8 +58,8 @@ module RudyCLI_EC2
|
|
54
58
|
command_alias :consoles, :c
|
55
59
|
|
56
60
|
about "Copy files to or from machines."
|
57
|
-
usage "rudy-ec2 copy [-p] [-r]
|
58
|
-
usage "rudy-ec2
|
61
|
+
usage "rudy-ec2 copy [-p] [-r] source target"
|
62
|
+
usage "rudy-ec2 [-u user] [-k path/2/privatekey] upload local-source target"
|
59
63
|
usage "rudy-ec2 download remote-source target"
|
60
64
|
usage "NOTE: Use quotes when using a tilda or asterisk in remote paths ('~/')."
|
61
65
|
usage "rudy-ec2 download '~/*' /tmp/"
|
@@ -207,12 +211,7 @@ module RudyCLI_EC2
|
|
207
211
|
command_alias :zones, :zone
|
208
212
|
command_alias :zones, :z
|
209
213
|
|
210
|
-
|
211
|
-
# -------------------------------- RUDY-EC2 MISCELLANEOUS --------
|
212
|
-
# ------------------------------------------------------------------
|
213
|
-
|
214
|
-
default :instances
|
215
|
-
debug :off
|
214
|
+
|
216
215
|
|
217
216
|
end
|
218
217
|
|
data/lib/annoy.rb
CHANGED
@@ -186,9 +186,12 @@ class Annoy
|
|
186
186
|
begin
|
187
187
|
success = Timeout::timeout(period || @@period) do
|
188
188
|
regexp &&= Regexp.new regexp
|
189
|
-
|
190
|
-
|
191
|
-
|
189
|
+
highline = HighLine.new
|
190
|
+
response = highline.ask(msg) { |q|
|
191
|
+
q.echo = '*' # Don't display response
|
192
|
+
q.overwrite = true # Erase the question afterwards
|
193
|
+
q.whitespace = :strip # Remove whitespace from the response
|
194
|
+
}
|
192
195
|
regexp.match(response)
|
193
196
|
end
|
194
197
|
rescue Timeout::Error => ex
|
@@ -197,6 +200,27 @@ class Annoy
|
|
197
200
|
end
|
198
201
|
end
|
199
202
|
|
203
|
+
|
204
|
+
def Annoy.timed_display(msg, writer, period=nil)
|
205
|
+
return true unless STDIN.tty? # Only ask a question if there's a human
|
206
|
+
if Annoy.skip?
|
207
|
+
#writer.puts msg
|
208
|
+
return true
|
209
|
+
end
|
210
|
+
begin
|
211
|
+
period ||= @@period
|
212
|
+
success = Timeout::timeout(period) do
|
213
|
+
writer.puts "Message will display for #{period} seconds"
|
214
|
+
writer.print msg
|
215
|
+
writer.flush if writer.respond_to?(:flush)
|
216
|
+
sleep period+1
|
217
|
+
end
|
218
|
+
rescue Timeout::Error => ex
|
219
|
+
writer.print "\r" << ' '*msg.size
|
220
|
+
end
|
221
|
+
|
222
|
+
true
|
223
|
+
end
|
200
224
|
|
201
225
|
private
|
202
226
|
def Annoy.get_response(writer=STDOUT)
|
data/lib/rudy.rb
CHANGED
@@ -30,7 +30,14 @@ module Rudy::AWS
|
|
30
30
|
|
31
31
|
def to_s(with_title=false)
|
32
32
|
lines = []
|
33
|
-
|
33
|
+
if @groups
|
34
|
+
gpstr = [@groups].flatten.compact.join(', ')
|
35
|
+
gpstr &&= "(#{gpstr})"
|
36
|
+
else
|
37
|
+
gpstr = ''
|
38
|
+
end
|
39
|
+
|
40
|
+
lines << "%s %s" % [liner_note, gpstr]
|
34
41
|
#if self.running?
|
35
42
|
# k, g = @keyname || 'no-keypair', self.groups.join(', ')
|
36
43
|
# lines << @@sformat % %w{zone size ami keyname groups} if with_title
|
@@ -14,12 +14,9 @@ module AWS; module EC2;
|
|
14
14
|
end
|
15
15
|
def create_groups
|
16
16
|
opts = check_options
|
17
|
-
puts "Creating #{@argv.name}"
|
18
|
-
|
19
17
|
execute_action {
|
20
18
|
@rgroups.create(@argv.name, @option.description, opts[:addresses], opts[:ports], opts[:protocols])
|
21
19
|
}
|
22
|
-
|
23
20
|
@rgroups.list(@argv.name) do |group|
|
24
21
|
puts @@global.verbose > 0 ? group.inspect : group.dump(@@global.format)
|
25
22
|
end
|
@@ -113,6 +113,10 @@ module AWS; module EC2;
|
|
113
113
|
|
114
114
|
def consoles_valid?
|
115
115
|
@rinst = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
116
|
+
if @@global.pkey
|
117
|
+
raise "Cannot find file #{@@global.pkey}" unless File.exists?(@@global.pkey)
|
118
|
+
raise "Insecure permissions for #{@@global.pkey}" unless (File.stat(@@global.pkey).mode & 600) == 0
|
119
|
+
end
|
116
120
|
raise "No instances" unless @rinst.any?
|
117
121
|
true
|
118
122
|
end
|
@@ -123,11 +127,35 @@ module AWS; module EC2;
|
|
123
127
|
opts[:id] &&= [opts[:id]].flatten
|
124
128
|
|
125
129
|
lt = @rinst.list_group(opts[:group], :any, opts[:id]) do |inst|
|
126
|
-
puts
|
127
|
-
puts "Console for: #{inst.liner_note}", $/
|
130
|
+
puts instance_separator(inst.dns_public || inst.state, inst.awsid)
|
128
131
|
console = @rinst.console(inst.awsid)
|
129
132
|
output = console ? Base64.decode64(console) : "Unavailable"
|
130
|
-
|
133
|
+
|
134
|
+
# The linux console can include ANSI escape codes for color,
|
135
|
+
# clear screen etc... We strip them out to get rid of the
|
136
|
+
# clear specifically. Otherwise the display is messed!
|
137
|
+
output &&= output.noansi
|
138
|
+
|
139
|
+
puts output
|
140
|
+
|
141
|
+
if output.match(/<Password>(.+)<\/Password>/m) # /m, match multiple lines
|
142
|
+
puts
|
143
|
+
if @@global.pkey
|
144
|
+
encrtypted_text = ($1 || '').strip
|
145
|
+
k = Rye::Key.from_file(@@global.pkey)
|
146
|
+
pword = k.decrypt(encrtypted_text)
|
147
|
+
ret = Annoy.pose_question("Display password?\a ", /yes|y|ya|sure|you bet!/i, STDERR)
|
148
|
+
if ret
|
149
|
+
answer = "%s: %s" % ['password', pword]
|
150
|
+
Annoy.timed_display(answer, STDERR, 10)
|
151
|
+
end
|
152
|
+
puts
|
153
|
+
else
|
154
|
+
puts "Please supply a private key path to decode the administrator password"
|
155
|
+
puts "rudy-ec2 -k path/2/privatekey console [-g group] [instance ID]"
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
131
159
|
end
|
132
160
|
|
133
161
|
end
|
@@ -184,6 +212,9 @@ module AWS; module EC2;
|
|
184
212
|
status
|
185
213
|
end
|
186
214
|
|
215
|
+
def instance_separator(name, awsid)
|
216
|
+
('%s %-63s awsid: %s ' % [$/, name, awsid]).att(:reverse)
|
217
|
+
end
|
187
218
|
|
188
219
|
end
|
189
220
|
|
@@ -12,7 +12,7 @@ module AWS; module EC2;
|
|
12
12
|
def create_keypairs
|
13
13
|
rkey = Rudy::AWS::EC2::KeyPairs.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
14
14
|
kp = execute_action { rkey.create(@argv.name) }
|
15
|
-
if
|
15
|
+
if [:s, :string].member?(@@global.format)
|
16
16
|
puts "Name: #{kp.name}"
|
17
17
|
puts "Fingerprint: #{kp.fingerprint}", $/
|
18
18
|
puts "Copy the following private key data into a file."
|
data/lib/rudy/routines.rb
CHANGED
data/rudy.gemspec
CHANGED