rudy 0.4.0 → 0.6.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.
Files changed (135) hide show
  1. data/CHANGES.txt +54 -30
  2. data/README.rdoc +100 -12
  3. data/Rakefile +103 -8
  4. data/Rudyfile +119 -0
  5. data/bin/ird +175 -0
  6. data/bin/rudy +259 -156
  7. data/bin/rudy-ec2 +228 -95
  8. data/bin/rudy-s3 +76 -0
  9. data/bin/rudy-sdb +67 -0
  10. data/lib/annoy.rb +270 -0
  11. data/lib/console.rb +30 -9
  12. data/lib/escape.rb +305 -0
  13. data/lib/rudy.rb +151 -182
  14. data/lib/rudy/aws.rb +56 -49
  15. data/lib/rudy/aws/ec2.rb +47 -292
  16. data/lib/rudy/aws/ec2/address.rb +157 -0
  17. data/lib/rudy/aws/ec2/group.rb +301 -0
  18. data/lib/rudy/aws/ec2/image.rb +168 -0
  19. data/lib/rudy/aws/ec2/instance.rb +434 -0
  20. data/lib/rudy/aws/ec2/keypair.rb +104 -0
  21. data/lib/rudy/aws/ec2/snapshot.rb +98 -0
  22. data/lib/rudy/aws/ec2/volume.rb +230 -0
  23. data/lib/rudy/aws/ec2/zone.rb +77 -0
  24. data/lib/rudy/aws/s3.rb +54 -0
  25. data/lib/rudy/aws/sdb.rb +298 -0
  26. data/lib/rudy/aws/sdb/error.rb +46 -0
  27. data/lib/rudy/{metadata/backup.rb → backup.rb} +26 -51
  28. data/lib/rudy/cli.rb +157 -0
  29. data/lib/rudy/cli/aws/ec2/addresses.rb +105 -0
  30. data/lib/rudy/cli/aws/ec2/candy.rb +208 -0
  31. data/lib/rudy/cli/aws/ec2/groups.rb +121 -0
  32. data/lib/rudy/cli/aws/ec2/images.rb +196 -0
  33. data/lib/rudy/cli/aws/ec2/instances.rb +194 -0
  34. data/lib/rudy/cli/aws/ec2/keypairs.rb +53 -0
  35. data/lib/rudy/cli/aws/ec2/snapshots.rb +49 -0
  36. data/lib/rudy/cli/aws/ec2/volumes.rb +104 -0
  37. data/lib/rudy/cli/aws/ec2/zones.rb +22 -0
  38. data/lib/rudy/cli/aws/s3/buckets.rb +50 -0
  39. data/lib/rudy/cli/aws/s3/store.rb +22 -0
  40. data/lib/rudy/cli/aws/sdb/domains.rb +41 -0
  41. data/lib/rudy/cli/candy.rb +8 -0
  42. data/lib/rudy/{command → cli}/config.rb +34 -24
  43. data/lib/rudy/cli/disks.rb +35 -0
  44. data/lib/rudy/cli/machines.rb +94 -0
  45. data/lib/rudy/cli/routines.rb +57 -0
  46. data/lib/rudy/config.rb +77 -72
  47. data/lib/rudy/config/objects.rb +29 -0
  48. data/lib/rudy/disks.rb +248 -0
  49. data/lib/rudy/global.rb +121 -0
  50. data/lib/rudy/huxtable.rb +340 -0
  51. data/lib/rudy/machines.rb +245 -0
  52. data/lib/rudy/metadata.rb +123 -13
  53. data/lib/rudy/routines.rb +47 -0
  54. data/lib/rudy/routines/helpers/diskhelper.rb +101 -0
  55. data/lib/rudy/routines/helpers/scripthelper.rb +91 -0
  56. data/lib/rudy/routines/release.rb +34 -0
  57. data/lib/rudy/routines/shutdown.rb +57 -0
  58. data/lib/rudy/routines/startup.rb +58 -0
  59. data/lib/rudy/scm/svn.rb +1 -1
  60. data/lib/rudy/utils.rb +322 -4
  61. data/lib/storable.rb +26 -17
  62. data/lib/sysinfo.rb +274 -0
  63. data/lib/tryouts.rb +6 -13
  64. data/rudy.gemspec +128 -42
  65. data/support/randomize-root-password +45 -0
  66. data/support/rudy-ec2-startup +9 -9
  67. data/support/update-ec2-ami-tools +20 -0
  68. data/test/05_config/00_setup_test.rb +20 -0
  69. data/test/05_config/30_machines_test.rb +69 -0
  70. data/test/20_sdb/00_setup_test.rb +16 -0
  71. data/test/20_sdb/10_domains_test.rb +115 -0
  72. data/test/25_ec2/00_setup_test.rb +29 -0
  73. data/test/25_ec2/10_keypairs_test.rb +41 -0
  74. data/test/25_ec2/20_groups_test.rb +131 -0
  75. data/test/25_ec2/30_addresses_test.rb +38 -0
  76. data/test/25_ec2/40_volumes_test.rb +49 -0
  77. data/test/25_ec2/50_snapshots_test.rb +74 -0
  78. data/test/26_ec2_instances/00_setup_test.rb +28 -0
  79. data/test/26_ec2_instances/10_instances_test.rb +83 -0
  80. data/test/26_ec2_instances/50_images_test.rb +13 -0
  81. data/test/30_sdb_metadata/00_setup_test.rb +21 -0
  82. data/test/30_sdb_metadata/10_disks_test.rb +109 -0
  83. data/test/30_sdb_metadata/20_backups_test.rb +102 -0
  84. data/test/coverage.txt +51 -0
  85. data/test/helper.rb +36 -0
  86. data/vendor/highline-1.5.1/CHANGELOG +222 -0
  87. data/vendor/highline-1.5.1/INSTALL +35 -0
  88. data/vendor/highline-1.5.1/LICENSE +7 -0
  89. data/vendor/highline-1.5.1/README +63 -0
  90. data/vendor/highline-1.5.1/Rakefile +82 -0
  91. data/vendor/highline-1.5.1/TODO +6 -0
  92. data/vendor/highline-1.5.1/examples/ansi_colors.rb +38 -0
  93. data/vendor/highline-1.5.1/examples/asking_for_arrays.rb +18 -0
  94. data/vendor/highline-1.5.1/examples/basic_usage.rb +75 -0
  95. data/vendor/highline-1.5.1/examples/color_scheme.rb +32 -0
  96. data/vendor/highline-1.5.1/examples/limit.rb +12 -0
  97. data/vendor/highline-1.5.1/examples/menus.rb +65 -0
  98. data/vendor/highline-1.5.1/examples/overwrite.rb +19 -0
  99. data/vendor/highline-1.5.1/examples/page_and_wrap.rb +322 -0
  100. data/vendor/highline-1.5.1/examples/password.rb +7 -0
  101. data/vendor/highline-1.5.1/examples/trapping_eof.rb +22 -0
  102. data/vendor/highline-1.5.1/examples/using_readline.rb +17 -0
  103. data/vendor/highline-1.5.1/lib/highline.rb +758 -0
  104. data/vendor/highline-1.5.1/lib/highline/color_scheme.rb +120 -0
  105. data/vendor/highline-1.5.1/lib/highline/compatibility.rb +17 -0
  106. data/vendor/highline-1.5.1/lib/highline/import.rb +43 -0
  107. data/vendor/highline-1.5.1/lib/highline/menu.rb +395 -0
  108. data/vendor/highline-1.5.1/lib/highline/question.rb +463 -0
  109. data/vendor/highline-1.5.1/lib/highline/system_extensions.rb +193 -0
  110. data/vendor/highline-1.5.1/setup.rb +1360 -0
  111. data/vendor/highline-1.5.1/test/tc_color_scheme.rb +56 -0
  112. data/vendor/highline-1.5.1/test/tc_highline.rb +823 -0
  113. data/vendor/highline-1.5.1/test/tc_import.rb +54 -0
  114. data/vendor/highline-1.5.1/test/tc_menu.rb +429 -0
  115. data/vendor/highline-1.5.1/test/ts_all.rb +15 -0
  116. metadata +141 -38
  117. data/lib/aws_sdb.rb +0 -3
  118. data/lib/aws_sdb/error.rb +0 -42
  119. data/lib/aws_sdb/service.rb +0 -215
  120. data/lib/rudy/aws/simpledb.rb +0 -53
  121. data/lib/rudy/command/addresses.rb +0 -46
  122. data/lib/rudy/command/backups.rb +0 -175
  123. data/lib/rudy/command/base.rb +0 -841
  124. data/lib/rudy/command/deploy.rb +0 -12
  125. data/lib/rudy/command/disks.rb +0 -213
  126. data/lib/rudy/command/environment.rb +0 -73
  127. data/lib/rudy/command/groups.rb +0 -61
  128. data/lib/rudy/command/images.rb +0 -91
  129. data/lib/rudy/command/instances.rb +0 -85
  130. data/lib/rudy/command/machines.rb +0 -161
  131. data/lib/rudy/command/metadata.rb +0 -41
  132. data/lib/rudy/command/release.rb +0 -174
  133. data/lib/rudy/command/volumes.rb +0 -66
  134. data/lib/rudy/metadata/disk.rb +0 -138
  135. data/tryouts/console_tryout.rb +0 -91
