rudy 0.4.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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
+