solutious-rudy 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. data/CHANGES.txt +19 -1
  2. data/README.rdoc +66 -35
  3. data/Rakefile +1 -0
  4. data/Rudyfile +97 -6
  5. data/bin/ird +7 -4
  6. data/bin/rudy +120 -212
  7. data/bin/rudy-ec2 +240 -0
  8. data/bin/rudy-s3 +76 -0
  9. data/bin/rudy-sdb +67 -0
  10. data/lib/annoy.rb +61 -18
  11. data/lib/console.rb +10 -5
  12. data/lib/rudy/aws/ec2/address.rb +76 -40
  13. data/lib/rudy/aws/ec2/group.rb +138 -78
  14. data/lib/rudy/aws/ec2/image.rb +134 -12
  15. data/lib/rudy/aws/ec2/instance.rb +116 -89
  16. data/lib/rudy/aws/ec2/keypair.rb +26 -14
  17. data/lib/rudy/aws/ec2/snapshot.rb +23 -12
  18. data/lib/rudy/aws/ec2/volume.rb +198 -202
  19. data/lib/rudy/aws/ec2/zone.rb +77 -0
  20. data/lib/rudy/aws/ec2.rb +56 -25
  21. data/lib/rudy/aws/s3.rb +54 -0
  22. data/lib/rudy/aws/sdb/error.rb +46 -0
  23. data/lib/rudy/aws/sdb.rb +298 -0
  24. data/lib/rudy/aws.rb +29 -57
  25. data/lib/rudy/{metadata/backup.rb → backup.rb} +8 -8
  26. data/lib/rudy/cli/aws/ec2/addresses.rb +105 -0
  27. data/lib/rudy/cli/aws/ec2/candy.rb +208 -0
  28. data/lib/rudy/cli/aws/ec2/groups.rb +121 -0
  29. data/lib/rudy/cli/aws/ec2/images.rb +196 -0
  30. data/lib/rudy/cli/aws/ec2/instances.rb +194 -0
  31. data/lib/rudy/cli/aws/ec2/keypairs.rb +53 -0
  32. data/lib/rudy/cli/aws/ec2/snapshots.rb +49 -0
  33. data/lib/rudy/cli/aws/ec2/volumes.rb +104 -0
  34. data/lib/rudy/cli/aws/ec2/zones.rb +22 -0
  35. data/lib/rudy/cli/aws/s3/buckets.rb +50 -0
  36. data/lib/rudy/cli/aws/s3/store.rb +22 -0
  37. data/lib/rudy/cli/aws/sdb/domains.rb +41 -0
  38. data/lib/rudy/cli/{deploy.rb → candy.rb} +2 -6
  39. data/lib/rudy/cli/config.rb +25 -20
  40. data/lib/rudy/cli/disks.rb +18 -108
  41. data/lib/rudy/cli/machines.rb +94 -0
  42. data/lib/rudy/cli/routines.rb +47 -70
  43. data/lib/rudy/cli.rb +104 -89
  44. data/lib/rudy/config/objects.rb +5 -43
  45. data/lib/rudy/config.rb +8 -24
  46. data/lib/rudy/disks.rb +248 -0
  47. data/lib/rudy/global.rb +121 -0
  48. data/lib/rudy/huxtable.rb +232 -147
  49. data/lib/rudy/machines.rb +245 -0
  50. data/lib/rudy/metadata.rb +136 -0
  51. data/lib/rudy/routines/helpers/diskhelper.rb +101 -0
  52. data/lib/rudy/routines/helpers/scripthelper.rb +91 -0
  53. data/lib/rudy/routines/release.rb +27 -8
  54. data/lib/rudy/routines/shutdown.rb +47 -32
  55. data/lib/rudy/routines/startup.rb +47 -37
  56. data/lib/rudy/routines.rb +30 -37
  57. data/lib/rudy/scm/svn.rb +1 -1
  58. data/lib/rudy/utils.rb +262 -4
  59. data/lib/rudy.rb +76 -248
  60. data/lib/storable.rb +19 -16
  61. data/lib/sysinfo.rb +1 -1
  62. data/rudy.gemspec +88 -68
  63. data/support/rudy-ec2-startup +5 -5
  64. data/test/05_config/00_setup_test.rb +3 -7
  65. data/test/20_sdb/00_setup_test.rb +2 -17
  66. data/test/20_sdb/10_domains_test.rb +18 -16
  67. data/test/25_ec2/00_setup_test.rb +5 -10
  68. data/test/25_ec2/10_keypairs_test.rb +13 -5
  69. data/test/25_ec2/20_groups_test.rb +48 -56
  70. data/test/25_ec2/30_addresses_test.rb +13 -10
  71. data/test/25_ec2/40_volumes_test.rb +11 -8
  72. data/test/25_ec2/50_snapshots_test.rb +17 -12
  73. data/test/26_ec2_instances/00_setup_test.rb +3 -8
  74. data/test/26_ec2_instances/10_instances_test.rb +21 -19
  75. data/test/30_sdb_metadata/00_setup_test.rb +2 -9
  76. data/test/30_sdb_metadata/10_disks_test.rb +47 -37
  77. data/test/30_sdb_metadata/20_backups_test.rb +9 -9
  78. data/test/helper.rb +5 -3
  79. data/vendor/highline-1.5.1/CHANGELOG +222 -0
  80. data/vendor/highline-1.5.1/INSTALL +35 -0
  81. data/vendor/highline-1.5.1/LICENSE +7 -0
  82. data/vendor/highline-1.5.1/README +63 -0
  83. data/vendor/highline-1.5.1/Rakefile +82 -0
  84. data/vendor/highline-1.5.1/TODO +6 -0
  85. data/vendor/highline-1.5.1/examples/ansi_colors.rb +38 -0
  86. data/vendor/highline-1.5.1/examples/asking_for_arrays.rb +18 -0
  87. data/vendor/highline-1.5.1/examples/basic_usage.rb +75 -0
  88. data/vendor/highline-1.5.1/examples/color_scheme.rb +32 -0
  89. data/vendor/highline-1.5.1/examples/limit.rb +12 -0
  90. data/vendor/highline-1.5.1/examples/menus.rb +65 -0
  91. data/vendor/highline-1.5.1/examples/overwrite.rb +19 -0
  92. data/vendor/highline-1.5.1/examples/page_and_wrap.rb +322 -0
  93. data/vendor/highline-1.5.1/examples/password.rb +7 -0
  94. data/vendor/highline-1.5.1/examples/trapping_eof.rb +22 -0
  95. data/vendor/highline-1.5.1/examples/using_readline.rb +17 -0
  96. data/vendor/highline-1.5.1/lib/highline/color_scheme.rb +120 -0
  97. data/vendor/highline-1.5.1/lib/highline/compatibility.rb +17 -0
  98. data/vendor/highline-1.5.1/lib/highline/import.rb +43 -0
  99. data/vendor/highline-1.5.1/lib/highline/menu.rb +395 -0
  100. data/vendor/highline-1.5.1/lib/highline/question.rb +463 -0
  101. data/vendor/highline-1.5.1/lib/highline/system_extensions.rb +193 -0
  102. data/vendor/highline-1.5.1/lib/highline.rb +758 -0
  103. data/vendor/highline-1.5.1/setup.rb +1360 -0
  104. data/vendor/highline-1.5.1/test/tc_color_scheme.rb +56 -0
  105. data/vendor/highline-1.5.1/test/tc_highline.rb +823 -0
  106. data/vendor/highline-1.5.1/test/tc_import.rb +54 -0
  107. data/vendor/highline-1.5.1/test/tc_menu.rb +429 -0
  108. data/vendor/highline-1.5.1/test/ts_all.rb +15 -0
  109. metadata +81 -69
  110. data/lib/aws_sdb/error.rb +0 -42
  111. data/lib/aws_sdb/service.rb +0 -215
  112. data/lib/aws_sdb.rb +0 -3
  113. data/lib/rudy/aws/simpledb.rb +0 -71
  114. data/lib/rudy/cli/addresses.rb +0 -85
  115. data/lib/rudy/cli/backups.rb +0 -175
  116. data/lib/rudy/cli/domains.rb +0 -17
  117. data/lib/rudy/cli/groups.rb +0 -77
  118. data/lib/rudy/cli/images.rb +0 -111
  119. data/lib/rudy/cli/instances.rb +0 -142
  120. data/lib/rudy/cli/keypairs.rb +0 -47
  121. data/lib/rudy/cli/manager.rb +0 -51
  122. data/lib/rudy/cli/release.rb +0 -174
  123. data/lib/rudy/cli/volumes.rb +0 -121
  124. data/lib/rudy/command/addresses.rb +0 -69
  125. data/lib/rudy/command/backups.rb +0 -65
  126. data/lib/rudy/command/disks-old.rb +0 -322
  127. data/lib/rudy/command/disks.rb +0 -9
  128. data/lib/rudy/command/domains.rb +0 -34
  129. data/lib/rudy/command/groups.rb +0 -118
  130. data/lib/rudy/command/instances.rb +0 -278
  131. data/lib/rudy/command/keypairs.rb +0 -149
  132. data/lib/rudy/command/manager.rb +0 -65
  133. data/lib/rudy/command/volumes.rb +0 -127
  134. data/lib/rudy/metadata/disk.rb +0 -149
  135. data/lib/rudy/metadata/machine.rb +0 -34
  136. data/lib/rudy/routines/disk_handler.rb +0 -190
  137. data/lib/rudy/routines/script_runner.rb +0 -65
  138. data/test/50_commands/00_setup_test.rb +0 -11
  139. data/test/50_commands/10_keypairs_test.rb +0 -79
  140. data/test/50_commands/20_groups_test.rb +0 -77
  141. data/test/50_commands/40_volumes_test.rb +0 -55
  142. data/test/50_commands/50_instances_test.rb +0 -110
  143. data/tryouts/console_tryout.rb +0 -91
  144. data/tryouts/disks.rb +0 -55
  145. data/tryouts/nested_methods.rb +0 -36
  146. data/tryouts/session_tryout.rb +0 -46