@@ -13,9 +13,11 @@ require 'fileutils'
13
13
  # Storable.field method which tells Storable the order and
14
14
  # name.
15
15
  class Storable
16
- VERSION = 2
17
- NICE_TIME_FORMAT = "%Y-%m-%d@%H:%M:%S".freeze unless defined? NICE_TIME_FORMAT
18
- SUPPORTED_FORMATS = %w{tsv csv yaml json}.freeze unless defined? SUPPORTED_FORMATS
16
+ unless defined?(SUPPORTED_FORMATS) # We can assume all are defined
17
+ VERSION = 5
18
+ NICE_TIME_FORMAT = "%Y-%m-%d@%H:%M:%S".freeze
19
+ SUPPORTED_FORMATS = %w{tsv csv yaml json s string}.freeze
20
+ end
19
21
 
20
22
  # This value will be used as a default unless provided on-the-fly.
21
23
  # See SUPPORTED_FORMATS for available values.
@@ -27,14 +29,11 @@ class Storable
27
29
  @format = v
28
30
  end
29
31
 
30
- # TODO: from_args([HASH or ordered params])
31
-
32
- def init
33
- # NOTE: I think this can be removed
34
- self.class.send(:class_variable_set, :@@field_names, []) unless class_variable_defined?(:@@field_names)
35
- self.class.send(:class_variable_set, :@@field_types, []) unless class_variable_defined?(:@@field_types)
32
+ def postprocess
36
33
  end
