rudy 0.7.4 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.txt CHANGED
@@ -1,11 +1,19 @@
1
1
  RUDY, CHANGES
2
2
 
3
- * TODO: Remove string messages for non-string output formats
4
- * TODO: Support for reserved instances
5
- * TODO: Tests for zone and region support
6
- * TODO: Support for machine image attributes
7
- * TODO: Support for product codes
8
- * TODO: Tests for AWS HTTPS
3
+
4
+ #### 0.7.6 (2009-05-18) ###############################
5
+
6
+ * ADDED: Better windows instance support during routines
7
+ * ADDED: "os" keyword to routines DSL
8
+ * ADDED: Config defaults for "yes" global (thanks sabat)
9
+ * FIXED: Handle exception when assigning inappropriate IP Address.
10
+
11
+
12
+ #### 0.7.5 (2009-05-12) ###############################
13
+
14
+ * CHANGE: rudy-ec2 console now displays windows password automatically if keypair is supplied.
15
+ * ADDED: register and destroy commands to rudy-ec2 images
16
+
9
17
 
10
18
  #### 0.7.4 (2009-05-10) ###############################
11
19
 
data/README.rdoc CHANGED
@@ -105,6 +105,14 @@ I'm very open to contributions!
105
105
  * Rudy::AWS::SDB adapted from aws_sdb by Tim Dysinger (http://dysinger.net)
106
106
 
107
107
 
108
+ == Related Projects
109
+
110
+ * Pool Party -- http://www.poolpartyrb.com/
111
+ * Rubber -- http://github.com/wr0ngway/rubber/wikis
112
+ * Moonshine -- http://github.com/railsmachine/moonshine/tree
113
+ * Boto -- http://code.google.com/p/boto/
114
+
115
+
108
116
  == License
109
117
 
110
118
  See: LICENSE.txt
data/Rudyfile CHANGED
@@ -169,13 +169,13 @@ routines do
169
169
 
170
170
  anything do # $ rudy anything
171
171
  before :display_uptime # Specify a dependency
172
- script Rudy.sysinfo.user do # This is Ruby, so any valid syntax
173
- ls :l, Rudy.sysinfo.home # can be used in the definitions.
172
+ script :rudy do # This is Ruby, so any valid syntax
173
+ ls :l # can be used in the definitions.
174
174
  end # See: SysInfo gem for more info.
175
175
  end
176
176
 
177
177
  display_uptime do # $ rudy display-uptime
178
- script Rudy.sysinfo.user do # NOTE: You can use 'dashes' on the
178
+ script :rudy do # NOTE: You can use 'dashes' on the
179
179
  uptime # command-line instead of underscores
180
180
  end
181
181
  end
data/bin/rudy CHANGED
@@ -9,8 +9,7 @@
9
9
  #
10
10
 
11
11
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
12
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'drydock', 'lib')
13
- #require 'rubygems'
12
+ #$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'drydock', 'lib')
14
13
 
15
14
  #$SAFE = 1 # require is unsafe in Ruby 1.9??
16
15
 
@@ -21,7 +20,7 @@ require 'rudy/cli'
21
20
  # Command-line interface for /bin/rudy
22
21
  class RudyCLI < Rudy::CLI::Base
23
22
 
24
- debug :off
23
+ debug :on
25
24
  default :machines
26
25
  trawler :passthrough
27
26
 
data/bin/rudy-ec2 CHANGED
@@ -10,12 +10,11 @@
10
10
  #
11
11
 
12
12
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
13
- #require 'rubygems'
14
13
 
14
+ require 'drydock'
15
15
  require 'rudy'
16
16
  require 'rudy/cli'
17
17
 
18
- require 'drydock'
19
18
 
20
19
  # Command-line interface for bin/rudy-ec2
21
20
  module RudyCLI_EC2
@@ -102,6 +101,7 @@ module RudyCLI_EC2
102
101
  usage "rudy-ec2 images -o 123456789012"
103
102
  usage "rudy-ec2 images -o amazon"
