solutious-rudy 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/CHANGES.txt +40 -16
  2. data/README.rdoc +6 -6
  3. data/bin/rudy +66 -10
  4. data/bin/rudy-ec2 +3 -1
  5. data/examples/authorize.rb +15 -0
  6. data/examples/gem-test.rb +11 -5
  7. data/examples/solaris.rb +35 -0
  8. data/examples/windows.rb +101 -0
  9. data/lib/rudy.rb +7 -1
  10. data/lib/rudy/aws.rb +2 -2
  11. data/lib/rudy/aws/ec2.rb +29 -22
  12. data/lib/rudy/aws/ec2/group.rb +1 -1
  13. data/lib/rudy/aws/ec2/image.rb +1 -29
  14. data/lib/rudy/aws/ec2/instance.rb +4 -32
  15. data/lib/rudy/aws/ec2/keypair.rb +1 -6
  16. data/lib/rudy/aws/ec2/snapshot.rb +2 -20
  17. data/lib/rudy/aws/ec2/volume.rb +11 -19
  18. data/lib/rudy/aws/ec2/zone.rb +1 -6
  19. data/lib/rudy/aws/sdb.rb +1 -1
  20. data/lib/rudy/cli/aws/ec2/addresses.rb +4 -10
  21. data/lib/rudy/cli/aws/ec2/groups.rb +0 -1
  22. data/lib/rudy/cli/aws/ec2/images.rb +1 -4
  23. data/lib/rudy/cli/aws/ec2/info.rb +63 -0
  24. data/lib/rudy/cli/aws/ec2/instances.rb +3 -5
  25. data/lib/rudy/cli/aws/ec2/keypairs.rb +3 -5
  26. data/lib/rudy/cli/aws/ec2/snapshots.rb +2 -6
  27. data/lib/rudy/cli/aws/ec2/zones.rb +2 -4
  28. data/lib/rudy/cli/backups.rb +20 -9
  29. data/lib/rudy/cli/base.rb +60 -3
  30. data/lib/rudy/cli/candy.rb +1 -1
  31. data/lib/rudy/cli/disks.rb +65 -7
  32. data/lib/rudy/cli/execbase.rb +0 -2
  33. data/lib/rudy/cli/images.rb +97 -0
  34. data/lib/rudy/cli/info.rb +48 -0
  35. data/lib/rudy/cli/keypairs.rb +43 -0
  36. data/lib/rudy/cli/machines.rb +48 -38
  37. data/lib/rudy/cli/networks.rb +68 -0
  38. data/lib/rudy/cli/routines.rb +3 -10
  39. data/lib/rudy/config/objects.rb +0 -1
  40. data/lib/rudy/disks.rb +4 -0
  41. data/lib/rudy/global.rb +1 -1
  42. data/lib/rudy/huxtable.rb +9 -3
  43. data/lib/rudy/machines.rb +1 -1
  44. data/lib/rudy/metadata.rb +4 -1
  45. data/lib/rudy/metadata/backup.rb +2 -2
  46. data/lib/rudy/metadata/disk.rb +7 -4
  47. data/lib/rudy/metadata/machine.rb +66 -2
  48. data/lib/rudy/routines.rb +2 -1
  49. data/lib/rudy/routines/base.rb +4 -157
  50. data/lib/rudy/routines/handlers/base.rb +6 -3
  51. data/lib/rudy/routines/handlers/disks.rb +127 -42
  52. data/lib/rudy/routines/handlers/group.rb +45 -10
  53. data/lib/rudy/routines/handlers/host.rb +16 -10
  54. data/lib/rudy/routines/handlers/keypair.rb +26 -10
  55. data/lib/rudy/routines/handlers/rye.rb +173 -0
  56. data/lib/rudy/routines/handlers/script.rb +2 -1
  57. data/lib/rudy/routines/passthrough.rb +2 -2
  58. data/lib/rudy/routines/reboot.rb +2 -2
  59. data/lib/rudy/routines/shutdown.rb +2 -2
  60. data/lib/rudy/routines/startup.rb +4 -2
  61. data/rudy.gemspec +15 -8
  62. data/tryouts/10_require_time/10_rudy_tryouts.rb +1 -1
  63. data/tryouts/12_config/20_defaults_tryouts.rb +1 -1
  64. data/tryouts/12_config/40_machines_tryouts.rb +1 -1
  65. data/tryouts/15_huxtable/20_user_tryouts.rb +1 -1
  66. data/tryouts/25_ec2/10_keypairs_tryouts.rb +1 -0
  67. data/tryouts/30_metadata/10_include_tryouts.rb +1 -1
  68. data/tryouts/30_metadata/13_object_tryouts.rb +4 -0
  69. data/tryouts/30_metadata/50_disk_tryouts.rb +4 -2
  70. data/tryouts/30_metadata/51_disk_digest_tryouts.rb +1 -1
  71. data/tryouts/30_metadata/53_disk_list_tryouts.rb +2 -1
  72. data/tryouts/30_metadata/56_disk_volume_tryouts.rb +1 -1
  73. data/tryouts/30_metadata/60_backup_tryouts.rb +4 -2
  74. data/tryouts/30_metadata/63_backup_list_tryouts.rb +1 -1
  75. data/tryouts/30_metadata/64_backup_disk_tryouts.rb +3 -1
  76. data/tryouts/30_metadata/66_backup_snapshot_tryouts.rb +1 -1
  77. data/tryouts/30_metadata/70_machine_tryouts.rb +5 -2
  78. data/tryouts/30_metadata/73_machine_list_tryouts.rb +1 -1
  79. data/tryouts/30_metadata/76_machine_instance_tryouts.rb +15 -3
  80. data/tryouts/30_metadata/77_machines_tryouts.rb +1 -1
  81. data/tryouts/40_routines/10_keypair_handler_tryouts.rb +6 -5
  82. data/tryouts/40_routines/11_group_handler_tryouts.rb +1 -1
  83. metadata +13 -6
  84. data/lib/rudy/cli/status.rb +0 -60
