solutious-rudy 0.7.2 → 0.7.3
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/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