104
103
  usage "rudy-ec2 images -o self"
104
+ usage "rudy-ec2 images -R bucket/ami-name.manifest.xml"
105
105
  option :o, :owner, String, "Amazon Account Number or one of: amazon, self"
106
106
  option :l, :all, "Display all registered machine images (warning: slow)"
107
107
  #option :p, :private, "Private images only"
@@ -110,6 +110,7 @@ module RudyCLI_EC2
110
110
  option :u, :user, String, "Username to connect as (used for creating an image)"
111
111
  action :C, :create, "Create an image"
112
112
  #action :P, :prepare, "Prepare a running instance to be used as an image"
113
+ action :R, :register, "Register an image"
113
114
  action :D, :destroy, "Deregister an image (does not remove image files from S3)"
114
115
  argv :ami
115
116
  command :images => Rudy::CLI::AWS::EC2::Images
data/bin/rudy-s3 CHANGED
@@ -10,11 +10,10 @@
10
10
  #
11
11
 
12
12
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
13
- #require 'rubygems'
14
13
 
14
+ require 'drydock'
15
15
  require 'rudy'
16
16
  require 'rudy/cli'
17
- require 'drydock'
18
17
 
19
18
  # Command-line interface for bin/rudy-s3
20
19
  module RudyCLI_S3
data/bin/rudy-sdb CHANGED
@@ -10,11 +10,10 @@
10
10
  #
11
11
 
12
12
  $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') # Put our local lib in first place
13
- #require 'rubygems'
14
13
 
14
+ require 'drydock'
15
15
  require 'rudy'
16
16
  require 'rudy/cli'
17
- require 'drydock'
18
17
 
19
18
  # Command-line interface for bin/rudy-sdb
20
19
  module RudyCLI_SDB
@@ -54,8 +54,8 @@ module Rudy::AWS
54
54
 
55
55
  address = address.ipaddress if address.is_a?(Rudy::AWS::EC2::Address)
56
56
  instance = instance.awsid if instance.is_a?(Rudy::AWS::EC2::Instance)
57
- raise UnknownAddress unless exists?(address)
58
- raise AddressAssociated if associated?(address)
57
+ raise UnknownAddress, address unless exists?(address)
58
+ raise AddressAssociated, address if associated?(address)
59
59
 
60
60
  opts ={
61
61
  :instance_id => instance,
@@ -134,7 +134,7 @@ module Rudy::AWS
134
134
  # Returns true if the given address is assigned to the current account
135
135
  def exists?(address)
136
136
  address = address.ipaddress if address.is_a?(Rudy::AWS::EC2::Address)
137
- list.each do |a|
137
+ list do |a|
138
138
  return true if a.ipaddress == address
139
139
  end
140
140
  false
@@ -106,7 +106,7 @@ module Rudy::AWS
106
106
  :image_id => id
107
107
  }
108
108
  ret = @ec2.deregister_image(opts)
109
- puts ret.to_yaml
109
+ return false unless ret && ret.is_a?(Hash)
110
110
  true
111
111
  end
112
112
 
@@ -117,8 +117,8 @@ module Rudy::AWS
117
117
  :image_location => path
118
118
  }
119
119
  ret = @ec2.register_image(opts)
120
- puts ret.to_yaml
121
- true
120
+ return nil unless ret && ret.is_a?(Hash)
121
+ ret['imageId']
122
122
  end
123
123
 
124
124
  # imageOwnerId: "203338247012"
@@ -155,24 +155,24 @@ module AWS; module EC2;
155
155
 
156
156
  end
157
157
 
158
- def deregister_valid?
158
+ def destroy_images_valid?
159
159
  unless @argv.ami && Rudy::Utils.is_id?(:image, @argv.ami)
160
- raise "You must supply an AMI ID (ami-XXXXXXX)"
160
+ raise "Must supply an AMI ID (ami-XXXXXXX)"
161
161
  end
162
+ @rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region)
162
163
  end