37
34
 
35
+ # TODO: from_args([HASH or ordered params])
36
+
38
37
  # Accepts field definitions in the one of the follow formats:
39
38
  #
40
39
  # field :product
@@ -68,7 +67,7 @@ class Storable
68
67
  def self.field_names
69
68
  class_variable_get(:@@field_names)
70
69
  end
71
- # Ditto.
70
+ # Returns an array of field names defined by self.field
72
71
  def field_names
73
72
  self.class.send(:class_variable_get, :@@field_names)
74
73
  end
@@ -77,18 +76,23 @@ class Storable
77
76
  def self.field_types
78
77
  class_variable_get(:@@field_types)
79
78
  end
80
- # Ditto.
79
+ # Returns an array of field types defined by self.field. Fields that did
80
+ # not receive a type are set to nil.
81
81
  def field_types
82
82
  self.class.send(:class_variable_get, :@@field_types)
83
83
  end
84
84
 
85
85
  # Dump the object data to the given format.
86
- def dump(format=nil, with_titles=true)
87
- format ||= @format
86
+ def dump(format=nil, with_titles=false)
87
+ format ||= 's' # as in, to_s
88
88
  raise "Format not defined (#{format})" unless SUPPORTED_FORMATS.member?(format)
89
89
  send("to_#{format}", with_titles)
90
90
  end
91
91
 
92
+ def to_string(*args)
93
+ to_s(*args)
94
+ end
95
+
92
96
  # Create a new instance of the object using data from file.
93
97
  def self.from_file(file_path, format='yaml')
94
98
  raise "Cannot read file (#{file_path})" unless File.exists?(file_path)
@@ -108,10 +112,9 @@ class Storable
108
112
 
109
113
  # Create a new instance of the object from a hash.
110
114
  def self.from_hash(from={})
115
+ return nil if !from || from.empty?
111
116
  me = self.new
112
-
113
- return me if !from || from.empty?
114
-
117
+
115
118
  fnames = field_names
116
119
  fnames.each_with_index do |key,index|
117
120
 
@@ -122,8 +125,10 @@ class Storable
122
125
  if field_types[index] == Array
123
126
  ((value ||= []) << stored_value).flatten
124
127
  elsif field_types[index] == Hash
128
+
125
129
  value = stored_value
126
130
  else
131
+
127
132
  # SimpleDB stores attribute shit as lists of values
128
133
  value = stored_value.first if stored_value.is_a?(Array) && stored_value.size == 1
129
134
 
@@ -137,14 +142,18 @@ class Storable
137
142
  value = value.to_f
