rudy 0.8.5 → 0.9.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.
- data/CHANGES.txt +110 -18
- data/README.rdoc +40 -44
- data/Rudyfile +35 -50
- data/bin/rudy +88 -57
- data/bin/rudy-ec2 +2 -16
- data/bin/rudy-s3 +0 -10
- data/bin/rudy-sdb +11 -12
- data/lib/rudy.rb +59 -91
- data/lib/rudy/aws.rb +4 -45
- data/lib/rudy/aws/ec2.rb +57 -20
- data/lib/rudy/aws/ec2/address.rb +10 -11
- data/lib/rudy/aws/ec2/group.rb +10 -9
- data/lib/rudy/aws/ec2/image.rb +8 -8
- data/lib/rudy/aws/ec2/instance.rb +18 -19
- data/lib/rudy/aws/ec2/keypair.rb +14 -19
- data/lib/rudy/aws/ec2/snapshot.rb +16 -9
- data/lib/rudy/aws/ec2/volume.rb +39 -26
- data/lib/rudy/aws/ec2/zone.rb +5 -4
- data/lib/rudy/aws/s3.rb +2 -1
- data/lib/rudy/aws/sdb.rb +35 -86
- data/lib/rudy/backups.rb +24 -0
- data/lib/rudy/cli.rb +5 -131
- data/lib/rudy/cli/aws/ec2/addresses.rb +19 -27
- data/lib/rudy/cli/aws/ec2/candy.rb +45 -20
- data/lib/rudy/cli/aws/ec2/groups.rb +9 -13
- data/lib/rudy/cli/aws/ec2/images.rb +5 -133
- data/lib/rudy/cli/aws/ec2/instances.rb +25 -25
- data/lib/rudy/cli/aws/ec2/keypairs.rb +7 -11
- data/lib/rudy/cli/aws/ec2/snapshots.rb +5 -9
- data/lib/rudy/cli/aws/ec2/volumes.rb +22 -23
- data/lib/rudy/cli/aws/ec2/zones.rb +2 -3
- data/lib/rudy/cli/aws/sdb/domains.rb +5 -6
- data/lib/rudy/cli/aws/sdb/objects.rb +33 -0
- data/lib/rudy/cli/aws/sdb/select.rb +23 -0
- data/lib/rudy/cli/backups.rb +38 -0
- data/lib/rudy/cli/base.rb +104 -0
- data/lib/rudy/cli/candy.rb +1 -2
- data/lib/rudy/cli/config.rb +20 -7
- data/lib/rudy/cli/disks.rb +7 -9
- data/lib/rudy/cli/execbase.rb +56 -0
- data/lib/rudy/cli/machines.rb +242 -45
- data/lib/rudy/cli/metadata.rb +24 -10
- data/lib/rudy/cli/networks.rb +34 -0
- data/lib/rudy/cli/routines.rb +32 -6
- data/lib/rudy/cli/status.rb +60 -0
- data/lib/rudy/config.rb +55 -32
- data/lib/rudy/config/objects.rb +44 -30
- data/lib/rudy/disks.rb +25 -0
- data/lib/rudy/exceptions.rb +99 -0
- data/lib/rudy/global.rb +67 -28
- data/lib/rudy/guidelines.rb +3 -2
- data/lib/rudy/huxtable.rb +67 -58
- data/lib/rudy/machines.rb +41 -263
- data/lib/rudy/metadata.rb +212 -38
- data/lib/rudy/metadata/backup.rb +123 -78
- data/lib/rudy/metadata/disk.rb +153 -170
- data/lib/rudy/metadata/machine.rb +179 -0
- data/lib/rudy/mixins.rb +2 -1
- data/lib/rudy/mixins/hash.rb +3 -1
- data/lib/rudy/mixins/symbol.rb +8 -0
- data/lib/rudy/routines.rb +127 -344
- data/lib/rudy/routines/base.rb +229 -0
- data/lib/rudy/routines/handlers/base.rb +48 -0
- data/lib/rudy/routines/handlers/depends.rb +49 -0
- data/lib/rudy/routines/handlers/disks.rb +249 -0
- data/lib/rudy/routines/handlers/group.rb +44 -0
- data/lib/rudy/routines/handlers/host.rb +70 -0
- data/lib/rudy/routines/handlers/keypair.rb +70 -0
- data/lib/rudy/routines/handlers/machines.rb +15 -0
- data/lib/rudy/routines/handlers/script.rb +85 -0
- data/lib/rudy/routines/handlers/user.rb +45 -0
- data/lib/rudy/routines/passthrough.rb +19 -23
- data/lib/rudy/routines/reboot.rb +98 -50
- data/lib/rudy/routines/shutdown.rb +65 -14
- data/lib/rudy/routines/startup.rb +112 -17
- data/lib/rudy/utils.rb +35 -68
- data/rudy.gemspec +82 -25
- data/tryouts/01_mixins/01_hash_tryouts.rb +20 -0
- data/tryouts/10_require_time/10_rudy_tryouts.rb +33 -0
- data/tryouts/10_require_time/15_global_tryouts.rb +58 -0
- data/tryouts/12_config/10_load_config_tryouts.rb +43 -0
- data/tryouts/12_config/20_defaults_tryouts.rb +16 -0
- data/tryouts/12_config/30_accounts_tryouts.rb +17 -0
- data/tryouts/12_config/40_machines_tryouts.rb +53 -0
- data/tryouts/12_config/50_commands_tryouts.rb +17 -0
- data/tryouts/12_config/60_routines_tryouts.rb +16 -0
- data/tryouts/15_huxtable/10_huxtable_tryouts.rb +47 -0
- data/tryouts/15_huxtable/20_user_tryouts.rb +47 -0
- data/tryouts/20_simpledb/10_domains_tryouts.rb +36 -0
- data/tryouts/20_simpledb/20_objects_tryouts.rb +56 -0
- data/tryouts/25_ec2/10_keypairs_tryouts.rb +54 -0
- data/tryouts/25_ec2/20_groups_tryouts.rb +56 -0
- data/tryouts/25_ec2/21_groups_authorize_address_tryouts.rb +53 -0
- data/tryouts/25_ec2/22_groups_authorize_account_tryouts.rb +54 -0
- data/tryouts/25_ec2/30_addresses_tryouts.rb +42 -0
- data/tryouts/25_ec2/40_volumes_tryouts.rb +53 -0
- data/tryouts/25_ec2/50_snapshots_tryouts.rb +75 -0
- data/tryouts/26_ec2_instances/10_instance_tryouts.rb +107 -0
- data/tryouts/26_ec2_instances/50_images_tryouts.rb +7 -0
- data/tryouts/30_metadata/10_include_tryouts.rb +45 -0
- data/tryouts/30_metadata/13_object_tryouts.rb +19 -0
- data/tryouts/30_metadata/50_disk_tryouts.rb +115 -0
- data/tryouts/30_metadata/51_disk_digest_tryouts.rb +24 -0
- data/tryouts/30_metadata/53_disk_list_tryouts.rb +35 -0
- data/tryouts/30_metadata/56_disk_volume_tryouts.rb +68 -0
- data/tryouts/30_metadata/60_backup_tryouts.rb +101 -0
- data/tryouts/30_metadata/63_backup_list_tryouts.rb +38 -0
- data/tryouts/30_metadata/64_backup_disk_tryouts.rb +65 -0
- data/tryouts/30_metadata/66_backup_snapshot_tryouts.rb +76 -0
- data/tryouts/30_metadata/70_machine_tryouts.rb +85 -0
- data/tryouts/30_metadata/73_machine_list_tryouts.rb +58 -0
- data/tryouts/30_metadata/76_machine_instance_tryouts.rb +64 -0
- data/tryouts/30_metadata/77_machines_tryouts.rb +45 -0
- data/tryouts/40_routines/10_keypair_handler_tryouts.rb +52 -0
- data/tryouts/40_routines/11_group_handler_tryouts.rb +36 -0
- data/tryouts/80_cli/10_rudyec2_tryouts.rb +8 -0
- data/tryouts/80_cli/60_rudy_tryouts.rb +41 -0
- data/tryouts/exploration/console.rb +91 -0
- data/tryouts/exploration/machine.rb +23 -0
- data/tryouts/failer +6 -0
- metadata +116 -32
- data/bin/ird +0 -153
- data/lib/rudy/metadata/backups.rb +0 -67
- data/lib/rudy/metadata/debug.rb +0 -38
- data/lib/rudy/metadata/disks.rb +0 -67
- data/lib/rudy/metadata/objectbase.rb +0 -108
- data/lib/rudy/routines/helper.rb +0 -76
- data/lib/rudy/routines/helpers/dependshelper.rb +0 -34
- data/lib/rudy/routines/helpers/diskhelper.rb +0 -403
- data/lib/rudy/routines/helpers/scripthelper.rb +0 -197
- data/lib/rudy/routines/helpers/userhelper.rb +0 -37
- data/support/rudy-ec2-startup +0 -200
data/bin/rudy
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
|
11
11
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
|
12
|
-
|
12
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'drydock', 'lib')
|
13
13
|
|
14
14
|
#$SAFE = 1 # require is unsafe in Ruby 1.9??
|
15
15
|
|
@@ -20,56 +20,92 @@ require 'rudy/cli'
|
|
20
20
|
# Command-line interface for /bin/rudy
|
21
21
|
class RudyCLI < Rudy::CLI::Base
|
22
22
|
|
23
|
-
debug :off
|
24
23
|
default :machines # when no command is provided
|
25
24
|
trawler :passthrough # unknown command names will forward here.
|
26
25
|
|
27
26
|
# ------------------------------------------ RUDY GLOBALS --------
|
28
27
|
# ------------------------------------------------------------------
|
29
28
|
|
30
|
-
global :e, :environment, String, "Connect to the specified environment (
|
31
|
-
global :r, :role, String, "Connect to a machine with the specified role (
|
32
|
-
global :p, :position, String, "Position in the machine in its group
|
33
|
-
|
34
|
-
|
29
|
+
global :e, :environment, String, "Connect to the specified environment (e.g. #{Rudy::DEFAULT_ENVIRONMENT})"
|
30
|
+
global :r, :role, String, "Connect to a machine with the specified role (e.g. #{Rudy::DEFAULT_ROLE})"
|
31
|
+
global :p, :position, String, "Position in the machine in its group"
|
32
|
+
global :b, :bucket, String, "An S3 bucket name (used when creating images)"
|
33
|
+
global :t, :testrun, "Test run. Don't execute action (PARTIALLY SUPPORTED)."
|
34
|
+
global :P, :parallel, "Execute remote commands in parallel (PARTIALLY SUPPORTED)."
|
35
|
+
global :F, :force, "Force an action despite warnings"
|
36
|
+
|
37
|
+
|
35
38
|
# ------------------------------------------ RUDY OBJECTS --------
|
36
39
|
# ------------------------------------------------------------------
|
37
40
|
|
38
41
|
about "View Machines"
|
42
|
+
usage "rudy"
|
43
|
+
usage "rudy machines"
|
44
|
+
usage "rudy machines -l"
|
45
|
+
usage "rudy machines -U"
|
46
|
+
usage "rudy machines -A"
|
47
|
+
usage "rudy machines -S [static ip address]"
|
48
|
+
usage "rudy machines -D"
|
39
49
|
option :l, :all, "Display machines for all environments and roles"
|
40
|
-
action :W, :wash, "Wash machine metadata
|
50
|
+
action :W, :wash, "Wash machine metadata"
|
51
|
+
action :T, :available, "Test availablity"
|
52
|
+
action :U, :update, "Update machines based on configuration"
|
53
|
+
action :A, :associate, "Associate static IP addresses or display existing ones"
|
54
|
+
action :N, :disassociate, "Disassociate static IP addresses"
|
41
55
|
command :machines => Rudy::CLI::Machines
|
42
56
|
command_alias :machines, :m
|
43
57
|
|
44
58
|
about "View Disks"
|
45
|
-
|
59
|
+
usage "rudy disks"
|
60
|
+
usage "rudy disks -l"
|
61
|
+
action :W, :wash, "Wash disk metadata"
|
46
62
|
option :b, :backups, "Display backups"
|
47
63
|
option :l, :all, "Display all disks"
|
48
64
|
command :disks => Rudy::CLI::Disks
|
49
65
|
command_alias :disks, :d
|
50
|
-
|
66
|
+
|
67
|
+
about "View Backups"
|
68
|
+
usage "rudy backups"
|
69
|
+
usage "rudy backups -l"
|
70
|
+
action :W, :wash, "Wash backup metadata"
|
71
|
+
option :l, :all, "Display all backups"
|
72
|
+
command :backups => Rudy::CLI::Backups
|
73
|
+
command_alias :backups, :b
|
74
|
+
|
51
75
|
about "View raw metadata"
|
52
76
|
usage "rudy metadata"
|
53
|
-
usage "rudy metadata -l -
|
77
|
+
usage "rudy metadata -l -r [disk|back|m]"
|
54
78
|
usage "rudy metadata -D object-id"
|
55
|
-
option :
|
79
|
+
option :r, :rtype, String, "Record type. One of: disk, back, m (default)"
|
56
80
|
option :l, :all, "Display metadata for all environments and roles"
|
57
81
|
action :D, :delete, "Delete an object"
|
58
82
|
argv :oid
|
59
|
-
command :metadata => Rudy::CLI::
|
83
|
+
command :metadata => Rudy::CLI::Metadata
|
60
84
|
|
61
|
-
about "
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
85
|
+
about "View Network configuration (local network only)"
|
86
|
+
usage "rudy networks"
|
87
|
+
usage "rudy networks -L"
|
88
|
+
usage "rudy networks -L -i"
|
89
|
+
usage "rudy networks -L -e"
|
90
|
+
usage "rudy networks -U"
|
91
|
+
option :e, :external, "Display only external IP address"
|
92
|
+
option :i, :internal, "Display only internal IP address"
|
93
|
+
action :U, :update, "Update networks based on configuration"
|
94
|
+
action :L, :local, "Show local network configuration"
|
95
|
+
command :networks => Rudy::CLI::Networks
|
96
|
+
command_alias :networks, :n
|
68
97
|
|
69
98
|
|
70
99
|
# ----------------------------------------- RUDY ROUTINES --------
|
71
100
|
# ------------------------------------------------------------------
|
72
101
|
|
102
|
+
about "View Routines"
|
103
|
+
usage "rudy routines"
|
104
|
+
usage "rudy routines -l"
|
105
|
+
option :l, :all, "Display routines for all environments and roles"
|
106
|
+
command :routines => Rudy::CLI::Routines
|
107
|
+
command_alias :routines, :r
|
108
|
+
|
73
109
|
# A "do nothing" routine. Passthrough simply executes a routine
|
74
110
|
# config block. Drydock's trawler uses this for unknown commands.
|
75
111
|
about "A passthrough for custom routines"
|
@@ -95,7 +131,19 @@ class RudyCLI < Rudy::CLI::Base
|
|
95
131
|
|
96
132
|
# ------------------------------------ RUDY MISCELLANEOUS --------
|
97
133
|
# ------------------------------------------------------------------
|
98
|
-
|
134
|
+
|
135
|
+
about "Display existing environment objects"
|
136
|
+
option :l, :all, "Include all regions"
|
137
|
+
command :status => Rudy::CLI::Status
|
138
|
+
|
139
|
+
about "Log in to a machine"
|
140
|
+
command :ssh => Rudy::CLI::Machines
|
141
|
+
|
142
|
+
#about "Open the machine in your default browser (OSX only)"
|
143
|
+
#option :s, :https, "Use HTTPS"
|
144
|
+
#option :p, :port, Integer, "Port"
|
145
|
+
#command :open => Rudy::CLI::Candy
|
146
|
+
|
99
147
|
usage "rudy [-f config-file] config [param-name]"
|
100
148
|
about "Check Rudy configuration."
|
101
149
|
option :l, :all, "Display all configs for all machines"
|
@@ -110,29 +158,36 @@ class RudyCLI < Rudy::CLI::Base
|
|
110
158
|
#option :g, :group, String, "Display configuration for a specific group"
|
111
159
|
argv :name
|
112
160
|
command :config => Rudy::CLI::Config
|
161
|
+
command_alias :config, :configs
|
113
162
|
|
114
163
|
command :print_global => Rudy::CLI::Config
|
164
|
+
command_alias :print_global, :globals
|
115
165
|
command_alias :print_global, :global
|
116
|
-
|
166
|
+
|
117
167
|
about "Initialize Rudy configuration"
|
118
168
|
command :init do |obj|
|
119
169
|
|
120
170
|
Rudy::Huxtable.update_config
|
121
171
|
|
122
|
-
unless File.exists?
|
172
|
+
unless File.exists? Rudy::CONFIG_FILE
|
123
173
|
Rudy::Config.init_config_dir
|
124
174
|
end
|
125
175
|
|
126
176
|
begin
|
127
177
|
|
128
|
-
|
178
|
+
if Rudy::Huxtable.domain_exists?
|
179
|
+
puts "SimpleDB domain #{Rudy::Huxtable.domain} already exists"
|
180
|
+
else
|
129
181
|
puts "Creating SimpleDB domain #{Rudy::Huxtable.domain}"
|
130
182
|
Rudy::Huxtable.create_domain
|
131
|
-
puts "Initialized"
|
132
|
-
else
|
133
|
-
puts "Already Initialized"
|
134
183
|
end
|
135
|
-
|
184
|
+
|
185
|
+
user, host = Rudy.sysinfo.user, Rudy::Huxtable.global.localhost
|
186
|
+
|
187
|
+
puts "Authorizing public keys for #{user}@#{host}"
|
188
|
+
rbox = Rye::Box.new host
|
189
|
+
rbox.authorize_keys_local
|
190
|
+
|
136
191
|
rescue Rudy::AWS::SDB::NoSecretKey,
|
137
192
|
Rudy::AWS::SDB::NoAccessKey,
|
138
193
|
Rudy::NoConfig => ex
|
@@ -150,24 +205,7 @@ class RudyCLI < Rudy::CLI::Base
|
|
150
205
|
t = obj.option.local ? Time.now : Time.now.utc
|
151
206
|
puts '%s' % t.strftime("%Y-%m-%d %T %Z (%z)")
|
152
207
|
end
|
153
|
-
|
154
|
-
usage "rudy myaddress [-i] [-e]"
|
155
|
-
about "Displays you current internal and external IP addresses"
|
156
|
-
option :e, :external, "Display only external IP address"
|
157
|
-
option :i, :internal, "Display only internal IP address"
|
158
|
-
command :myaddress do |obj|
|
159
|
-
ea = Rudy::Utils::external_ip_address || ''
|
160
|
-
ia = Rudy::Utils::internal_ip_address || ''
|
161
|
-
if obj.global.quiet
|
162
|
-
puts ia unless obj.option.external && !obj.option.internal
|
163
|
-
puts ea unless obj.option.internal && !obj.option.external
|
164
|
-
else
|
165
|
-
puts "%10s: %s" % ['Internal', ia] unless obj.option.external && !obj.option.internal
|
166
|
-
puts "%10s: %s" % ['External', ea] unless obj.option.internal && !obj.option.external
|
167
|
-
end
|
168
|
-
obj.global.quiet = true # don't print elapsed time
|
169
|
-
end
|
170
|
-
|
208
|
+
|
171
209
|
usage "rudy [global options] annoy [-h -m -l] [-e]"
|
172
210
|
about "Play around with Rudy's annoying challenges"
|
173
211
|
option :s, :string, "A numeric challenge"
|
@@ -202,19 +240,14 @@ class RudyCLI < Rudy::CLI::Base
|
|
202
240
|
end
|
203
241
|
end
|
204
242
|
|
205
|
-
|
243
|
+
about "Display basic system information"
|
206
244
|
command :sysinfo do
|
207
245
|
puts Rudy.sysinfo.to_yaml
|
208
246
|
end
|
209
247
|
end
|
210
248
|
|
211
|
-
# We call Drydock specifically otherwise it will run at_exit. Rye also
|
212
|
-
# uses at_exit for shutting down the ssh-agent. Ruby executes at_exit
|
213
|
-
# blocks in reverse order so if Drydock is required first, it's block
|
214
|
-
# will run after Rye shuts down the ssh-agent.
|
215
249
|
begin
|
216
250
|
Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
|
217
|
-
|
218
251
|
rescue Drydock::ArgError, Drydock::OptError => ex
|
219
252
|
STDERR.puts ex.message
|
220
253
|
STDERR.puts ex.usage
|
@@ -223,12 +256,10 @@ rescue Drydock::InvalidArgument => ex
|
|
223
256
|
rescue Rudy::Error => ex
|
224
257
|
STDERR.puts ex.message
|
225
258
|
STDERR.puts ex.backtrace if Drydock.debug?
|
226
|
-
rescue => ex
|
227
|
-
STDERR.puts "ERROR (#{ex.class.to_s}): #{ex.message}"
|
228
|
-
STDERR.puts ex.backtrace if Drydock.debug?
|
229
259
|
rescue Interrupt
|
230
260
|
puts "#{$/}Exiting... "
|
231
261
|
exit 1
|
232
|
-
rescue
|
233
|
-
#
|
262
|
+
rescue => ex
|
263
|
+
STDERR.puts "ERROR (#{ex.class.to_s}): #{ex.message}"
|
264
|
+
STDERR.puts ex.backtrace if Drydock.debug?
|
234
265
|
end
|
data/bin/rudy-ec2
CHANGED
@@ -20,7 +20,6 @@ require 'rudy/cli'
|
|
20
20
|
module RudyCLI_EC2
|
21
21
|
extend Drydock
|
22
22
|
|
23
|
-
debug :off
|
24
23
|
default :instances
|
25
24
|
|
26
25
|
# ----------------------------------- AMAZON EC2 COMMANDS --------
|
@@ -105,11 +104,6 @@ module RudyCLI_EC2
|
|
105
104
|
option :o, :owner, String, "Amazon Account Number or one of: amazon, self"
|
106
105
|
option :l, :all, "Display all registered machine images (warning: slow)"
|
107
106
|
#option :p, :private, "Private images only"
|
108
|
-
option :b, :bucket, String, "The name of the bucket that will store the image"
|
109
|
-
option :n, :name, String, "The name of the image file (to create)"
|
110
|
-
option :u, :user, String, "Username to connect as (used for creating an image)"
|
111
|
-
action :C, :create, "Create an image"
|
112
|
-
#action :P, :prepare, "Prepare a running instance to be used as an image"
|
113
107
|
action :R, :register, "Register an image"
|
114
108
|
action :D, :destroy, "Deregister an image (does not remove image files from S3)"
|
115
109
|
argv :ami
|
@@ -142,14 +136,14 @@ module RudyCLI_EC2
|
|
142
136
|
command_alias :instances, :in
|
143
137
|
command_alias :instances, :i
|
144
138
|
|
145
|
-
about "Amazon EC2
|
139
|
+
about "Amazon EC2 EC2::Keypairs"
|
146
140
|
usage "rudy-ec2 keypairs"
|
147
141
|
usage "rudy-ec2 keypairs -C name"
|
148
142
|
usage "rudy-ec2 keypairs -D name"
|
149
143
|
action :D, :destroy, "Unregister keypair from EC2 (this is permanent!)"
|
150
144
|
action :C, :create, "Create and register a keypair with EC2"
|
151
145
|
argv :name
|
152
|
-
command :keypairs => Rudy::CLI::AWS::EC2::
|
146
|
+
command :keypairs => Rudy::CLI::AWS::EC2::Keypairs
|
153
147
|
command_alias :keypairs, :keypair
|
154
148
|
command_alias :keypairs, :k
|
155
149
|
|
@@ -211,12 +205,6 @@ module RudyCLI_EC2
|
|
211
205
|
|
212
206
|
end
|
213
207
|
|
214
|
-
#puts Rudy::Utils.banner("THIS IS RUBY #{RUBY_VERSION}") if Drydock.debug?
|
215
|
-
|
216
|
-
# We call Drydock specifically otherwise it will run at_exit. Rye also
|
217
|
-
# uses at_exit for shutting down the ssh-agent. Ruby executes at_exit
|
218
|
-
# blocks in reverse order so if Drydock is required first, it's block
|
219
|
-
# will run after Rye shuts down the ssh-agent.
|
220
208
|
begin
|
221
209
|
Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
|
222
210
|
rescue Drydock::ArgError, Drydock::OptError => ex
|
@@ -233,8 +221,6 @@ rescue => ex
|
|
233
221
|
rescue Interrupt
|
234
222
|
puts "#{$/}Exiting... "
|
235
223
|
exit 1
|
236
|
-
rescue SystemExit
|
237
|
-
# Don't balk
|
238
224
|
end
|
239
225
|
|
240
226
|
|
data/bin/rudy-s3
CHANGED
@@ -44,18 +44,10 @@ module RudyCLI_S3
|
|
44
44
|
# ------------------------------------------------------------------
|
45
45
|
|
46
46
|
default :buckets
|
47
|
-
debug :off
|
48
|
-
|
49
47
|
|
50
48
|
end
|
51
49
|
|
52
50
|
|
53
|
-
#puts Rudy::Utils.banner("THIS IS RUBY #{RUBY_VERSION}") if Drydock.debug?
|
54
|
-
|
55
|
-
# We call Drydock specifically otherwise it will run at_exit. Rye also
|
56
|
-
# uses at_exit for shutting down the ssh-agent. Ruby executes at_exit
|
57
|
-
# blocks in reverse order so if Drydock is required first, it's block
|
58
|
-
# will run after Rye shuts down the ssh-agent.
|
59
51
|
begin
|
60
52
|
Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
|
61
53
|
rescue Drydock::ArgError, Drydock::OptError => ex
|
@@ -72,7 +64,5 @@ rescue => ex
|
|
72
64
|
rescue Interrupt
|
73
65
|
puts "#{$/}Exiting... "
|
74
66
|
exit 1
|
75
|
-
rescue SystemExit
|
76
|
-
# Don't balk
|
77
67
|
end
|
78
68
|
|
data/bin/rudy-sdb
CHANGED
@@ -28,24 +28,25 @@ module RudyCLI_SDB
|
|
28
28
|
action :D, :destroy, "Destroy a domain"
|
29
29
|
argv :name
|
30
30
|
command :domains => Rudy::CLI::AWS::SDB::Domains
|
31
|
+
command_alias :domains, :domain
|
32
|
+
|
33
|
+
about "Displays objects contained in a SimpleDB domain"
|
34
|
+
argv :name, :key
|
35
|
+
command :objects => Rudy::CLI::AWS::SDB::Objects
|
36
|
+
command_alias :objects, :object
|
37
|
+
|
38
|
+
about "Execute a SimpleDB select query"
|
39
|
+
argv :query
|
40
|
+
command :query => Rudy::CLI::AWS::SDB::Select
|
31
41
|
|
32
42
|
|
33
43
|
# -------------------------------- RUDY-SDB MISCELLANEOUS --------
|
34
44
|
# ------------------------------------------------------------------
|
35
45
|
|
36
46
|
default :domains
|
37
|
-
debug :off
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
47
|
|
43
|
-
|
48
|
+
end
|
44
49
|
|
45
|
-
# We call Drydock specifically otherwise it will run at_exit. Rye also
|
46
|
-
# uses at_exit for shutting down the ssh-agent. Ruby executes at_exit
|
47
|
-
# blocks in reverse order so if Drydock is required first, it's block
|
48
|
-
# will run after Rye shuts down the ssh-agent.
|
49
50
|
begin
|
50
51
|
Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
|
51
52
|
rescue Drydock::ArgError, Drydock::OptError => ex
|
@@ -62,7 +63,5 @@ rescue => ex
|
|
62
63
|
rescue Interrupt
|
63
64
|
puts "#{$/}Exiting... "
|
64
65
|
exit 1
|
65
|
-
rescue SystemExit
|
66
|
-
# Don't balk
|
67
66
|
end
|
68
67
|
|
data/lib/rudy.rb
CHANGED
@@ -4,32 +4,35 @@ unless defined?(RUDY_HOME)
|
|
4
4
|
RUDY_LIB = File.join(File.dirname(__FILE__), '..', 'lib')
|
5
5
|
end
|
6
6
|
|
7
|
-
local_libs = %w{net-ssh net-scp
|
8
|
-
|
7
|
+
local_libs = %w{net-ssh net-scp aws-s3 caesars drydock rye storable sysinfo annoy gibbler}
|
8
|
+
local_libs.each { |dir| $:.unshift File.join(RUDY_HOME, '..', dir, 'lib') }
|
9
9
|
#require 'rubygems'
|
10
10
|
|
11
|
+
begin; require 'json'; rescue LoadError; end # Silence!
|
12
|
+
|
11
13
|
require 'digest/md5'
|
12
14
|
require 'stringio'
|
13
15
|
require 'ostruct'
|
14
16
|
require 'yaml'
|
15
|
-
require 'json'
|
16
17
|
require 'logger'
|
17
18
|
require 'socket'
|
19
|
+
require 'resolv'
|
18
20
|
require 'timeout'
|
21
|
+
require 'gibbler'
|
19
22
|
require 'tempfile'
|
20
23
|
require 'rudy/mixins'
|
24
|
+
require 'gibbler/aliases'
|
21
25
|
require 'storable'
|
22
26
|
require 'sysinfo'
|
27
|
+
require 'attic'
|
23
28
|
require 'annoy'
|
24
29
|
require 'rye'
|
25
30
|
|
26
|
-
|
27
|
-
|
28
31
|
# = Rudy
|
29
32
|
#
|
30
33
|
#
|
31
34
|
# Rudy is a development and deployment tool for the Amazon Elastic Compute Cloud
|
32
|
-
# (EC2). <a href="http://solutious.com/
|
35
|
+
# (EC2). <a href="http://solutious.com/projects/rudy/getting-started">Getting Started</a> today!
|
33
36
|
#
|
34
37
|
#
|
35
38
|
module Rudy
|
@@ -38,8 +41,8 @@ module Rudy
|
|
38
41
|
module VERSION #:nodoc:
|
39
42
|
unless defined?(MAJOR)
|
40
43
|
MAJOR = 0.freeze
|
41
|
-
MINOR =
|
42
|
-
TINY =
|
44
|
+
MINOR = 9.freeze
|
45
|
+
TINY = 0.freeze
|
43
46
|
end
|
44
47
|
def self.to_s; [MAJOR, MINOR, TINY].join('.'); end
|
45
48
|
def self.to_f; self.to_s.to_f; end
|
@@ -48,7 +51,7 @@ module Rudy
|
|
48
51
|
unless defined? Rudy::DOMAIN # We can assume all constants are defined
|
49
52
|
|
50
53
|
@@quiet = false
|
51
|
-
@@
|
54
|
+
@@auto = false
|
52
55
|
@@debug = false
|
53
56
|
@@sysinfo = SysInfo.new.freeze
|
54
57
|
|
@@ -59,109 +62,74 @@ module Rudy
|
|
59
62
|
|
60
63
|
CONFIG_DIR = File.join(@@sysinfo.home, '.rudy').freeze
|
61
64
|
CONFIG_FILE = File.join(Rudy::CONFIG_DIR, 'config').freeze
|
65
|
+
SSH_KEY_DIR = File.expand_path('~/.ssh').freeze
|
62
66
|
|
63
|
-
DEFAULT_REGION = :'us-east-1'.freeze
|
64
67
|
DEFAULT_ZONE = :'us-east-1b'.freeze
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
DEFAULT_USER = :'rudy'.freeze
|
70
|
-
|
68
|
+
DEFAULT_REGION = DEFAULT_ZONE.to_s.gsub(/[a-z]$/, '').to_sym.freeze
|
69
|
+
DEFAULT_ENVIRONMENT = :stage.freeze
|
70
|
+
DEFAULT_ROLE = :app.freeze
|
71
|
+
|
71
72
|
DEFAULT_EC2_HOST = "ec2.amazonaws.com"
|
72
73
|
DEFAULT_EC2_PORT = 443
|
73
74
|
|
74
75
|
MAX_INSTANCES = 5.freeze
|
75
76
|
|
76
|
-
SUPPORTED_SCM_NAMES = [:svn, :git].freeze
|
77
|
-
|
78
77
|
ID_MAP = {
|
79
|
-
:
|
80
|
-
:
|
81
|
-
:backup => 'back',
|
82
|
-
:machine => 'm',
|
83
|
-
:volume => 'vol',
|
84
|
-
:snapshot => 'snap',
|
85
|
-
:kernel => 'aki',
|
86
|
-
:image => 'ami',
|
87
|
-
:ram => 'ari',
|
88
|
-
:log => 'log',
|
89
|
-
:key => 'key',
|
90
|
-
:awspk => 'pk',
|
91
|
-
:awscert => 'cert',
|
78
|
+
:instance => 'i',
|
79
|
+
:machine => 'm',
|
92
80
|
:reservation => 'r',
|
93
|
-
:
|
94
|
-
:
|
81
|
+
:pkey => 'pk',
|
82
|
+
:volume => 'vol',
|
83
|
+
:kernel => 'aki',
|
84
|
+
:image => 'ami',
|
85
|
+
:ramdisk => 'ari',
|
86
|
+
:group => 'grp',
|
87
|
+
:log => 'log',
|
88
|
+
:key => 'key',
|
89
|
+
:dns_public => 'ec2',
|
90
|
+
:disk => 'disk',
|
91
|
+
:backup => 'back',
|
92
|
+
:snapshot => 'snap',
|
93
|
+
:cert => 'cert',
|
94
|
+
:dns_private => 'domU'
|
95
95
|
}.freeze
|
96
96
|
|
97
97
|
end
|
98
98
|
|
99
|
-
def Rudy.debug?; @@debug == true; end
|
100
99
|
def Rudy.quiet?; @@quiet == true; end
|
101
|
-
def Rudy.yes?; @@yes == true; end
|
102
|
-
def Rudy.enable_debug; @@debug = true; end
|
103
100
|
def Rudy.enable_quiet; @@quiet = true; end
|
104
|
-
def Rudy.enable_yes; @@yes = true; end
|
105
|
-
def Rudy.disable_debug; @@debug = false; end
|
106
101
|
def Rudy.disable_quiet; @@quiet = false; end
|
107
|
-
|
102
|
+
|
103
|
+
def Rudy.auto?; @@auto == true; end
|
104
|
+
def Rudy.enable_auto; @@auto = true; end
|
105
|
+
def Rudy.disable_auto; @@auto = false; end
|
106
|
+
|
107
|
+
def Rudy.debug?; @@debug == true; end
|
108
|
+
def Rudy.enable_debug; @@debug = true; end
|
109
|
+
def Rudy.disable_debug; @@debug = false; end
|
110
|
+
|
108
111
|
|
109
112
|
def Rudy.sysinfo; @@sysinfo; end
|
110
113
|
def sysinfo; @@sysinfo; end
|
111
114
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
lines << "Try: chmod 600 #{@obj}"
|
120
|
-
lines.join($/)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
#--
|
125
|
-
# TODO: Update exception Syntax based on:
|
126
|
-
# http://blog.rubybestpractices.com/posts/gregory/anonymous_class_hacks.html
|
127
|
-
#++
|
128
|
-
class NoConfig < Rudy::Error
|
129
|
-
def message; "No configuration found!"; end
|
130
|
-
end
|
131
|
-
class NoGlobal < Rudy::Error
|
132
|
-
def message; "No globals defined!"; end
|
133
|
-
end
|
134
|
-
class NoMachinesConfig < Rudy::Error
|
135
|
-
def message; "No machines configuration. Check your configs!"; end
|
136
|
-
end
|
137
|
-
class NoRoutinesConfig < Rudy::Error
|
138
|
-
def message; "No routines configuration. Check your configs!"; end
|
139
|
-
end
|
140
|
-
class ServiceUnavailable < Rudy::Error
|
141
|
-
def message; "#{@obj} is not available. Check your internets!"; end
|
142
|
-
end
|
143
|
-
class MachineGroupAlreadyRunning < Rudy::Error
|
144
|
-
def message; "Machine group #{@obj} is already running."; end
|
145
|
-
end
|
146
|
-
class MachineGroupNotRunning < Rudy::Error
|
147
|
-
def message; "Machine group #{@obj} is not running."; end
|
148
|
-
end
|
149
|
-
class MachineGroupNotDefined < Rudy::Error
|
150
|
-
def message; "#{@obj} is not defined in machines config."; end
|
151
|
-
end
|
152
|
-
class PrivateKeyFileExists < Rudy::Error
|
153
|
-
def message; "Private key #{@obj} already exists."; end
|
154
|
-
end
|
155
|
-
class PrivateKeyNotFound < Rudy::Error
|
156
|
-
def message; "Private key file #{@obj} not found."; end
|
115
|
+
end
|
116
|
+
|
117
|
+
if Rudy.sysinfo.vm == :java
|
118
|
+
require 'java'
|
119
|
+
module Java
|
120
|
+
include_class java.net.Socket unless defined?(Java::Socket)
|
121
|
+
include_class java.net.InetSocketAddress unless defined?(Java::InetSocketAddress)
|
157
122
|
end
|
158
123
|
end
|
159
124
|
|
160
|
-
require 'rudy/
|
161
|
-
require 'rudy/
|
162
|
-
require 'rudy/
|
163
|
-
require 'rudy/
|
164
|
-
require 'rudy/
|
165
|
-
require 'rudy/
|
166
|
-
require 'rudy/
|
125
|
+
require 'rudy/exceptions'
|
126
|
+
require 'rudy/utils' # The
|
127
|
+
require 'rudy/global' # order
|
128
|
+
require 'rudy/config' # of
|
129
|
+
require 'rudy/huxtable' # requires
|
130
|
+
require 'rudy/aws' # is
|
131
|
+
require 'rudy/metadata' # super
|
132
|
+
require 'rudy/machines' # important.
|
133
|
+
require 'rudy/backups'
|
134
|
+
require 'rudy/disks'
|
167
135
|
require 'rudy/routines'
|