163
- def deregister
164
- puts "Deregistering #{@argv.ami}"
165
-
166
- execute_check(:medium)
167
-
168
- rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region)
169
-
170
- if rimages.deregister(ami)
171
- puts "Done!"
172
- else
173
- puts "There was an unknown problem!"
164
+ def destroy_images
165
+ puts @rimages.deregister(@argv.ami) ? "Done" : "Unknown error"
166
+ end
167
+
168
+ def register_images_valid?
169
+ unless @argv.first
170
+ raise "Must supply a valid manifest path (bucket/ami-name.manifest.xml)"
174
171
  end
175
-
172
+ @rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region)
173
+ end
174
+ def register_images
175
+ puts @rimages.register(@argv.first)
176
176
  end
177
177
 
178
178
 
@@ -144,11 +144,8 @@ module AWS; module EC2;
144
144
  encrtypted_text = ($1 || '').strip
145
145
  k = Rye::Key.from_file(@@global.pkey)
146
146
  pword = k.decrypt(encrtypted_text)
147
- ret = Annoy.pose_question("Display password?\a ", /yes|y|ya|sure|you bet!/i, STDERR)
148
- if ret
149
- answer = "%s: %s" % ['password', pword]
150
- Annoy.timed_display(answer, STDERR, 10)
151
- end
147
+ answer = "%s: %s" % ['password', pword]
148
+ Annoy.timed_display(answer, STDERR, 10)
152
149
  puts
153
150
  else
154
151
  puts "Please supply a private key path to decode the administrator password"
data/lib/rudy/config.rb CHANGED
@@ -102,7 +102,8 @@ module Rudy
102
102
  environment :stage
103
103
  role :app
104
104
  user Rudy.sysinfo.user.to_sym
105
- color false # set to true for terminal colors
105
+ color false # Terminal colors? true/false
106
+ yes false # Auto-confirm? true/false
106
107
  end
107
108
  }
108
109
  Rudy::Utils.write_to_file(Rudy::CONFIG_FILE, rudy_config, 'w', 0600)
data/lib/rudy/global.rb CHANGED
@@ -56,7 +56,7 @@ module Rudy
56
56
  if config.defaults?
57
57
  # Apply the "color" default before "nocolor" so nocolor has presedence
58
58
  @nocolor = !config.defaults.color unless config.defaults.color.nil?
59
- %w[region zone environment role position user nocolor quiet].each do |name|
59
+ %w[region zone environment role position user nocolor quiet yes].each do |name|
60
60
  val = config.defaults.send(name)
61
61
  self.send("#{name}=", val) unless val.nil?
62
62
  end
@@ -101,6 +101,7 @@ module Rudy
101
101
  @position &&= @position.to_s.rjust(2, '0')
102
102
  @format &&= @format.to_sym rescue nil
103
103
  @quiet ? Rudy.enable_quiet : Rudy.disable_quiet
104
+ @yes ? Rudy.enable_yes : Rudy.disable_yes
104
105
  end
105
106
 
106
107
  def apply_environment_variables
data/lib/rudy/huxtable.rb CHANGED
@@ -188,6 +188,10 @@ module Rudy
188
188
  fetch_machine_param(:ami)
189
189
  end
190
190
 
191
+ def current_machine_os
192
+ fetch_machine_param(:os) || 'linux'
193
+ end
194
+
191
195
  def current_machine_size
192
196
  fetch_machine_param(:size) || 'm1.small'
193
197
  end
data/lib/rudy/machines.rb CHANGED
@@ -21,6 +21,8 @@ module Rudy
21
21
  field :dns_private
22
22
  field :state
23
23
 
24
+ field :os
25
+
24
26
  attr_reader :instance
25
27
 
26
28
  def init
@@ -32,6 +34,7 @@ module Rudy
32
34
  @role = @@global.role
33
35
  @position = find_next_position || '01'
34
36
  @state = 'no-instance'
37
+ @os = 'unknown'
35
38
  end
36
39
 
37
40
  def liner_note
@@ -117,20 +120,29 @@ module Rudy
117
120
  :machine_data => Machine.generate_machine_data.to_yaml