@@ -4,13 +4,24 @@ module Rudy; module Routines; module Handlers;
4
4
  include Rudy::Routines::Handlers::Base
5
5
  extend self
6
6
 
7
- ##Rudy::Routines.add_handler :machines, self
7
+ Rudy::Routines.add_handler :network, self
8
8
 
9
9
 
10
- def raise_early_exceptions(name=nil)
10
+ def raise_early_exceptions(type, batch, rset, lbox, argv=nil)
11
11
 
12
12
  end
13
13
 
14
+ def execute(type, routine, rset, lbox, argv=nil)
15
+ routine.each_pair do |action, definition|
16
+ unless respond_to?(action.to_sym)
17
+ Rudy::Huxtable.le %Q(GroupHandler: unknown action "#{action}")
18
+ next
19
+ end
20
+ Rudy::Huxtable.ld %Q(GroupHandler: "#{action}")
21
+ Rudy::Routines::Handlers::Group.send(action, definition)
22
+ end
23
+ end
24
+
14
25
  def create(name=nil)
15
26
  name ||= current_group_name
16
27
  return if exists? name
@@ -18,14 +29,12 @@ module Rudy; module Routines; module Handlers;
18
29
  Rudy::AWS::EC2::Groups.create name
19
30
  end
20
31
 
21
- def authorize(name=nil, addresses=nil, ports=nil)
22
- name ||= current_group_name
23
- addresses ||= [Rudy::Utils::external_ip_address]
24
- if ports.nil?
25
- ports = current_machine_os.to_s == 'win32' ? [[3389,3389]] : [[22,22]]
26
- end
27
- li "Authorizing ports #{ports.inspect} access for: #{addresses.join(', ')}"
28
- Rudy::AWS::EC2::Groups.authorize(name, addresses, ports)
32
+ def authorize(ports=nil, addresses=nil, name=nil)
33
+ modify(:authorize, ports, addresses, name)
34
+ end
35
+
36
+ def revoke(ports=nil, addresses=nil, name=nil)
37
+ modify(:revoke, ports, addresses, name)
29
38
  end
30
39
 
31
40
  def exists?(name=nil)
@@ -40,5 +49,31 @@ module Rudy; module Routines; module Handlers;
40
49
  Rudy::AWS::EC2::Groups.destroy name
41
50
  end
42
51
 