@@ -1,322 +0,0 @@
1
-
2
-
3
- module Rudy
4
- class Disks
5
- include Rudy::Huxtable
6
-
7
- def initialize(opts={})
8
- super(opts)
9
- @disk_handler = Rudy::Routines::DiskHandler.new(opts)
10
-
11
- end
12
-
13
-
14
- def list(opts={})
15
- opts = {
16
- :all => false
17
- }.merge(opts)
18
- disk = find_disk(opts[:disk] || opts[:path]) || create_disk_from_opts(opts)
19
- query = opts[:all] ? disk.to_query([], [:zone, :environment, :role, :position, :path]) : disk.to_query
20
- items = execute_query(query)
21
- end
22
-
23
-
24
- def create(opts={})
25
- disk = create_disk_from_opts(opts)
26
- switch_user(:root)
27
-
28
- raise "#{disk.path} is already defined for that machine" if is_defined?(disk)
29
- raise "Device #{disk.device} is already defined for that machine" if device_used?(disk)
30
- raise "No size given" unless disk.size.kind_of?(Integer)
31
- raise "No path defined" if disk.path.nil?
32
- raise "Not enough info (#{disk.name})" unless disk.valid?
33
-
34
- begin
35
-
36
- rvolumes = Rudy::Volumes.new(opts)
37
- vol = rvolumes.create(disk.size, disk.zone)
38
- disk.awsid = vol.awsid
39
- save(disk)
40
-
41
- rescue => ex
42
- @logger.puts "Error creating #{disk.name}: #{ex.message}".color(:red)
43
- @logger.puts ex.backtrace if debug?
44
- if vol
45
- @logger.puts "Destroying Volume #{vol.awsid}...".color(:red)
46
- destroy(disk)
47
- end
48
- return
49
- end
50
-
51
- disk
52
- end
53
-
54
- def attach(disk, machine=nil)
55
- disk_obj = find_disk(disk)
56
-
57
- #if instance && @ec2.instances.attached_volume?(instance.awsid, disk_obj.device)
58
- # raise "Skipping disk for #{disk_obj.path} (device #{disk_obj.device} is in use)"
59
- #
60
- #end
61
- end
62
-
63
- def destroy(disk, instance=nil)
64
- disk_obj = find_disk(disk)
65
- raise "Disk #{disk} cannot be found" unless disk_obj
66
- is_mounted = is_mounted?(disk_obj)
67
- is_attached = is_attached?(disk_obj)
68
- is_available = @volumes.attached?(disk_obj.awsid)
69
- raise "Disk is in use (unmount it or use force)" if is_mounted && !@global.force
70
- raise "Disk is attached (unattach it or use force)" if is_attached && !@global.force
71
-
72
- begin
73
-
74
- if @global.force
75
- unmount(instance, disk_obj) if is_mounted
76
- @volumes.detach(disk_obj.awsid) if is_attached
77
- @volumes.destroy(disk_obj.awsid)
78
- end
79
-
80
-
81
- if disk_obj.awsid && !disk_obj.awsid.empty?
82
-
83
- end
84
-
85
- rescue => ex
86
- puts "Error while detaching volume #{disk_obj.awsid}: #{ex.message}"
87
- puts ex.backtrace if debug?
88
- puts "Continuing..."
89
- ensure
90
- puts "Deleteing metadata for #{disk_obj.name}"
91
- @sdb.destroy(RUDY_DOMAIN, disk_obj.name)
92
- end
93
- end
94
-
95
-
96
-
97
- # TODO: These are broken! They don't even look at rtype!
98
- def find_from_volume(vol_id)
99
- query = "['awsid' = '#{vol_id}']"
100
- items = execute_query(query) || {}
101
- items.values.first
102
- end
103
- def find_from_path(path)
104
- query = "['path' = '#{path}']"
105
- items = execute_query(query) || {}
106
- items.values.first
107
- end
108
-
109
- def get(name)
110
- disk = @sdb.get_attributes(RUDY_DOMAIN, name)
111
- return nil unless disk && disk.is_a?(Hash) && !disk.empty?
112
- Rudy::MetaData::Disk.from_hash(disk) || nil
113
- end
114
-
115
- def save(disk)
116
- @sdb.store(RUDY_DOMAIN, disk.name, disk.to_hash, :replace)
117
- end
118
-
119
- def is_defined?(disk)
120
- # We don't care about the path, but we do care about the device
121
- # which is not part of the disk's name.
122
- disk_obj = find_disk(disk)
123
- raise "Disk #{opts[:disk] || opts[:path]} cannot be found" unless disk_obj
124
- query = disk_obj.to_query
125
- !(@sdb.query_with_attributes(RUDY_DOMAIN, query) || {}).empty?
126
- end
127
-
128
- def is_mounted?(disk)
129
- disk_obj = find_disk(disk)
130
- raise "Disk #{opts[:disk] || opts[:path]} cannot be found" unless disk_obj
131
- end
132
-
133
- def device_used?(disk)
134
- disk_obj = find_disk(disk)
135
- raise "Disk #{opts[:disk] || opts[:path]} cannot be found" unless disk_obj
136
- # We don't care about the path, but we do care about the device
137
- # which is not part of the disk's name.
138
- query = disk.to_query(:device, :path)
139
- !(@sdb.query_with_attributes(RUDY_DOMAIN, query) || {}).empty?
140
- end
141
-
142
-
143
- # * +disk+ is a disk name (disk-zone-...), a path, or a Rudy::MetaData::Disk object
144
- # An exception is raised in the following cases:
145
- # * The disk belongs to a different environment or role than what's in @globals.
146
- # Returns the disk object or false if not found.
147
- def find_disk(disk)
148
- return false unless disk
149
- return disk if disk.is_a?(Rudy::MetaData::Disk)
150
-
151
- disc_obj = nil
152
-
153
- # If a disk name was supplied, the user knows what she's looking for.
154
- # If we don't find it, we can throw an error.
155
- if Rudy.is_id?(:disk, disk)
156
- disc_obj = get(disk)
157
-
158
- # Otherwise we assume it's a path
159
- else
160
- disc_obj = find_from_path(disk)
161
- end
162
-
163
- # TODO: This used to throw an exception. Some users of this method may need to throw their own.
164
- return false unless disc_obj
165
-
166
- # If a user specifies a disk that doesn't match the global
167
- # values for environment and role, we need to throw an error.
168
- unless @global.environment.to_s == disc_obj.environment.to_s
169
- raise "The disk is in another machine environment"
170
- end
171
- unless @global.role.to_s == disc_obj.role.to_s
172
- raise "The disk is in another machine role"
173
- end
174
-
175
- disc_obj
176
- end
177
-
178
-
179
-
180
- private
181
-
182
- def execute_query(query)
183
- items = @sdb.query_with_attributes(RUDY_DOMAIN, query)
184
- return nil if !items || items.empty?
185
- clean_items = {}
186
- items.flatten.each do |disk|
187
- next unless disk.is_a?(Hash)
188
- name = disk.delete("Name")
189
- clean_items[name] = Rudy::MetaData::Disk.from_hash(disk)
190
- end
191
- clean_items
192
- end
193
-
194
-
195
- def create_disk_from_opts(opts)
196
- disk = Rudy::MetaData::Disk.new
197
- [:region, :zone, :environment, :role, :position].each do |n|
198
- disk.send("#{n}=", @global.send(n)) if @global.send(n)
199
- end
200
-
201
- [:path, :device, :size].each do |n|
202
- disk.send("#{n}=", opts[n]) if opts[n]
203
- end
204
-
205
- disk
206
- end
207
-
208
-
209
- end
210
- end
211
-
212
-
213
-
214
- __END__
215
-
216
-
217
- # TODO: This is a fresh copy paster.
218
- #def restore(machine, opts)
219
- # disk = find_disk(opts[:disk] || opts[:path])
220
- # raise "Disk #{opts[:disk] || opts[:path]} cannot be found" unless disk
221
- # disk_routine.each_pair do |path,props|
222
- # from = props[:from] || "unknown"
223
- # unless from.to_s == "backup"
224
- # puts "Sorry! You can currently only restore from backup. Check your routines config."
225
- # next
226
- # end
227
- #
228
- # begin
229
- # puts "Restoring disk for #{path}"
230
- #
231
- # zon = props[:zone] || @global.zone
232
- # env = props[:environment] || @global.environment
233
- # rol = props[:role] || @global.role
234
- # pos = props[:position] || @global.position
235
- # puts "Looking for backup from #{zon}-#{env}-#{rol}-#{pos}"
236
- # backup = find_most_recent_backup(zon, env, rol, pos, path)
237
- #
238
- # unless backup
239
- # puts "No backups found"
240
- # next
241
- # end
242
- #
243
- # puts "Found: #{backup.name}".bright
244
- #
245
- # disk = Rudy::MetaData::Disk.new
246
- # disk.path = path
247
- # [:region, :zone, :environment, :role, :position].each do |n|
248
- # disk.send("#{n}=", @global.send(n)) if @global.send(n)
249
- # end
250
- #
251
- # disk.device = props[:device]
252
- # size = (backup.size.to_i > props[:size].to_i) ? backup.size : props[:size]
253
- # disk.size = size.to_i
254
- #
255
- #
256
- # if Rudy::MetaData::Disk.is_defined?(@sdb, disk)
257
- # puts "The disk #{disk.name} already exists."
258
- # puts "You probably need to define when to destroy the disk."
259
- # puts "Skipping..."
260
- # next
261
- # end
262
- #
263
- # if @ec2.instances.attached_volume?(machine.awsid, disk.device)
264
- # puts "Skipping disk for #{disk.path} (device #{disk.device} is in use)"
265
- # next
266
- # end
267
- #
268
- # # NOTE: It's important to use Caesars' hash syntax b/c the disk property
269
- # # "size" conflicts with Hash#size which is what we'll get if there's no
270
- # # size defined.
271
- # unless disk.size.kind_of?(Integer)
272
- # puts "Skipping disk for #{disk.path} (size not defined)"
273
- # next
274
- # end
275
- #
276
- # if disk.path.nil?
277
- # puts "Skipping disk for #{disk.path} (no path defined)"
278
- # next
279
- # end
280
- #
281
- # unless disk.valid?
282
- # puts "Skipping #{disk.name} (not enough info)"
283
- # next
284
- # end
285
- #
286
- # puts "Creating volume... (from #{backup.awsid})".bright
287
- # volume = @ec2.volumes.create(disk.size, @global.zone, backup.awsid)
288
- #
289
- # puts "Attaching #{volume[:aws_id]} to #{machine.awsid}".bright
290
- # @ec2.volumes.attach(machine.awsid, volume[:aws_id], disk.device)
291
- # sleep 3
292
- #
293
- # puts "Mounting #{disk.device} to #{disk.path}".bright
294
- # ssh_command machine.dns_name_public, keypairpath, @global.user, "mkdir -p #{disk.path} && mount -t ext3 #{disk.device} #{disk.path}"
295
- #
296
- # puts "Creating disk metadata for #{disk.name}"
297
- # disk.awsid = volume[:aws_id]
298
- # Rudy::MetaData::Disk.save(@sdb, disk)
299
- #
300
- # sleep 1
301
- # rescue => ex
302
- # puts "There was an error restoring #{path}: #{ex.message}"
303
- # puts ex.backtrace if Drydock.debug?
304
- # #if disk
305
- # # puts "Removing metadata for #{disk.name}"
306
- # # Rudy::MetaData::Disk.destroy(@sdb, disk)
307
- # #end
308
- # end
309
- # puts
310
- # end
311
- #
312
- #
313
- #end
314
- #
315
- #
316
- #
317
- #def device_to_path(machine, device)
318
- # # /dev/sdr 10321208 154232 9642688 2% /rilli/app
319
- # dfoutput = ssh_command(machine.dns_name_public, keypairpath, @global.user, "df #{device} | tail -1").chomp
320
- # dfvals = dfoutput.scan(/(#{device}).+\s(.+?)$/).flatten # ["/dev/sdr", "/rilli/app"]
321
- # dfvals.last
322
- #end
@@ -1,9 +0,0 @@
1
-
2
-
3
- module Rudy
4
- class Disks
5
- include Rudy::Huxtable
6
-
7
-
8
- end
9
- end
@@ -1,34 +0,0 @@
1
-
2
-
3
- module Rudy
4
- class Domains
5
- include Rudy::Huxtable
6
-
7
-
8
- def list
9
- @@sdb.domains.list || []
10
- end
11
-
12
- def get(n=nil)
13
- n = name(Rudy::RUDY_DOMAIN)
14
- n &&= n.to_s
15
- doms = list.select { |domain| domain == n }
16
- doms = nil if doms.empty?
17
- doms
18
- end
19
-
20
- def exists?(n=nil)
21
- !get(n).nil?
22
- end
23
-
24
- def name(n=nil)
25
- n || Rudy::RUDY_DOMAIN
26
- end
27
-
28
- def create(n=nil)
29
- n = name(n)
30
- @@sdb.domains.create(n)
31
- end
32
-
33
- end
34
- end
@@ -1,118 +0,0 @@
1
-
2
-
3
- module Rudy
4
- class Groups
5
- include Rudy::Huxtable
6
-
7
-
8
- def create(n=nil, description=nil, opts={})
9
- n ||= name(n)
10
- description ||= "Machine group #{n}"
11
- raise "Group #{n} already exists" if @@ec2.groups.exists?(n)
12
- @@ec2.groups.create(n, description)
13
- authorize(n, opts)
14
- end
15
-
16
- def destroy(n=nil)
17
- n ||= name(n)
18
- raise "Group #{n} does not exist" unless @@ec2.groups.exists?(n)
19
- @@ec2.groups.destroy(n)
20
- end
21
-
22
- def authorize(n=nil, opts={})
23
- n ||= name(n)
24
- modify_rules(:authorize, n, opts)
25
- end
26
- def revoke(n=nil, opts={})
27
- n ||= name(n)
28
- modify_rules(:revoke, n, opts)
29
- end
30
-
31
- def exists?(n=nil)
32
- n ||= name(n)
33
- @@ec2.groups.exists?(n)
34
- end
35
-
36
- def name(n=nil)
37
- n || current_machine_group
38
- end
39
-
40
-
41
- # Do any groups exist? The default group is not considered here since it
42
- # cannot be destroyed. We're interested in any other groups.
43
- def any?
44
- groups = @@ec2.groups.list_as_hash
45
- return false unless groups
46
- groups.reject! { |name,g| g.name == 'default' }
47
- !groups.empty?
48
- end
49
-
50
- def list(n=nil, &each_object)
51
- n &&= [n]
52
- groups = @@ec2.groups.list(n)
53
- groups.each { |g| each_object.call(g) } if each_object
54
- groups
55
- end
56
-
57
- def get(n=nil)
58
- n ||= name(n)
59
- (list(n) || []).first
60
- end
61
-
62
- def list_as_hash(n=nil, &each_object)
63
- n &&= [n]
64
- groups = @@ec2.groups.list_as_hash(n)
65
- groups.each_pair { |n,g| each_object.call(g) } if each_object
66
- groups
67
- end
68
-
69
- # TODO: Consider changing the hash interface into arguments.
70
- # with different methods for authorizing groups and addresses
71
- def modify_rules(action, n, opts={})
72
- n ||= name(n)
73
-
74
- raise "You must supply a group name" unless n
75
- raise "Group does not exist" unless @@ec2.groups.exists?(n)
76
- @logger.puts "#{action.to_s.capitalize} access for #{n.bright}"
77
-
78
-
79
- opts[:ports] ||= [[22,22],[80,80],[443,443]]
80
- opts[:protocols] ||= ["tcp"]
81
- opts[:addresses] ||= [Rudy::Utils::external_ip_address]
82
-
83
- # Make sure the IP addresses have ranges
84
- opts[:addresses].collect! { |ip| (ip.match /\/\d+/) ? ip : "#{ip}/32" }
85
-
86
- opts[:protocols].each do |protocol|
87
- opts[:addresses].each do |address|
88
- opts[:ports].each do |port|
89
- @logger.puts "Ports #{port[0]}:#{port[1]} (#{protocol}) for #{opts[:addresses].join(', ')}"
90
- @@ec2.groups.send(action, n, port[0].to_i, (port[1] || port[0]).to_i, protocol, address)
91
- end
92
- end
93
- end
94
-
95
- @@ec2.groups.get(n)
96
-
97
-
98
- end
99
-
100
- def modify_group_rules(n=nil, group=nil, owner=nil)
101
- n ||= name(n)
102
-
103
- owner ||= @config.accounts.aws.accountnum
104
-
105
- raise "You must supply a group name" unless n
106
- raise "Group does not exist" unless @@ec2.groups.exists?(n)
107
- raise "Owner to authorize not specified" unless owner
108
- raise "Group to authorize not specified" unless owner
109
-
110
- @logger.puts "#{action.to_s.capitalize} access for #{n.bright}"
111
-
112
- @@ec2.groups.send("#{action}_group", n, group, owner)
113
-
114
- @@ec2.groups.get(n)
115
- end
116
-
117
- end
118
- end