118
121
  }.merge(opts)
119
122
 
123
+ @os = current_machine_os
124
+
120
125
  @ec2inst.create(opts) do |inst|
121
126
  @awsid = inst.awsid
122
127
  @created = @starts = Time.now
123
128
  @state = inst.state
124
- # Assign IP address only if we have one for that position
125
- if current_machine_address(@position)
129
+ # We need to be safe when creating machines because if an exception is
130
+ # raised, instances will have been creating but the calling class won't know.
131
+ begin
126
132
  address = current_machine_address(@position)
127
- puts "Associating #{address} to #{inst.awsid}"
128
- begin
129
- @radd.associate(address, inst.awsid)
130
- rescue => ex
131
- STDERR.puts "Error while associating address (#{ex.class.to_s})"
132
- Rudy::Utils.bug()
133
+ # Assign IP address only if we have one for that position
134
+ if address
135
+ # Make sure the address is associated to the current account
136
+ if @radd.exists?(address)
137
+ puts "Associating #{address} to #{inst.awsid}"
138
+ @radd.associate(address, inst.awsid)
139
+ else
140
+ STDERR.puts "Unknown address: #{address}"
141
+ end
133
142
  end
143
+ rescue => ex
144
+ STDERR.puts "Error: #{ex.message}"
145
+ STDERR.puts ex.backtrace if Rudy.debug?
134
146
  end
135
147
  end
136
148
 
data/lib/rudy/metadata.rb CHANGED
@@ -6,6 +6,7 @@ module Rudy
6
6
  def initialize(*args)
7
7
  a, s, r = @@global.accesskey, @@global.secretkey, @@global.region
8
8
  @sdb = Rudy::AWS::SDB.new(a, s, r)
9
+ @radd = Rudy::AWS::EC2::Addresses.new(a, s, r)
9
10
  @rinst = Rudy::AWS::EC2::Instances.new(a, s, r)
10
11
  @rgrp = Rudy::AWS::EC2::Groups.new(a, s, r)
11
12
  @rkey = Rudy::AWS::EC2::KeyPairs.new(a, s, r)
@@ -23,13 +23,11 @@ module Rudy; module Routines;
23
23
  end
24
24
  end
25
25
 
26
- machines = []
27
- generic_machine_runner(:list) do |machine,rbox|
26
+ machines = generic_machine_runner(:list) do |machine,rbox|
28
27
  vlist.each do |scm|
29
28
  puts task_separator("CREATING REMOTE #{scm.engine.to_s.upcase} CHECKOUT")
30
29
  scm.create_remote_checkout(rbox)
31
30
  end
32
- machines << machine
33
31
  end
34
32
 
35
33
  machines
@@ -13,10 +13,9 @@ module Rudy; module Routines;
13
13
  STDERR.puts "[this is a generic shutdown routine]"
14
14
  @routine = {}
15
15
  end
16
- machines = []
17
- generic_machine_runner(:destroy) do |machine,rbox|
18
- puts $/, "Shutting down...", $/
19
- machines << machine
16
+
17
+ machines = generic_machine_runner(:list) do |machine|
18
+ machine.destroy
20
19
  end
21
20
  machines
22
21
  end
@@ -24,8 +23,10 @@ module Rudy; module Routines;
24
23
  # Called by generic_machine_runner
25
24
  def raise_early_exceptions
26
25
  rmach = Rudy::Machines.new
27
- raise Rudy::PrivateKeyNotFound, root_keypairpath unless has_keypair?(:root)
28
26
  raise MachineGroupNotRunning, current_machine_group unless rmach.running?
27
+ # Check private key after machine group, otherwise we could get an error
28
+ # about there being no key which doesn't make sense if the group isn't running.
29
+ raise Rudy::PrivateKeyNotFound, root_keypairpath unless has_keypair?(:root)
29
30
  end
30
31
 
31
32
  end
@@ -10,16 +10,14 @@ module Rudy; module Routines;
10
10
  # * +each_mach+ is an optional block which is executed between