52
+ def get(name=nil)
53
+ name ||= current_group_name
54
+ Rudy::AWS::EC2::Groups.get name
55
+ end
56
+
57
+ def list
58
+ Rudy::AWS::EC2::Groups.list
59
+ end
60
+
61
+ private
62
+ def modify(action, ports=nil, addresses=nil, name=nil)
63
+ name ||= current_group_name
64
+ addresses ||= [Rudy::Utils::external_ip_address]
65
+
66
+ if ports.nil?
67
+ ports = current_machine_os.to_s == 'windows' ? [3389,22] : [22]
68
+ else
69
+ ports = [ports].flatten.compact
70
+ end
71
+
72
+ ports.each do |port|
73
+ #li "Authorizing port #{port} access for: #{addresses.join(', ')}"
74
+ Rudy::AWS::EC2::Groups.send(action, name, addresses, [[port, port]]) rescue nil
75
+ end
76
+ end
77
+
43
78
  end
44
79
  end; end; end
@@ -10,7 +10,9 @@ module Rudy; module Routines; module Handlers;
10
10
  raise NoMachines if rset.boxes.empty?
11
11
  rset.boxes.each do |rbox|
12
12
  msg = "Waiting for #{rbox.nickname} to boot..."
13
- Rudy::Utils.waiter(3, 240, Rudy::Huxtable.logger, msg, 0) {
13
+ multi = rbox.stash.windows? ? 6 : 3
14
+ interval, max = 1*multi, 80*multi
15
+ Rudy::Utils.waiter(interval, max, Rudy::Huxtable.logger, msg, 0) {
14
16
  inst = rbox.stash.get_instance
15
17
  inst && inst.running?
16
18
  }
@@ -36,17 +38,19 @@ module Rudy; module Routines; module Handlers;
36
38
  def is_available?(rset, port=22)
37
39
  raise NoMachines if rset.boxes.empty?
38
40
  rset.boxes.each do |rbox|
39
- unless (rbox.stash.os || '').to_s == 'win32' # No SSH daemon in windows
40
- msg = "Waiting for SSH (#{port}) on #{rbox.nickname} ..."
41
- Rudy::Utils.waiter(2, 60, STDOUT, msg, 0) {
42
- Rudy::Utils.service_available?(rbox.stash.dns_public, port)
43
- }
44
- end
41
+ msg = "Waiting for port #{port} on #{rbox.nickname} ..."
42
+ port = 3389 if rbox.stash.windows?
43
+ multi = rbox.stash.windows? ? 3 : 2
44
+ interval, max = 1*multi, 30*multi
45
+ Rudy::Utils.waiter(interval, max, STDOUT, msg, 0) {
46
+ Rudy::Utils.service_available?(rbox.stash.dns_public, port)
47
+ }
45
48
  end
46
49
  end
47
50
 
48
51
  def set_hostname(rset)
49
52
  raise NoMachines if rset.boxes.empty?
53
+
50
54
  original_user = rset.user
51
55
  rset.switch_user 'root'
52
56
  rset.add_key user_keypairpath('root')
@@ -58,9 +62,11 @@ module Rudy; module Routines; module Handlers;
58
62
  # run so we may want to make this an explicit action.
59
63
  type = current_machine_hostname || :rudy
60
64
  rset.batch(type) do |hn|
61
- if hn != :default
62
- hn = self.stash.name if hn == :rudy
63
- self.quietly { hostname(hn) }
65
+ unless self.stash.os == :windows
66
+ if hn != :default
67
+ hn = self.stash.name if hn == :rudy
68
+ self.quietly { hostname(hn) }
69
+ end
64
70
  end
65
71
  end
66
72
  rset.switch_user original_user
@@ -23,17 +23,33 @@ module Rudy; module Routines; module Handlers;
23
23
  def create(name=:root)
24
24
  keyname = user_keypairname name
25
25
  kp_file = pkey name
26
- kp = nil
27
- if registered? keyname
28
- raise PrivateKeyNotFound, keyname if kp_file.nil?
26
+
27
+ if registered? name && !@@global.force
29
28
  raise PrivateKeyNotFound, kp_file if !File.exists?(kp_file)
30
- else
31
- raise PrivateKeyFileExists, kp_file if File.exists?(kp_file)
32
- li "Creating keypair: #{keyname}"
33
- kp = Rudy::AWS::EC2::Keypairs.create(keyname)
34
- li "Saving #{kp_file}"
35
- Rudy::Utils.write_to_file(kp_file, kp.private_key, 'w', 0600)
36
29
  end
30
+
31
+ if Rudy::AWS::EC2::Keypairs.exists? keyname
32
+ if @@global.force
33
+ li "Destroying existing keypair: #{keyname}"
34
+ Rudy::AWS::EC2::Keypairs.destroy keyname
35
+ else
36
+ raise Rudy::AWS::EC2::KeypairAlreadyDefined, keyname
37
+ end
38
+ end
39
+
40
+ if File.exists?(kp_file)
41
+ if @@global.force
42
+ delete_pkey name
43
+ else
44
+ raise PrivateKeyFileExists, kp_file
45
+ end
46
+ end
47
+
48
+ li "Creating keypair: #{keyname}"
49
+ kp = Rudy::AWS::EC2::Keypairs.create(keyname)
50
+ li "Saving #{kp_file}"
51
+ Rudy::Utils.write_to_file(kp_file, kp.private_key, 'w', 0600)
52
+
37
53
  kp
38
54
  end
39
55
 
@@ -55,7 +71,7 @@ module Rudy; module Routines; module Handlers;
55
71
 
56
72
  def registered?(name=:root)
57
73
  keyname = user_keypairname name
58
- Rudy::AWS::EC2::Keypairs.exists?( keyname) rescue false
74
+ Rudy::AWS::EC2::Keypairs.exists?(keyname)
59
75
  end
60
76
 
61
77
  def pkey(name=:root)
@@ -0,0 +1,173 @@
1
+ module Rudy::Routines::Handlers;
2
+ module RyeTools
3
+ include Rudy::Routines::Handlers::Base
4
+ extend self
5
+
6
+
7
+ # Create an instance of Rye::Box for +hostname+. +opts+ is
8
+ # an optional Hash of options. See Rye::Box.initialize
9
+ #
10
+ # This method should be used throughout the Rudy::Routines
11
+ # namespace rather than creating instances manually b/c it
12
+ # applies some fancy pants defaults like command hooks.
13
+ def create_box(hostname, opts={})
14
+ ld [:hostname, hostname, opts, caller[0]]
15
+ opts = {
16
+ :info => (@@global.verbose >= 3), # rudy -vvv
17
+ :debug => false,
18
+ :user => current_machine_user,
19
+ :ostype => current_machine_os || :unix,
20
+ :impltype => :linux
21
+ }.merge opts
22
+
23
+ nickname = hostname
24
+ if hostname.kind_of? Rudy::Machine
25
+ hostname, nickname = hostname.dns_public, hostname.name
26
+ end
27
+
28
+ box = ::Rye::Box.new hostname, opts
29
+ box.nickname = nickname
30
+
31
+ local_keys = Rye.keys
32
+ box.add_keys local_keys if local_keys.is_a?(Array)
33
+ box.add_key user_keypairpath(opts[:user])
34
+
35
+ # We define hooks so we can still print each command and its output
36
+ # when running the command blocks. NOTE: We only print this in
37
+ # verbosity mode.
38
+ if @@global.verbose > 0 && !@@global.parallel
39
+ # This block gets called for every command method call.
40
+ box.pre_command_hook do |cmd, user, host, nickname|
41
+ print_command user, nickname, cmd
42
+ end
43
+ end
44
+
45
+ if @@global.verbose > 1
46
+ # And this one gets called after each command method call.
47
+ box.post_command_hook do |ret|
48
+ print_response ret
49
+ end
50
+ end
51
+
52
+ box.exception_hook(::Rye::CommandError, &rbox_exception_handler)
53
+ box.exception_hook(Exception, &rbox_exception_handler)
54
+
55
+ ## It'd better for unknown commands to be handled elsewhere
56
+ ## because it doesn't make sense to retry a method that doesn't exist
57
+ ##box.exception_hook(Rye::CommandNotFound, &rbox_exception_handler)
58
+
59
+ box
60
+ end
61
+
62
+
63
+
64
+ # Create an instance of Rye::Set from a list of +hostnames+.
65
+ # +hostnames+ can contain hostnames or Rudy::Machine objects.
66
+ # +opts+ is an optional Hash of options. See Rye::Box.initialize
67
+ #
68
+ # NOTE: Windows machines are skipped and not added to the set.
69
+ def create_set(hostnames, opts={})
70
+ hostnames ||= []
71
+
72
+ opts = {
73
+ :user => (current_machine_user).to_s,
74
+ :parallel => @@global.parallel
75
+ }.merge(opts)
76
+ set = ::Rye::Set.new current_machine_group, opts
77
+
78
+ opts.delete(:parallel) # Not used by Rye::Box.new
79
+
80
+ hostnames.each do |m|
81
+
82
+ if m.is_a?(Rudy::Machine)
83
+ m.refresh! if m.dns_public.nil? || m.dns_public.empty?
84
+ if m.dns_public.nil? || m.dns_public.empty?
85
+ ld "Cannot find public DNS for #{m.name} (continuing...)"
86
+ rbox = self.create_box('nohost', opts)
87
+ else
88
+ ld [:dns_public, m.dns_public, m.instid]
89
+ rbox = self.create_box(m.dns_public, opts)
90
+ end
91
+ rbox.stash = m # Store the machine instance in the stash
92
+ rbox.nickname = m.name
93
+ else
94
+ # Otherwise we assume it's a hostname
95
+ rbox = self.create_box(m)
96
+ end
97
+ rbox.add_key user_keypairpath(opts[:user])
98
+ set.add_box rbox
99
+ end
100
+
101
+ ld "Machines Set: %s" % [set.empty? ? '[empty]' : set.inspect]
102
+
103
+ set
104
+ end
105
+
106
+
107
+ private
108
+
109
+ # Returns a formatted string for printing command info
110
+ def print_command(user, host, cmd)
111
+ #return if @@global.parallel
112
+ cmd ||= ""
113
+ cmd, user = cmd.to_s, user.to_s
114
+ prompt = user == "root" ? "#" : "$"
115
+ li ("%s@%s%s %s" % [user, host, prompt, cmd.bright])
116
+ end
117
+
118
+ def print_response(rap)
119
+ # Non zero exit codes raise exceptions so
120
+ # the erorrs have already been handled.
121
+ return if rap.exit_code != 0
122
+
123
+ if @@global.parallel
124
+ cmd, user = cmd.to_s, user.to_s
125
+ prompt = user == "root" ? "#" : "$"
126
+ li "%s@%s%s %s%s%s" % [rap.box.user, rap.box.nickname, prompt, rap.cmd.bright, $/, rap.stdout.inspect]
127
+ unless rap.stderr.empty?
128
+ le "#{rap.box.nickname}: " << rap.stderr.join("#{rap.box.nickname}: ")
129
+ end
130
+ else
131
+ li ' ' << rap.stdout.join("#{$/} ") if !rap.stdout.empty?
132
+ colour = rap.exit_code != 0 ? :red : :normal
133
+ unless rap.stderr.empty?
134
+ le (" STDERR " << '-'*38).color(colour).bright
135
+ le " " << rap.stderr.join("#{$/} ").color(colour)
136
+ end
137
+ end
138
+ end
139
+
140
+
141
+ def rbox_exception_handler
142
+ Proc.new do |ex, cmd, user, host, nickname|
143
+ print_exception(user, host, cmd, nickname, ex)
144
+ unless @@global.parallel
145
+ choice = Annoy.get_user_input('(S)kip (R)etry (F)orce (A)bort: ', nil, 3600) || ''
146
+ if choice.match(/\AS/i)
147
+ :skip
148
+ elsif choice.match(/\AR/i)
149
+ :retry # Tells Rye::Box#run_command to retry
150
+ elsif choice.match(/\AF/i)
151
+ @@global.force = true
152
+ :retry
153
+ else
154
+ exit 12
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ def print_exception(user, host, cmd, nickname, ex)
161
+ prefix = @@global.parallel ? "#{nickname}: #{cmd}: " : ""
162
+ if ex.is_a?(::Rye::CommandError)
163
+ le prefix << ex.message.color(:red)
164
+ else
165
+ le prefix << "#{ex.class}: #{ex.message}".color(:red)
166
+ end
167
+ le *ex.backtrace if @@global.verbose > 2
168
+ end
169
+
170
+
171
+ end
172
+ end
173
+
@@ -46,7 +46,8 @@ module Rudy; module Routines; module Handlers;
46
46
 
47
47
  # The error doesn't apply to the local Rye::Box instance
48
48
  if robj.is_a?(Rye::Set) && !File.exists?(user_keypairpath(user) || '')
49
- le "Cannot find key for #{user}: #{user_keypairpath(user)}"
49
+ # TODO: This prints always even if an account is authorized with different keys.
50
+ #le "Cannot find key for #{user}: #{user_keypairpath(user)}"
50
51
  end
51
52
 
52
53
  if user.to_s != robj.user
@@ -4,11 +4,11 @@ module Rudy; module Routines;
4
4
 
5
5
  def init(*args)
6
6
  @machines = Rudy::Machines.list || []
7
- @@rset = create_rye_set @machines unless defined?(@@rset)
7
+ @@rset = Rudy::Routines::Handlers::RyeTools.create_set @machines
8
8
  end
9
9
 
10
10
  def execute
11
- ld "Executing routine: #{@name}"
11
+ li "Executing routine: #{@name}"
12
12
  return @machines unless run?
13
13
  Rudy::Routines::Handlers::Depends.execute_all @before
14
14
  Rudy::Routines.runner(@routine, @@rset, @@lbox, @argv)
@@ -12,7 +12,7 @@ module Rudy; module Routines;
12
12
  def init(*args)
13
13
  @routine ||= {}
14
14
  @machines = Rudy::Machines.list
15
- @@rset = create_rye_set @machines unless defined?(@@rset)
15
+ @@rset = Rudy::Routines::Handlers::RyeTools.create_set @machines
16
16
  end
17
17
 
18
18
  # Startup routines run in the following order:
@@ -24,7 +24,7 @@ module Rudy; module Routines;
24
24
  # * all other actions
25
25
  # * after dependencies
26
26
  def execute
27
- ld "Executing routine: #{@name}"
27
+ li "Executing routine: #{@name}"
28
28
  ld "[this is a generic routine]" if @routine.empty?
29
29
 
30
30
  if run?
@@ -10,7 +10,7 @@ module Rudy; module Routines;
10
10
 
11
11
  def init(*args)
12
12
  @machines = Rudy::Machines.list || []
13
- @@rset = create_rye_set @machines unless defined?(@@rset)
13
+ @@rset = Rudy::Routines::Handlers::RyeTools.create_set @machines
14
14
  @routine ||= {}
15
15
  end
16
16
 
@@ -21,7 +21,7 @@ module Rudy; module Routines;
21
21
  # * after_local (if present)
22
22
  # * after dependencies
23
23
  def execute
24
- ld "Executing routine: #{@name}"
24
+ li "Executing routine: #{@name}"
25
25
  ld "[this is a generic routine]" if @routine.empty?
26
26
 
27
27
  # We need to remove after_local so the runner doesn't see it
@@ -20,7 +20,7 @@ module Rudy; module Routines;
20
20
  # * all other actions
21
21
  # * after dependencies
22
22
  def execute
23
- ld "Executing routine: #{@name}"
23
+ li "Executing routine: #{@name}"
24
24
  ld "[this is a generic routine]" if @routine.empty?
25
25
 
26
26
 
@@ -59,9 +59,11 @@ module Rudy; module Routines;
59
59
  # NOTE: Expect errors if there are no machines.
60
60
  Rudy::Routines.rescue {
61
61
  @machines = run? ? Rudy::Machines.create : Rudy::Machines.list
62
- @@rset = create_rye_set @machines unless defined?(@@rset)
62
+ @@rset = Rudy::Routines::Handlers::RyeTools.create_set @machines
63
63
  }
64
64
 
65
+ sleep 1 # SimpleDB eventual consistency
66
+
65
67
  Rudy::Routines.rescue {
66
68
  if !Rudy::Routines::Handlers::Host.is_running? @@rset
67
69
  a = @@rset.boxes.select { |box| !box.stash.instance_running? }
data/rudy.gemspec CHANGED
@@ -1,12 +1,12 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "rudy"
3
3
  s.rubyforge_project = 'rudy'
4
- s.version = "0.9.1"
4
+ s.version = "0.9.2"
5
5
  s.summary = "Rudy: Not your grandparents' EC2 deployment tool."
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
8
8
  s.email = "delano@solutious.com"
9
- s.homepage = "http://github.com/solutious/rudy"
9
+ s.homepage = "http://solutious.com/projects/rudy/"
10
10
 
11
11
  s.extra_rdoc_files = %w[README.rdoc Rudyfile LICENSE.txt CHANGES.txt]
12
12
  s.has_rdoc = true
@@ -16,19 +16,19 @@
16
16
 
17
17
  s.executables = %w[rudy rudy-ec2 rudy-sdb rudy-s3]
18
18
 
19
- s.add_dependency 'rye', '>= 0.8.6'
19
+ s.add_dependency 'rye', '>= 0.8.9'
20
20
  s.add_dependency 'attic', '>= 0.4.0'
21
21
  s.add_dependency 'annoy', '>= 0.5.5'
22
22
  s.add_dependency 'drydock', '>= 0.6.6'
23
23
  s.add_dependency 'caesars', '>= 0.7.3'
24
- s.add_dependency 'sysinfo', '>= 0.6.3'
24
+ s.add_dependency 'sysinfo', '>= 0.7.0'
25
25
  s.add_dependency 'gibbler', '>= 0.6.0'
26
26
  s.add_dependency 'tryouts', '>= 0.8.4'
27
27
  s.add_dependency 'storable', '>= 0.5.6'
28
28
 
29
- s.add_dependency 'aws-s3', '>= 0.6.1' # Ruby 1.9.1 compatability
30
- s.add_dependency 'highline', '>= 1.5.1' # Ruby 1.9.1 compatability
31
- s.add_dependency 'amazon-ec2', '>= 0.3.8' # Region fix
29
+ s.add_dependency 'aws-s3', '>= 0.6.1'
30
+ s.add_dependency 'highline', '>= 1.5.1'
31
+ s.add_dependency 'amazon-ec2', '>= 0.5.0'
32
32
 
33
33
  # = MANIFEST =
34
34
  # git ls-files
@@ -42,7 +42,10 @@
42
42
  bin/rudy-ec2
43
43
  bin/rudy-s3
44
44
  bin/rudy-sdb
45
+ examples/authorize.rb
45
46
  examples/gem-test.rb
47
+ examples/solaris.rb
48
+ examples/windows.rb
46
49
  lib/rudy.rb
47
50
  lib/rudy/aws.rb
48
51
  lib/rudy/aws/ec2.rb
@@ -63,6 +66,7 @@
63
66
  lib/rudy/cli/aws/ec2/candy.rb
64
67
  lib/rudy/cli/aws/ec2/groups.rb
65
68
  lib/rudy/cli/aws/ec2/images.rb
69
+ lib/rudy/cli/aws/ec2/info.rb
66
70
  lib/rudy/cli/aws/ec2/instances.rb
67
71
  lib/rudy/cli/aws/ec2/keypairs.rb
68
72
  lib/rudy/cli/aws/ec2/snapshots.rb
@@ -79,11 +83,13 @@
79
83
  lib/rudy/cli/config.rb
80
84
  lib/rudy/cli/disks.rb
81
85
  lib/rudy/cli/execbase.rb
86
+ lib/rudy/cli/images.rb
87
+ lib/rudy/cli/info.rb
88
+ lib/rudy/cli/keypairs.rb
82
89
  lib/rudy/cli/machines.rb
83
90
  lib/rudy/cli/metadata.rb
84
91
  lib/rudy/cli/networks.rb
85
92
  lib/rudy/cli/routines.rb
86
- lib/rudy/cli/status.rb
87
93
  lib/rudy/config.rb
88
94
  lib/rudy/config/objects.rb
89
95
  lib/rudy/disks.rb
@@ -108,6 +114,7 @@
108
114
  lib/rudy/routines/handlers/host.rb
109
115
  lib/rudy/routines/handlers/keypair.rb
110
116
  lib/rudy/routines/handlers/machines.rb
117
+ lib/rudy/routines/handlers/rye.rb
111
118
  lib/rudy/routines/handlers/script.rb
112
119
  lib/rudy/routines/handlers/user.rb
113
120
  lib/rudy/routines/passthrough.rb