138
143
  elsif field_types[index] == Integer
139
144
  value = value.to_i
145
+ elsif field_types[index].kind_of?(Storable) && stored_value.is_a?(Hash)
146
+ value = field_types[index].from_hash(stored_value)
140
147
  else
141
- value = value.first if value.is_a?(Array) && value.size == 1 # I
148
+ value = (stored_value.is_a?(Array) && stored_value.size == 1) ? stored_value.first : stored_value
142
149
  end
143
150
  end
144
151
 
145
152
  me.send("#{key}=", value) if self.method_defined?("#{key}=")
146
153
  end
147
154
 
155
+ me.postprocess
156
+
148
157
  me
149
158
  end
150
159
  # Return the object data as a hash
@@ -0,0 +1,274 @@
1
+ require 'storable'
2
+ require 'socket'
3
+
4
+ # SystemInfo
5
+ #
6
+ # A container for the system platform information.
7
+ # Portions of this code is from Amazon's EC2 AMI tools, lib/platform.rb.
8
+ class SystemInfo < Storable
9
+ unless defined?(IMPLEMENTATIONS)
10
+ VERSION = 2.freeze
11
+ IMPLEMENTATIONS = [
12
+
13
+ # These are for JRuby, System.getproperty('os.name').
14
+ # For a list of all values, see: http://lopica.sourceforge.net/os.html
15
+ [/mac\s*os\s*x/i, :unix, :osx ],
16
+ [/sunos/i, :unix, :solaris ],
17
+ [/windows\s*ce/i, :win32, :windows ],
18
+ [/windows/i, :win32, :windows ],
19
+ [/osx/i, :unix, :osx ],
20
+
21
+ # TODO: implement other windows matches: # /djgpp|(cyg|ms|bcc)win|mingw/ (from mongrel)
22
+
23
+ # These are for RUBY_PLATFORM and JRuby
24
+ [/java/i, :java, :java ],
25
+ [/darwin/i, :unix, :osx ],
26
+ [/linux/i, :unix, :linux ],
27
+ [/freebsd/i, :unix, :freebsd ],
28
+ [/netbsd/i, :unix, :netbsd ],
29
+ [/solaris/i, :unix, :solaris ],
30
+ [/irix/i, :unix, :irix ],
31
+ [/cygwin/i, :unix, :cygwin ],
32
+ [/mswin/i, :win32, :windows ],
33
+ [/mingw/i, :win32, :mingw ],
34
+ [/bccwin/i, :win32, :bccwin ],
35
+ [/wince/i, :win32, :wince ],
36
+ [/vms/i, :vms, :vms ],
37
+ [/os2/i, :os2, :os2 ],
38
+ [nil, :unknown, :unknown ],
39
+ ].freeze
40
+
41
+ ARCHITECTURES = [
42
+ [/(i\d86)/i, :i386 ],
43
+ [/x86_64/i, :x86_64 ],
44
+ [/x86/i, :i386 ], # JRuby
45
+ [/ia64/i, :ia64 ],
46
+ [/alpha/i, :alpha ],
47
+ [/sparc/i, :sparc ],
48
+ [/mips/i, :mips ],
49
+ [/powerpc/i, :powerpc ],
50
+ [/universal/i,:universal ],
51
+ [nil, :unknown ],
52
+ ].freeze
53
+ end
54
+
55
+
56
+ field :os => String
57
+ field :implementation => String
58
+ field :architecture => String
59
+ field :hostname => String
60
+ field :ipaddress => String
61
+ field :uptime => Float
62
+
63
+
64
+ alias :impl :implementation
65
+ alias :arch :architecture
66
+
67
+
68
+ def initialize
69
+ @os, @implementation, @architecture = guess
70
+ @hostname, @ipaddress, @uptime = get_info
71
+ end
72
+
73
+ # guess
74
+ #
75
+ # This is called at require-time in stella.rb. It guesses
76
+ # the current operating system, implementation, architecture.
77
+ # Returns [os, impl, arch]
78
+ def guess
79
+ os = :unknown
80
+ impl = :unknown
81
+ arch = :unknown
82
+ IMPLEMENTATIONS.each do |r, o, i|
83
+ if r and RUBY_PLATFORM =~ r
84
+ os, impl = [o, i]
85
+ break
86
+ end
87
+ end
88
+ ARCHITECTURES.each do |r, a|
89
+ if r and RUBY_PLATFORM =~ r
90
+ arch = a
91
+ break
92
+ end
93
+ end
94
+
95
+ #
96
+ if os == :win32
97
+ #require 'Win32API'
98
+
99
+ # If we're running in java, we'll need to look elsewhere
100
+ # for the implementation and architecture.
101
+ # We'll replace IMPL and ARCH with what we find.
102
+ elsif os == :java
103
+ require 'java'
104
+ include_class java.lang.System
105
+
106
+ osname = System.getProperty("os.name")
107
+ IMPLEMENTATIONS.each do |r, o, i|
108
+ if r and osname =~ r
109
+ impl = i
110
+ break
111
+ end
112
+ end
113
+
114
+ osarch = System.getProperty("os.arch")
115
+ ARCHITECTURES.each do |r, a|
116
+ if r and osarch =~ r
117
+ arch = a
118
+ break
119
+ end
120
+ end
121
+
122
+ end
123
+
124
+ [os, impl, arch]
125
+ end
126
+
127
+ # get_info
128
+ #
129
+ # Returns [hostname, ipaddr, uptime] for the local machine
130
+ def get_info
131
+ hostname = :unknown
132
+ ipaddr = :unknown
133
+ uptime = :unknown
134
+
135
+ begin
136
+ hostname = local_hostname
137
+ ipaddr = local_ip_address
138
+ uptime = local_uptime
139
+ rescue => ex
140
+ # Be silent!
141
+ end
142
+
143
+ [hostname, ipaddr, uptime]
144
+ end
145
+
146
+ # local_hostname
147
+ #
148
+ # Return the hostname for the local machine
149
+ def local_hostname
150
+ Socket.gethostname
151
+ end
152
+
153
+ # local_uptime
154
+ #
155
+ # Returns the local uptime in hours. Use Win32API in Windows,
156
+ # 'sysctl -b kern.boottime' os osx, and 'who -b' on unix.
157
+ # Based on Ruby Quiz solutions by: Matthias Reitinger
158
+ # On Windows, see also: net statistics server
159
+ def local_uptime
160
+
161
+ # Each method must return uptime in seconds
162
+ methods = {
163
+
164
+ :win32_windows => lambda {
165
+ # Win32API is required in self.guess
166
+ getTickCount = Win32API.new("kernel32", "GetTickCount", nil, 'L')
167
+ ((getTickCount.call()).to_f / 1000).to_f
168
+ },
169
+
170
+ # Ya, this is kinda wack. Ruby -> Java -> Kernel32. See:
171
+ # http://www.oreillynet.com/ruby/blog/2008/01/jruby_meets_the_windows_api_1.html
172
+ # http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx
173
+ # Ruby 1.9.1: Win32API is now deprecated in favor of using the DL library.
174
+ :java_windows => lambda {
175
+ kernel32 = com.sun.jna.NativeLibrary.getInstance('kernel32')
176
+ buf = java.nio.ByteBuffer.allocate(256)
177
+ (kernel32.getFunction('GetTickCount').invokeInt([256, buf].to_java).to_f / 1000).to_f
178
+ },
179
+
180
+ :unix_osx => lambda {
181
+ # This is faster than who and could work on BSD also.
182
+ (Time.now.to_f - Time.at(`sysctl -b kern.boottime 2>/dev/null`.unpack('L').first).to_f).to_f
183
+ },
184
+ # This should work for most unix flavours.
185
+ :unix => lambda {
186
+ # who is sloooooow. Use File.read('/proc/uptime')
187
+ (Time.now.to_f - Time.parse(`who -b 2>/dev/null`).to_f)
188
+ }
189
+ }
190
+
191
+ hours = 0
192
+
193
+ begin
194
+ key = platform
195
+ method = (methods.has_key? key) ? methods[key] : methods[:unix]
196
+ hours = (method.call) / 3600 # seconds to hours
197
+ rescue => ex
198
+ end
199
+ hours
200
+ end
201
+
202
+
203
+ #
204
+ # Return the local IP address which receives external traffic
205
+ # from: http://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/
206
+ # NOTE: This <em>does not</em> open a connection to the IP address.
207
+ def local_ip_address
208
+ # turn off reverse DNS resolution temporarily
209
+ orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true
210
+ UDPSocket.open {|s| s.connect('75.101.137.7', 1); s.addr.last } # Solutious IP
211
+ ensure
212
+ Socket.do_not_reverse_lookup = orig
213
+ end
214
+
215
+ #
216
+ # Returns the local IP address based on the hostname.
217
+ # According to coderrr (see comments on blog link above), this implementation
218
+ # doesn't guarantee that it will return the address for the interface external
219
+ # traffic goes through. It's also possible the hostname isn't resolvable to the
220
+ # local IP.
221
+ def local_ip_address_alt
222
+ ipaddr = :unknown
223
+ begin
224
+ saddr = Socket.getaddrinfo( Socket.gethostname, nil, Socket::AF_UNSPEC, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME)
225
+ ipaddr = saddr.select{|type| type[0] == 'AF_INET' }[0][3]
226
+ rescue => ex
227
+ end
228
+ ipaddr
229
+ end
230
+
231
+ # returns a symbol in the form: os_implementation. This is used throughout Stella
232
+ # for platform specific support.
233
+ def platform
234
+ "#{@os}_#{@implementation}".to_sym
235
+ end
236
+
237
+ # Returns Ruby version as an array
238
+ def ruby
239
+ RUBY_VERSION.split('.').map { |v| v.to_i }
240
+ end
241
+
242
+ # Returns the environment PATH as an Array
243
+ def paths
244
+ if @os == :unix
245
+ (ENV['PATH'] || '').split(':')
246
+ elsif
247
+ (ENV['PATH'] || '').split(';') # Note tested!
248
+ else
249
+ raise "paths not implemented for: #{@os}"
250
+ end
251
+ end
252
+
253
+ def user
254
+ ENV['USER']
255
+ end
256
+
257
+ def home
258
+ if @os == :unix
259
+ File.expand_path(ENV['HOME'])
260
+ elsif @os == :win32
261
+ File.expand_path(ENV['USERPROFILE'])
262
+ else
263
+ raise "paths not implemented for: #{@os}"
264
+ end
265
+ end
266
+
267
+ # Print friendly system information.
268
+ def to_s
269
+ sprintf("Hostname: %s#{$/}IP Address: %s#{$/}System: %s#{$/}Uptime: %.2f (hours)#{$/}Ruby: #{ruby.join('.')}",
270
+ @hostname, @ipaddress, "#{@os}-#{@implementation}-#{@architecture}", @uptime)
271
+ end
272
+
273
+
274
+ end
@@ -3,25 +3,20 @@ require 'ostruct'
3
3
 