11
11
  # disk creation and the after scripts. The will receives two
12
12
  # arguments: instances of Rudy::Machine and Rye::Box.
13
+ # Returns an Array of Rudy::Machine objects
13
14
  def execute(&each_mach)
14
15
  routine_separator(:startup)
15
16
  unless @routine
16
17
  STDERR.puts "[this is a generic startup routine]"
17
18
  @routine = {}
18
19
  end
19
- machines = []
20
- generic_machine_runner(:create) do |machine,rbox|
21
- machines << machine
22
- end
20
+ machines = generic_machine_runner(:create)
23
21
  machines
24
22
  end
25
23
 
data/lib/rudy/routines.rb CHANGED
@@ -94,13 +94,11 @@ module Rudy
94
94
  end
95
95
  }
96
96
 
97
- unless has_remote_task?(routine)
98
- puts "[no remote tasks]"
99
- return
100
- end
101
97
 
102
- # Execute the action (create, list, destroy, restart) & apply the block to each
103
- rmach.send(machine_action) do |machine|
98
+ # Execute the action (create, list, destroy, restart)
99
+ machines = enjoy_every_sandwich([]) { rmach.send(machine_action) }
100
+
101
+ machines.each do |machine|
104
102
  puts machine_separator(machine.name, machine.awsid) unless skip_header
105
103
 
106
104
  unless skip_check
@@ -109,15 +107,19 @@ module Rudy
109
107
  inst = machine.get_instance
110
108
  inst && inst.running?
111
109
  }
110
+ end
112
111
 
113
- # Add instance info to machine and save it. This is really important
114
- # for the initial startup so the metadata is updated right away. But
115
- # it's also important to call here because if a routine was executed
116
- # and an unexpected exception occurs before this update is executed
117
- # the machine metadata won't contain the DNS information. Calling it
118
- # here ensure that the metadata is always up-to-date.
119
- machine.update
112
+ # Add instance info to machine and save it. This is really important
113
+ # for the initial startup so the metadata is updated right away. But
114
+ # it's also important to call here because if a routine was executed
115
+ # and an unexpected exception occurs before this update is executed
116
+ # the machine metadata won't contain the DNS information. Calling it
117
+ # here ensure that the metadata is always up-to-date.
118
+ machine.update
120
119
 
120
+ next if (machine.os || '').to_s == 'win32'
121
+
122
+ unless skip_check
121
123
  msg = preliminary_separator("Waiting for SSH daemon...")
122
124
  Rudy::Utils.waiter(2, 60, STDOUT, msg, 0) {
123
125
  Rudy::Utils.service_available?(machine.dns_public, 22)
@@ -152,7 +154,13 @@ module Rudy
152
154
  }
153
155
  end
154
156
 
155
-
157
+ ## NOTE: This prevents shutdown from doing its thing and prob
158
+ ## isn't necessary.
159
+ ##unless has_remote_task?(routine)
160
+ ## puts "[no remote tasks]"
161
+ ## next
162
+ ##end
163
+
156
164
  enjoy_every_sandwich {
157
165
  if Rudy::Routines::UserHelper.adduser?(routine) # adduser
158
166
  puts task_separator("ADD USER")
@@ -229,6 +237,7 @@ module Rudy
229
237
  execute_dependency(after_dependencies, skip_check, skip_header)
230
238
  }
231
239
 
240
+ machines
232
241
  end
233
242
 
234
243
  def execute_dependency(depends, skip_check, skip_header)
@@ -293,14 +302,15 @@ module Rudy
293
302
  #puts '%-40s' % [name.bright]
294
303
  end
295
304
 
296
- def enjoy_every_sandwich(&bloc_party)
305
+ def enjoy_every_sandwich(ret=nil, &bloc_party)
297
306
  begin
298
- bloc_party.call
307
+ ret = bloc_party.call
299
308
  rescue => ex
300
309
  STDERR.puts " Error: #{ex.message}".color(:red)
301
310
  STDERR.puts ex.backtrace if Rudy.debug?
302
311
  exit 12 unless keep_going?
