solutious-rudy 0.7.5 → 0.7.6
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/CHANGES.txt +9 -6
- data/bin/rudy +1 -2
- data/bin/rudy-ec2 +1 -2
- data/bin/rudy-s3 +1 -2
- data/bin/rudy-sdb +1 -2
- data/lib/rudy/aws/ec2/address.rb +3 -3
- data/lib/rudy/config.rb +2 -1
- data/lib/rudy/global.rb +2 -1
- data/lib/rudy/huxtable.rb +4 -0
- data/lib/rudy/machines.rb +20 -8
- data/lib/rudy/metadata.rb +1 -0
- data/lib/rudy/routines/release.rb +1 -3
- data/lib/rudy/routines/shutdown.rb +6 -5
- data/lib/rudy/routines.rb +27 -19
- data/lib/rudy.rb +5 -1
- data/rudy.gemspec +1 -1
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
RUDY, CHANGES
|
2
2
|
|
3
|
-
* TODO: Remove string messages for non-string output formats
|
4
|
-
* TODO: Support for reserved instances
|
5
|
-
* TODO: Tests for zone and region support
|
6
|
-
* TODO: Support for machine image attributes
|
7
|
-
* TODO: Support for product codes
|
8
3
|
|
9
|
-
#### 0.7.
|
4
|
+
#### 0.7.6 (2009-05-18) ###############################
|
5
|
+
|
6
|
+
* ADDED: Better windows instance support during routines
|
7
|
+
* ADDED: "os" keyword to routines DSL
|
8
|
+
* ADDED: Config defaults for "yes" global (thanks sabat)
|
9
|
+
* FIXED: Handle exception when assigning inappropriate IP Address.
|
10
|
+
|
11
|
+
|
12
|
+
#### 0.7.5 (2009-05-12) ###############################
|
10
13
|
|
11
14
|
* CHANGE: rudy-ec2 console now displays windows password automatically if keypair is supplied.
|
12
15
|
* ADDED: register and destroy commands to rudy-ec2 images
|
data/bin/rudy
CHANGED
@@ -9,8 +9,7 @@
|
|
9
9
|
#
|
10
10
|
|
11
11
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
|
12
|
-
|
13
|
-
require 'rubygems'
|
12
|
+
#$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'drydock', 'lib')
|
14
13
|
|
15
14
|
#$SAFE = 1 # require is unsafe in Ruby 1.9??
|
16
15
|
|
data/bin/rudy-ec2
CHANGED
@@ -10,12 +10,11 @@
|
|
10
10
|
#
|
11
11
|
|
12
12
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
|
13
|
-
#require 'rubygems'
|
14
13
|
|
14
|
+
require 'drydock'
|
15
15
|
require 'rudy'
|
16
16
|
require 'rudy/cli'
|
17
17
|
|
18
|
-
require 'drydock'
|
19
18
|
|
20
19
|
# Command-line interface for bin/rudy-ec2
|
21
20
|
module RudyCLI_EC2
|
data/bin/rudy-s3
CHANGED
@@ -10,11 +10,10 @@
|
|
10
10
|
#
|
11
11
|
|
12
12
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
|
13
|
-
#require 'rubygems'
|
14
13
|
|
14
|
+
require 'drydock'
|
15
15
|
require 'rudy'
|
16
16
|
require 'rudy/cli'
|
17
|
-
require 'drydock'
|
18
17
|
|
19
18
|
# Command-line interface for bin/rudy-s3
|
20
19
|
module RudyCLI_S3
|
data/bin/rudy-sdb
CHANGED
@@ -10,11 +10,10 @@
|
|
10
10
|
#
|
11
11
|
|
12
12
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
|
13
|
-
#require 'rubygems'
|
14
13
|
|
14
|
+
require 'drydock'
|
15
15
|
require 'rudy'
|
16
16
|
require 'rudy/cli'
|
17
|
-
require 'drydock'
|
18
17
|
|
19
18
|
# Command-line interface for bin/rudy-sdb
|
20
19
|
module RudyCLI_SDB
|
data/lib/rudy/aws/ec2/address.rb
CHANGED
@@ -54,8 +54,8 @@ module Rudy::AWS
|
|
54
54
|
|
55
55
|
address = address.ipaddress if address.is_a?(Rudy::AWS::EC2::Address)
|
56
56
|
instance = instance.awsid if instance.is_a?(Rudy::AWS::EC2::Instance)
|
57
|
-
raise UnknownAddress unless exists?(address)
|
58
|
-
raise AddressAssociated if associated?(address)
|
57
|
+
raise UnknownAddress, address unless exists?(address)
|
58
|
+
raise AddressAssociated, address if associated?(address)
|
59
59
|
|
60
60
|
opts ={
|
61
61
|
:instance_id => instance,
|
@@ -134,7 +134,7 @@ module Rudy::AWS
|
|
134
134
|
# Returns true if the given address is assigned to the current account
|
135
135
|
def exists?(address)
|
136
136
|
address = address.ipaddress if address.is_a?(Rudy::AWS::EC2::Address)
|
137
|
-
list
|
137
|
+
list do |a|
|
138
138
|
return true if a.ipaddress == address
|
139
139
|
end
|
140
140
|
false
|
data/lib/rudy/config.rb
CHANGED
@@ -102,7 +102,8 @@ module Rudy
|
|
102
102
|
environment :stage
|
103
103
|
role :app
|
104
104
|
user Rudy.sysinfo.user.to_sym
|
105
|
-
color false #
|
105
|
+
color false # Terminal colors? true/false
|
106
|
+
yes false # Auto-confirm? true/false
|
106
107
|
end
|
107
108
|
}
|
108
109
|
Rudy::Utils.write_to_file(Rudy::CONFIG_FILE, rudy_config, 'w', 0600)
|
data/lib/rudy/global.rb
CHANGED
@@ -56,7 +56,7 @@ module Rudy
|
|
56
56
|
if config.defaults?
|
57
57
|
# Apply the "color" default before "nocolor" so nocolor has presedence
|
58
58
|
@nocolor = !config.defaults.color unless config.defaults.color.nil?
|
59
|
-
%w[region zone environment role position user nocolor quiet].each do |name|
|
59
|
+
%w[region zone environment role position user nocolor quiet yes].each do |name|
|
60
60
|
val = config.defaults.send(name)
|
61
61
|
self.send("#{name}=", val) unless val.nil?
|
62
62
|
end
|
@@ -101,6 +101,7 @@ module Rudy
|
|
101
101
|
@position &&= @position.to_s.rjust(2, '0')
|
102
102
|
@format &&= @format.to_sym rescue nil
|
103
103
|
@quiet ? Rudy.enable_quiet : Rudy.disable_quiet
|
104
|
+
@yes ? Rudy.enable_yes : Rudy.disable_yes
|
104
105
|
end
|
105
106
|
|
106
107
|
def apply_environment_variables
|
data/lib/rudy/huxtable.rb
CHANGED
data/lib/rudy/machines.rb
CHANGED
@@ -21,6 +21,8 @@ module Rudy
|
|
21
21
|
field :dns_private
|
22
22
|
field :state
|
23
23
|
|
24
|
+
field :os
|
25
|
+
|
24
26
|
attr_reader :instance
|
25
27
|
|
26
28
|
def init
|
@@ -32,6 +34,7 @@ module Rudy
|
|
32
34
|
@role = @@global.role
|
33
35
|
@position = find_next_position || '01'
|
34
36
|
@state = 'no-instance'
|
37
|
+
@os = 'unknown'
|
35
38
|
end
|
36
39
|
|
37
40
|
def liner_note
|
@@ -117,20 +120,29 @@ module Rudy
|
|
117
120
|
:machine_data => Machine.generate_machine_data.to_yaml
|
118
121
|
}.merge(opts)
|
119
122
|
|
123
|
+
@os = current_machine_os
|
124
|
+
|
120
125
|
@ec2inst.create(opts) do |inst|
|
121
126
|
@awsid = inst.awsid
|
122
127
|
@created = @starts = Time.now
|
123
128
|
@state = inst.state
|
124
|
-
#
|
125
|
-
|
129
|
+
# We need to be safe when creating machines because if an exception is
|
130
|
+
# raised, instances will have been creating but the calling class won't know.
|
131
|
+
begin
|
126
132
|
address = current_machine_address(@position)
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
+
# Assign IP address only if we have one for that position
|
134
|
+
if address
|
135
|
+
# Make sure the address is associated to the current account
|
136
|
+
if @radd.exists?(address)
|
137
|
+
puts "Associating #{address} to #{inst.awsid}"
|
138
|
+
@radd.associate(address, inst.awsid)
|
139
|
+
else
|
140
|
+
STDERR.puts "Unknown address: #{address}"
|
141
|
+
end
|
133
142
|
end
|
143
|
+
rescue => ex
|
144
|
+
STDERR.puts "Error: #{ex.message}"
|
145
|
+
STDERR.puts ex.backtrace if Rudy.debug?
|
134
146
|
end
|
135
147
|
end
|
136
148
|
|
data/lib/rudy/metadata.rb
CHANGED
@@ -6,6 +6,7 @@ module Rudy
|
|
6
6
|
def initialize(*args)
|
7
7
|
a, s, r = @@global.accesskey, @@global.secretkey, @@global.region
|
8
8
|
@sdb = Rudy::AWS::SDB.new(a, s, r)
|
9
|
+
@radd = Rudy::AWS::EC2::Addresses.new(a, s, r)
|
9
10
|
@rinst = Rudy::AWS::EC2::Instances.new(a, s, r)
|
10
11
|
@rgrp = Rudy::AWS::EC2::Groups.new(a, s, r)
|
11
12
|
@rkey = Rudy::AWS::EC2::KeyPairs.new(a, s, r)
|
@@ -23,13 +23,11 @@ module Rudy; module Routines;
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
machines =
|
27
|
-
generic_machine_runner(:list) do |machine,rbox|
|
26
|
+
machines = generic_machine_runner(:list) do |machine,rbox|
|
28
27
|
vlist.each do |scm|
|
29
28
|
puts task_separator("CREATING REMOTE #{scm.engine.to_s.upcase} CHECKOUT")
|
30
29
|
scm.create_remote_checkout(rbox)
|
31
30
|
end
|
32
|
-
machines << machine
|
33
31
|
end
|
34
32
|
|
35
33
|
machines
|
@@ -13,10 +13,9 @@ module Rudy; module Routines;
|
|
13
13
|
STDERR.puts "[this is a generic shutdown routine]"
|
14
14
|
@routine = {}
|
15
15
|
end
|
16
|
-
|
17
|
-
generic_machine_runner(:
|
18
|
-
|
19
|
-
machines << machine
|
16
|
+
|
17
|
+
machines = generic_machine_runner(:list) do |machine|
|
18
|
+
machine.destroy
|
20
19
|
end
|
21
20
|
machines
|
22
21
|
end
|
@@ -24,8 +23,10 @@ module Rudy; module Routines;
|
|
24
23
|
# Called by generic_machine_runner
|
25
24
|
def raise_early_exceptions
|
26
25
|
rmach = Rudy::Machines.new
|
27
|
-
raise Rudy::PrivateKeyNotFound, root_keypairpath unless has_keypair?(:root)
|
28
26
|
raise MachineGroupNotRunning, current_machine_group unless rmach.running?
|
27
|
+
# Check private key after machine group, otherwise we could get an error
|
28
|
+
# about there being no key which doesn't make sense if the group isn't running.
|
29
|
+
raise Rudy::PrivateKeyNotFound, root_keypairpath unless has_keypair?(:root)
|
29
30
|
end
|
30
31
|
|
31
32
|
end
|
data/lib/rudy/routines.rb
CHANGED
@@ -94,11 +94,11 @@ module Rudy
|
|
94
94
|
end
|
95
95
|
}
|
96
96
|
|
97
|
-
|
98
|
-
|
99
|
-
rmach.send(machine_action)
|
100
|
-
|
101
|
-
|
97
|
+
|
98
|
+
# Execute the action (create, list, destroy, restart)
|
99
|
+
machines = enjoy_every_sandwich([]) { rmach.send(machine_action) }
|
100
|
+
|
101
|
+
machines.each do |machine|
|
102
102
|
puts machine_separator(machine.name, machine.awsid) unless skip_header
|
103
103
|
|
104
104
|
unless skip_check
|
@@ -107,15 +107,19 @@ module Rudy
|
|
107
107
|
inst = machine.get_instance
|
108
108
|
inst && inst.running?
|
109
109
|
}
|
110
|
+
end
|
110
111
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
112
|
+
# Add instance info to machine and save it. This is really important
|
113
|
+
# for the initial startup so the metadata is updated right away. But
|
114
|
+
# it's also important to call here because if a routine was executed
|
115
|
+
# and an unexpected exception occurs before this update is executed
|
116
|
+
# the machine metadata won't contain the DNS information. Calling it
|
117
|
+
# here ensure that the metadata is always up-to-date.
|
118
|
+
machine.update
|
118
119
|
|
120
|
+
next if (machine.os || '').to_s == 'win32'
|
121
|
+
|
122
|
+
unless skip_check
|
119
123
|
msg = preliminary_separator("Waiting for SSH daemon...")
|
120
124
|
Rudy::Utils.waiter(2, 60, STDOUT, msg, 0) {
|
121
125
|
Rudy::Utils.service_available?(machine.dns_public, 22)
|
@@ -150,11 +154,13 @@ module Rudy
|
|
150
154
|
}
|
151
155
|
end
|
152
156
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
157
|
+
## NOTE: This prevents shutdown from doing its thing and prob
|
158
|
+
## isn't necessary.
|
159
|
+
##unless has_remote_task?(routine)
|
160
|
+
## puts "[no remote tasks]"
|
161
|
+
## next
|
162
|
+
##end
|
163
|
+
|
158
164
|
enjoy_every_sandwich {
|
159
165
|
if Rudy::Routines::UserHelper.adduser?(routine) # adduser
|
160
166
|
puts task_separator("ADD USER")
|
@@ -231,6 +237,7 @@ module Rudy
|
|
231
237
|
execute_dependency(after_dependencies, skip_check, skip_header)
|
232
238
|
}
|
233
239
|
|
240
|
+
machines
|
234
241
|
end
|
235
242
|
|
236
243
|
def execute_dependency(depends, skip_check, skip_header)
|
@@ -295,14 +302,15 @@ module Rudy
|
|
295
302
|
#puts '%-40s' % [name.bright]
|
296
303
|
end
|
297
304
|
|
298
|
-
def enjoy_every_sandwich(&bloc_party)
|
305
|
+
def enjoy_every_sandwich(ret=nil, &bloc_party)
|
299
306
|
begin
|
300
|
-
bloc_party.call
|
307
|
+
ret = bloc_party.call
|
301
308
|
rescue => ex
|
302
309
|
STDERR.puts " Error: #{ex.message}".color(:red)
|
303
310
|
STDERR.puts ex.backtrace if Rudy.debug?
|
304
311
|
exit 12 unless keep_going?
|
305
312
|
end
|
313
|
+
ret
|
306
314
|
end
|
307
315
|
|
308
316
|
def keep_going?
|
data/lib/rudy.rb
CHANGED
@@ -38,7 +38,7 @@ module Rudy
|
|
38
38
|
unless defined?(MAJOR)
|
39
39
|
MAJOR = 0.freeze
|
40
40
|
MINOR = 7.freeze
|
41
|
-
TINY =
|
41
|
+
TINY = 6.freeze
|
42
42
|
end
|
43
43
|
def self.to_s; [MAJOR, MINOR, TINY].join('.'); end
|
44
44
|
def self.to_f; self.to_s.to_f; end
|
@@ -88,6 +88,7 @@ module Rudy
|
|
88
88
|
}.freeze
|
89
89
|
|
90
90
|
@@quiet = false
|
91
|
+
@@yes = false
|
91
92
|
@@debug = false
|
92
93
|
@@sysinfo = SysInfo.new.freeze
|
93
94
|
|
@@ -95,10 +96,13 @@ module Rudy
|
|
95
96
|
|
96
97
|
def Rudy.debug?; @@debug == true; end
|
97
98
|
def Rudy.quiet?; @@quiet == true; end
|
99
|
+
def Rudy.yes?; @@yes == true; end
|
98
100
|
def Rudy.enable_debug; @@debug = true; end
|
99
101
|
def Rudy.enable_quiet; @@quiet = true; end
|
102
|
+
def Rudy.enable_yes; @@yes = true; end
|
100
103
|
def Rudy.disable_debug; @@debug = false; end
|
101
104
|
def Rudy.disable_quiet; @@quiet = false; end
|
105
|
+
def Rudy.disable_yes; @@yes = false; end
|
102
106
|
|
103
107
|
def Rudy.sysinfo; @@sysinfo; end
|
104
108
|
def sysinfo; @@sysinfo; end
|
data/rudy.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solutious-rudy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delano Mandelbaum
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|