4
4
  module Tryouts
5
5
 
6
- def before(&b)
7
- b.call
8
- end
9
- def after(&b)
10
- at_exit &b
11
- end
12
-
13
-
14
6
  # tryout :name do
15
7
  # ...
16
8
  # end
17
9
  def tryout(name, &b)
10
+ puts '-'*50
18
11
  puts "Running#{@poop}: #{name}"
19
12
  begin
20
13
  b.call
21
- puts $/*2
22
- sleep 1
14
+ sleep 0.1
23
15
  rescue Interrupt
24
- end
16
+ rescue => ex
17
+ STDERR.puts "Tryout error: #{ex.message}"
18
+ end
19
+ puts $/*2
25
20
  end
26
21
 
27
22
  # Ignore everything
@@ -36,5 +31,3 @@ module Tryouts
36
31
  end
37
32
 
38
33
  end
39
-
40
- include Tryouts
@@ -1,12 +1,38 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "rudy"
3
- s.version = "0.4.0"
4
- s.summary = "Your friend in staging and deploying with EC2."
3
+ s.rubyforge_project = 'rudy'
4
+ s.version = "0.6.0"
5
+ s.summary = "Rudy: Not your grandparent's deployment tool."
5
6
  s.description = s.summary
6
7
  s.author = "Delano Mandelbaum"
7
8
  s.email = "delano@solutious.com"
8
9
  s.homepage = "http://github.com/solutious/rudy"
9
-
10
+
11
+ s.extra_rdoc_files = %w[README.rdoc Rudyfile LICENSE.txt CHANGES.txt ]
12
+ s.has_rdoc = true
13
+ s.rdoc_options = ["--line-numbers", "--title", s.summary, "--main", "README.rdoc"]
14
+ s.require_paths = %w[lib]
15
+ s.rubygems_version = '1.1.1'
16
+
17
+ s.add_dependency 'drydock', '>= 0.5.5'
18
+ s.add_dependency 'caesars', '>= 0.5.4'
19
+ s.add_dependency 'rye', '>= 0.5.1'
20
+
21
+ s.add_dependency 'echoe'
22
+ s.add_dependency 'amazon-ec2', '>= 0.3.8' # region fix
23
+ s.add_dependency 'net-ssh', '>=2.0.9'
24
+ s.add_dependency 'net-scp', '>=1.0.2'
25
+ s.add_dependency 'net-ssh-gateway'
26
+ s.add_dependency 'net-ssh-multi'
27
+
28
+ # http://bit.ly/2WaAgV
29
+ #s.add_runtime_dependency('xml-simple', '>= 1.0.11')
30
+ #s.add_dependency('xml-simple', '>= 1.0.11')
31
+ #s.add_development_dependency('jgre-monkeyspecdoc', '>= 0.1.0')
32
+ #s.add_development_dependency('thoughtbot-shoulda', '>= 0.1.0')
33
+
34
+ s.executables = %w[ird rudy rudy-ec2 rudy-sdb rudy-s3]
35
+
10
36
  # = MANIFEST =
11
37
  # git ls-files
12
38
  s.files = %w(
@@ -14,61 +40,121 @@
14
40
  LICENSE.txt
15
41
  README.rdoc
16
42
  Rakefile
43
+ Rudyfile
44
+ bin/ird
17
45
  bin/rudy
18
46
  bin/rudy-ec2
19
- lib/aws_sdb.rb
20
- lib/aws_sdb/error.rb
21
- lib/aws_sdb/service.rb
47
+ bin/rudy-s3
48
+ bin/rudy-sdb
49
+ lib/annoy.rb
22
50
  lib/console.rb
51
+ lib/escape.rb
23
52
  lib/rudy.rb
24
53
  lib/rudy/aws.rb
25
54
  lib/rudy/aws/ec2.rb
55
+ lib/rudy/aws/ec2/address.rb
56
+ lib/rudy/aws/ec2/group.rb
57
+ lib/rudy/aws/ec2/image.rb
58
+ lib/rudy/aws/ec2/instance.rb
59
+ lib/rudy/aws/ec2/keypair.rb
60
+ lib/rudy/aws/ec2/snapshot.rb
61
+ lib/rudy/aws/ec2/volume.rb
62
+ lib/rudy/aws/ec2/zone.rb
26
63
  lib/rudy/aws/s3.rb
27
- lib/rudy/aws/simpledb.rb
28
- lib/rudy/command/addresses.rb
29
- lib/rudy/command/backups.rb
30
- lib/rudy/command/base.rb
31
- lib/rudy/command/config.rb
32
- lib/rudy/command/deploy.rb
33
- lib/rudy/command/disks.rb
34
- lib/rudy/command/environment.rb
35
- lib/rudy/command/groups.rb
36
- lib/rudy/command/images.rb
37
- lib/rudy/command/instances.rb
38
- lib/rudy/command/machines.rb
39
- lib/rudy/command/metadata.rb
40
- lib/rudy/command/release.rb
41
- lib/rudy/command/volumes.rb
64
+ lib/rudy/aws/sdb.rb
65
+ lib/rudy/aws/sdb/error.rb
66
+ lib/rudy/backup.rb
67
+ lib/rudy/cli.rb
68
+ lib/rudy/cli/aws/ec2/addresses.rb
69
+ lib/rudy/cli/aws/ec2/candy.rb
70
+ lib/rudy/cli/aws/ec2/groups.rb
71
+ lib/rudy/cli/aws/ec2/images.rb
72
+ lib/rudy/cli/aws/ec2/instances.rb
73
+ lib/rudy/cli/aws/ec2/keypairs.rb
74
+ lib/rudy/cli/aws/ec2/snapshots.rb
75
+ lib/rudy/cli/aws/ec2/volumes.rb
76
+ lib/rudy/cli/aws/ec2/zones.rb
77
+ lib/rudy/cli/aws/s3/buckets.rb
78
+ lib/rudy/cli/aws/s3/store.rb
79
+ lib/rudy/cli/aws/sdb/domains.rb
80
+ lib/rudy/cli/candy.rb
81
+ lib/rudy/cli/config.rb
82
+ lib/rudy/cli/disks.rb
83
+ lib/rudy/cli/machines.rb
84
+ lib/rudy/cli/routines.rb
42
85
  lib/rudy/config.rb
86
+ lib/rudy/config/objects.rb
87
+ lib/rudy/disks.rb
88
+ lib/rudy/global.rb
89
+ lib/rudy/huxtable.rb
90
+ lib/rudy/machines.rb
43
91
  lib/rudy/metadata.rb
44
- lib/rudy/metadata/backup.rb
45
- lib/rudy/metadata/disk.rb
92
+ lib/rudy/routines.rb
93
+ lib/rudy/routines/helpers/diskhelper.rb
94
+ lib/rudy/routines/helpers/scripthelper.rb
95
+ lib/rudy/routines/release.rb
96
+ lib/rudy/routines/shutdown.rb
97
+ lib/rudy/routines/startup.rb
46
98
  lib/rudy/scm/svn.rb
47
99
  lib/rudy/utils.rb
48
100
  lib/storable.rb
101
+ lib/sysinfo.rb
49
102
  lib/tryouts.rb
50
103
  rudy.gemspec
51
104
  support/mailtest
105
+ support/randomize-root-password
52
106
  support/rudy-ec2-startup
53
- tryouts/console_tryout.rb
107
+ support/update-ec2-ami-tools
108
+ test/05_config/00_setup_test.rb
109
+ test/05_config/30_machines_test.rb
110
+ test/20_sdb/00_setup_test.rb
111
+ test/20_sdb/10_domains_test.rb
112
+ test/25_ec2/00_setup_test.rb
113
+ test/25_ec2/10_keypairs_test.rb
114
+ test/25_ec2/20_groups_test.rb
115
+ test/25_ec2/30_addresses_test.rb
116
+ test/25_ec2/40_volumes_test.rb
117
+ test/25_ec2/50_snapshots_test.rb
118
+ test/26_ec2_instances/00_setup_test.rb
119
+ test/26_ec2_instances/10_instances_test.rb
120
+ test/26_ec2_instances/50_images_test.rb
121
+ test/30_sdb_metadata/00_setup_test.rb
122
+ test/30_sdb_metadata/10_disks_test.rb
123
+ test/30_sdb_metadata/20_backups_test.rb
124
+ test/coverage.txt
125
+ test/helper.rb
126
+ vendor/highline-1.5.1/CHANGELOG
127
+ vendor/highline-1.5.1/INSTALL
128
+ vendor/highline-1.5.1/LICENSE
129
+ vendor/highline-1.5.1/README
130
+ vendor/highline-1.5.1/Rakefile
131
+ vendor/highline-1.5.1/TODO
132
+ vendor/highline-1.5.1/examples/ansi_colors.rb
133
+ vendor/highline-1.5.1/examples/asking_for_arrays.rb
134
+ vendor/highline-1.5.1/examples/basic_usage.rb
135
+ vendor/highline-1.5.1/examples/color_scheme.rb
136
+ vendor/highline-1.5.1/examples/limit.rb
137
+ vendor/highline-1.5.1/examples/menus.rb
138
+ vendor/highline-1.5.1/examples/overwrite.rb
139
+ vendor/highline-1.5.1/examples/page_and_wrap.rb
140
+ vendor/highline-1.5.1/examples/password.rb
141
+ vendor/highline-1.5.1/examples/trapping_eof.rb
142
+ vendor/highline-1.5.1/examples/using_readline.rb
143
+ vendor/highline-1.5.1/lib/highline.rb
144
+ vendor/highline-1.5.1/lib/highline/color_scheme.rb
145
+ vendor/highline-1.5.1/lib/highline/compatibility.rb
146
+ vendor/highline-1.5.1/lib/highline/import.rb
147
+ vendor/highline-1.5.1/lib/highline/menu.rb
148
+ vendor/highline-1.5.1/lib/highline/question.rb
149
+ vendor/highline-1.5.1/lib/highline/system_extensions.rb
150
+ vendor/highline-1.5.1/setup.rb
151
+ vendor/highline-1.5.1/test/tc_color_scheme.rb
152
+ vendor/highline-1.5.1/test/tc_highline.rb
153
+ vendor/highline-1.5.1/test/tc_import.rb
154
+ vendor/highline-1.5.1/test/tc_menu.rb
155
+ vendor/highline-1.5.1/test/ts_all.rb
54
156
  )
55
- s.executables = %w[rudy]
56
-
57
- s.extra_rdoc_files = %w[README.rdoc LICENSE.txt]
58
- s.has_rdoc = true
59
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rudy: #{s.summary}", "--main", "README.rdoc"]
60
- s.require_paths = %w[lib]
61
- s.rubygems_version = '1.1.1'
62
157
 
63
158
 
64
- s.add_dependency 'drydock'
65
- s.add_dependency 'caesars'
66
- s.add_dependency 'net-ssh'
67
- s.add_dependency 'net-scp'
68
- s.add_dependency 'net-ssh-gateway'
69
- s.add_dependency 'net-ssh-multi'
70
- s.add_dependency 'highline'
71
-
72
-
73
- s.rubyforge_project = 'rudy'
74
- end
159
+ end
160
+