303
312
  end
313
+ ret
304
314
  end
305
315
 
306
316
  def keep_going?
data/lib/rudy.rb CHANGED
@@ -4,8 +4,8 @@ unless defined?(RUDY_HOME)
4
4
  RUDY_LIB = File.join(File.dirname(__FILE__), '..', 'lib')
5
5
  end
6
6
 
7
- #local_libs = %w{net-scp amazon-ec2 aws-s3 caesars drydock rye storable sysinfo annoy}
8
- #local_libs.each { |dir| $:.unshift File.join(RUDY_HOME, '..', dir, 'lib') }
7
+ local_libs = %w{net-scp amazon-ec2 aws-s3 caesars drydock rye storable sysinfo annoy}
8
+ local_libs.each { |dir| $:.unshift File.join(RUDY_HOME, '..', dir, 'lib') }
9
9
 
10
10
  require 'digest/md5'
11
11
  require 'stringio'
@@ -38,7 +38,7 @@ module Rudy
38
38
  unless defined?(MAJOR)
39
39
  MAJOR = 0.freeze
40
40
  MINOR = 7.freeze
41
- TINY = 4.freeze
41
+ TINY = 6.freeze
42
42
  end
43
43
  def self.to_s; [MAJOR, MINOR, TINY].join('.'); end
44
44
  def self.to_f; self.to_s.to_f; end
@@ -88,6 +88,7 @@ module Rudy
88
88
  }.freeze
89
89
 
90
90
  @@quiet = false
91
+ @@yes = false
91
92
  @@debug = false
92
93
  @@sysinfo = SysInfo.new.freeze
93
94
 
@@ -95,10 +96,13 @@ module Rudy
95
96
 
96
97
  def Rudy.debug?; @@debug == true; end
97
98
  def Rudy.quiet?; @@quiet == true; end
99
+ def Rudy.yes?; @@yes == true; end
98
100
  def Rudy.enable_debug; @@debug = true; end
99
101
  def Rudy.enable_quiet; @@quiet = true; end
102
+ def Rudy.enable_yes; @@yes = true; end
100
103
  def Rudy.disable_debug; @@debug = false; end
101
104
  def Rudy.disable_quiet; @@quiet = false; end
105
+ def Rudy.disable_yes; @@yes = false; end
102
106
 
103
107
  def Rudy.sysinfo; @@sysinfo; end
104
108
  def sysinfo; @@sysinfo; end
data/rudy.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "rudy"
3
3
  s.rubyforge_project = 'rudy'
4
- s.version = "0.7.4"
4
+ s.version = "0.7.6"
5
5
  s.summary = "Rudy: Not your grandparents' EC2 deployment tool."
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
@@ -14,11 +14,11 @@
14
14
  s.require_paths = %w[lib]
15
15
  s.rubygems_version = '1.1.1'
16
16
 
17
- s.add_dependency 'drydock', '>= 0.6.2'
18
- s.add_dependency 'caesars', '>= 0.6.4'
19
- s.add_dependency 'rye', '>= 0.6.4'
17
+ s.add_dependency 'drydock', '>= 0.6.3'
18
+ s.add_dependency 'caesars', '>= 0.6.6'
19
+ s.add_dependency 'rye', '>= 0.6.5'
20
20
  s.add_dependency 'sysinfo', '>= 0.5.1'
21
- s.add_dependency 'storable', '>= 0.5.1'
21
+ s.add_dependency 'storable', '>= 0.5.2'
22
22
  s.add_dependency 'annoy', '>= 0.5.0'
23
23
 
24
24
  s.add_dependency 'grit'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rudy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-10 00:00:00 -04:00
12
+ date: 2009-05-18 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.6.2
23
+ version: 0.6.3
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: caesars
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.6.4
33
+ version: 0.6.6
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: rye
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.6.4
43
+ version: 0.6.5
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: sysinfo
@@ -60,7 +60,7 @@ dependencies:
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.5.1
63
+ version: 0.5.2
64
64
  version:
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: annoy