solutious-rudy 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGES.txt +61 -4
  2. data/README.rdoc +91 -53
  3. data/Rakefile +0 -92
  4. data/Rudyfile +15 -25
  5. data/bin/rudy +52 -41
  6. data/examples/gem-test.rb +92 -0
  7. data/lib/rudy.rb +15 -7
  8. data/lib/rudy/aws.rb +2 -2
  9. data/lib/rudy/aws/ec2.rb +2 -2
  10. data/lib/rudy/aws/ec2/instance.rb +3 -3
  11. data/lib/rudy/aws/ec2/volume.rb +4 -4
  12. data/lib/rudy/cli/aws/ec2/candy.rb +13 -13
  13. data/lib/rudy/cli/base.rb +10 -4
  14. data/lib/rudy/cli/config.rb +13 -3
  15. data/lib/rudy/cli/disks.rb +1 -1
  16. data/lib/rudy/cli/execbase.rb +5 -2
  17. data/lib/rudy/cli/machines.rb +231 -30
  18. data/lib/rudy/cli/networks.rb +34 -0
  19. data/lib/rudy/cli/routines.rb +1 -1
  20. data/lib/rudy/cli/status.rb +60 -0
  21. data/lib/rudy/config.rb +42 -14
  22. data/lib/rudy/exceptions.rb +5 -1
  23. data/lib/rudy/global.rb +29 -13
  24. data/lib/rudy/huxtable.rb +2 -2
  25. data/lib/rudy/machines.rb +2 -2
  26. data/lib/rudy/metadata/disk.rb +2 -1
  27. data/lib/rudy/routines.rb +3 -3
  28. data/lib/rudy/routines/base.rb +7 -4
  29. data/lib/rudy/routines/handlers/disks.rb +16 -6
  30. data/lib/rudy/routines/handlers/group.rb +5 -3
  31. data/lib/rudy/routines/handlers/host.rb +14 -16
  32. data/lib/rudy/routines/handlers/script.rb +2 -2
  33. data/lib/rudy/routines/handlers/user.rb +4 -0
  34. data/lib/rudy/routines/reboot.rb +26 -9
  35. data/lib/rudy/routines/shutdown.rb +4 -0
  36. data/lib/rudy/routines/startup.rb +3 -2
  37. data/lib/rudy/utils.rb +23 -9
  38. data/rudy.gemspec +10 -29
  39. data/tryouts/10_require_time/10_rudy_tryouts.rb +1 -1
  40. data/tryouts/{misc/console_tryout.rb → exploration/console.rb} +0 -0
  41. data/tryouts/{misc/usage_tryout.rb → exploration/machine.rb} +0 -0
  42. data/tryouts/failer +1 -1
  43. metadata +8 -70
  44. data/tryouts/misc/disks_tryout.rb +0 -48
  45. data/tryouts/misc/drydock_tryout.rb +0 -48
  46. data/tryouts/misc/nested_methods.rb +0 -103
  47. data/tryouts/misc/session_tryout.rb +0 -46
  48. data/tryouts/misc/tryouts.rb +0 -33
@@ -16,8 +16,8 @@ module Rudy; module Routines; module Handlers;
16
16
  end
17
17
 
18
18
  def execute(type, batch, rset, lbox, argv=nil)
19
- if type.to_s =~ /\Ax/
20
- # do nothing
19
+ if type.to_s =~ /\Ax/ # (e.g. xremote, xlocal)
20
+ # do nothing
21
21
 
22
22
  # It's important this stay a regex rather than a literal comparison
23
23
  elsif type.to_s =~ /local/
@@ -21,6 +21,10 @@ module Rudy; module Routines; module Handlers;
21
21
  # On Solaris, the user's home directory needs to be specified
22
22
  # explicitly so we do it for linux too for fun.
23
23
  homedir = robj.guess_user_home(user.to_s)
24
+
25
+ # When more than one machine is running, this will be an Array
26
+ homedir = homedir.first if homedir.kind_of?(Array)
27
+
24
28
  args = [:m, :d, homedir, :s, '/bin/bash', user.to_s]
25
29
 
26
30
  # NOTE: We'll may to use platform specific code here.
@@ -11,6 +11,8 @@ module Rudy; module Routines;
11
11
 
12
12
  def init(*args)
13
13
  @routine ||= {}
14
+ @machines = Rudy::Machines.list
15
+ @@rset = create_rye_set @machines unless defined?(@@rset)
14
16
  end
15
17
 
16
18
  # Startup routines run in the following order:
@@ -24,15 +26,12 @@ module Rudy; module Routines;
24
26
  def execute
25
27
  ld "Executing routine: #{@name}"
26
28
  ld "[this is a generic routine]" if @routine.empty?
27
-
28
-
29
- # If this is a testrun we won't create new instances
30
- # we'll just grab the list of machines in this group.
31
- # NOTE: Expect errors if there are no machines.
32
- @machines = run? ? Rudy::Machines.restart : Rudy::Machines.list
33
- @@rset = create_rye_set @machines unless defined?(@@rset)
34
29
 
35
30
  if run?
31
+ Rudy::Routines.rescue {
32
+ Rudy::Routines::Handlers::Group.authorize rescue nil
33
+ }
34
+
36
35
  if @routine.has_key? :before_local
37
36
  handler = Rudy::Routines.get_handler :local
38
37
  Rudy::Routines.rescue {
@@ -48,9 +47,21 @@ module Rudy; module Routines;
48
47
  end
49
48
  end
50
49
 
50
+ Rudy::Routines.rescue {
51
+ if Rudy::Routines::Handlers::Disks.mount? @routine
52
+ fake = Hash[:umount => @routine.disks[:mount]]
53
+ Rudy::Routines::Handlers::Disks.execute :umount, fake, @@rset, @@lbox, @argv
54
+ end
55
+ }
56
+
57
+ li "Rebooting #{current_group_name}..."
58
+ @machines.each { |m| m.restart } if run?
59
+
60
+ 15.times { print '.'; Kernel.sleep 2 }; puts $/ # Wait for 30 seconds
61
+
51
62
  Rudy::Routines.rescue {
52
63
  if !Rudy::Routines::Handlers::Host.is_running? @@rset
53
- a = @@rset.boxes.select { |box| !box.stash.running? }
64
+ a = @@rset.boxes.select { |box| !box.stash.instance_running? }
54
65
  raise GroupNotRunning, a
55
66
  end
56
67
  }
@@ -61,7 +72,7 @@ module Rudy; module Routines;
61
72
 
62
73
  Rudy::Routines.rescue {
63
74
  if !Rudy::Routines::Handlers::Host.is_available? @@rset
64
- a = @@rset.boxes.select { |box| !box.stash.available? }
75
+ a = @@rset.boxes.select { |box| !box.stash.instance_available? }
65
76
  raise GroupNotAvailable, a
66
77
  end
67
78
  }
@@ -97,6 +108,12 @@ module Rudy; module Routines;
97
108
  bad = @routine.keys - @@allowed_actions
98
109
  raise UnsupportedActions.new(@name, bad) unless bad.empty?
99
110
  end
111
+
112
+ if @machines
113
+ down = @@rset.boxes.select { |box| !box.stash.instance_running? }
114
+ raise GroupNotAvailable, down unless down.empty?
115
+ end
116
+
100
117
  end
101
118
 
102
119
  end
@@ -28,6 +28,10 @@ module Rudy; module Routines;
28
28
  after_local = @routine.delete(:after_local)
29
29
 
30
30
  if run?
31
+ Rudy::Routines.rescue {
32
+ Rudy::Routines::Handlers::Group.authorize rescue nil
33
+ }
34
+
31
35
  Rudy::Routines::Handlers::Depends.execute_all @before
32
36
 
33
37
  # This is the meat of the sandwich
@@ -64,7 +64,7 @@ module Rudy; module Routines;
64
64
 
65
65
  Rudy::Routines.rescue {
66
66
  if !Rudy::Routines::Handlers::Host.is_running? @@rset
67
- a = @@rset.boxes.select { |box| !box.stash.running? }
67
+ a = @@rset.boxes.select { |box| !box.stash.instance_running? }
68
68
  raise GroupNotRunning, a
69
69
  end
70
70
  }
@@ -72,9 +72,10 @@ module Rudy; module Routines;
72
72
  # This is important b/c the machines will not
73
73
  # have DNS info until after they are running.
74
74
  Rudy::Routines.rescue { Rudy::Routines::Handlers::Host.update_dns @@rset }
75
+
75
76
  Rudy::Routines.rescue {
76
77
  if !Rudy::Routines::Handlers::Host.is_available? @@rset
77
- a = @@rset.boxes.select { |box| !box.stash.available? }
78
+ a = @@rset.boxes.select { |box| !box.stash.instance_available? }
78
79
  raise GroupNotAvailable, a
79
80
  end
80
81
  }
@@ -86,6 +86,7 @@ module Rudy
86
86
  end
87
87
 
88
88
  if msg && logger
89
+ logger.puts
89
90
  logger.flush
90
91
  end
91
92
 
@@ -142,7 +143,7 @@ module Rudy
142
143
  Rudy::ID_MAP[key]
143
144
  end
144
145
 
145
- # Return a string ID without the identifier. i.e. key-stage-app-root => stage-app-root
146
+ # Return a string ID without the identifier. e.g. key-stage-app-root => stage-app-root
146
147
  def noid(str)
147
148
  el = str.split('-')
148
149
  el.shift
@@ -199,15 +200,28 @@ module Rudy
199
200
  # Errno::EAFNOSUPPORT, Errno::ECONNREFUSED, SocketError, Timeout::Error
200
201
  #
201
202
  def service_available?(host, port, wait=3)
202
- begin
203
- status = Timeout::timeout(wait) do
204
- socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
205
- sockaddr = Socket.pack_sockaddr_in( port, host )
206
- socket.connect( sockaddr )
203
+ if Rudy.sysinfo.vm == :java
204
+ begin
205
+ iadd = Java::InetSocketAddress.new host, port
206
+ socket = Java::Socket.new
207
+ socket.connect iadd, wait * 1000 # milliseconds
208
+ success = !socket.isClosed && socket.isConnected
209
+ rescue NativeException => ex
210
+ puts ex.message, ex.backtrace if Rudy.debug?
211
+ false
212
+ end
213
+ else
214
+ begin
215
+ status = Timeout::timeout(wait) do
216
+ socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
217
+ sockaddr = Socket.pack_sockaddr_in( port, host )
218
+ socket.connect( sockaddr )
219
+ end
220
+ true
221
+ rescue Errno::EAFNOSUPPORT, Errno::ECONNREFUSED, SocketError, Timeout::Error => ex
222
+ puts ex.class, ex.message, ex.backtrace if Rudy.debug?
223
+ false
207
224
  end
208
- true
209
- rescue Errno::EAFNOSUPPORT, Errno::ECONNREFUSED, SocketError, Timeout::Error => ex
210
- false
211
225
  end
212
226
  end
213
227
 
@@ -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.9.0"
4
+ s.version = "0.9.1"
5
5
  s.summary = "Rudy: Not your grandparents' EC2 deployment tool."
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
@@ -14,12 +14,14 @@
14
14
  s.require_paths = %w[lib]
15
15
  s.rubygems_version = '1.3.0'
16
16
 
17
- s.add_dependency 'rye', '>= 0.8.5'
17
+ s.executables = %w[rudy rudy-ec2 rudy-sdb rudy-s3]
18
+
19
+ s.add_dependency 'rye', '>= 0.8.6'
18
20
  s.add_dependency 'attic', '>= 0.4.0'
19
21
  s.add_dependency 'annoy', '>= 0.5.5'
20
22
  s.add_dependency 'drydock', '>= 0.6.6'
21
23
  s.add_dependency 'caesars', '>= 0.7.3'
22
- s.add_dependency 'sysinfo', '>= 0.6.2'
24
+ s.add_dependency 'sysinfo', '>= 0.6.3'
23
25
  s.add_dependency 'gibbler', '>= 0.6.0'
24
26
  s.add_dependency 'tryouts', '>= 0.8.4'
25
27
  s.add_dependency 'storable', '>= 0.5.6'
@@ -27,25 +29,6 @@
27
29
  s.add_dependency 'aws-s3', '>= 0.6.1' # Ruby 1.9.1 compatability
28
30
  s.add_dependency 'highline', '>= 1.5.1' # Ruby 1.9.1 compatability
29
31
  s.add_dependency 'amazon-ec2', '>= 0.3.8' # Region fix
30
-
31
- # One of the other dependencies needs these gems
32
- # but doesn't seem to specify them. Why I outta!
33
- s.add_dependency 'tenderlove-frex'
34
- s.add_dependency 'archive-tar-minitar'
35
- s.add_dependency 'nokogiri'
36
- s.add_dependency 'echoe'
37
- s.add_dependency 'racc'
38
- s.add_dependency 'hoe'
39
-
40
- # libxml2 libxml2-dev libxslt-dev
41
-
42
- # http://bit.ly/2WaAgV
43
- #s.add_runtime_dependency('xml-simple', '>= 1.0.11')
44
- #s.add_dependency('xml-simple', '>= 1.0.11')
45
- #s.add_development_dependency('jgre-monkeyspecdoc', '>= 0.1.0')
46
- #s.add_development_dependency('thoughtbot-shoulda', '>= 0.1.0')
47
-
48
- s.executables = %w[rudy rudy-ec2 rudy-sdb rudy-s3]
49
32
 
50
33
  # = MANIFEST =
51
34
  # git ls-files
@@ -59,6 +42,7 @@
59
42
  bin/rudy-ec2
60
43
  bin/rudy-s3
61
44
  bin/rudy-sdb
45
+ examples/gem-test.rb
62
46
  lib/rudy.rb
63
47
  lib/rudy/aws.rb
64
48
  lib/rudy/aws/ec2.rb
@@ -97,7 +81,9 @@
97
81
  lib/rudy/cli/execbase.rb
98
82
  lib/rudy/cli/machines.rb
99
83
  lib/rudy/cli/metadata.rb
84
+ lib/rudy/cli/networks.rb
100
85
  lib/rudy/cli/routines.rb
86
+ lib/rudy/cli/status.rb
101
87
  lib/rudy/config.rb
102
88
  lib/rudy/config/objects.rb
103
89
  lib/rudy/disks.rb
@@ -173,14 +159,9 @@
173
159
  tryouts/40_routines/11_group_handler_tryouts.rb
174
160
  tryouts/80_cli/10_rudyec2_tryouts.rb
175
161
  tryouts/80_cli/60_rudy_tryouts.rb
162
+ tryouts/exploration/console.rb
163
+ tryouts/exploration/machine.rb
176
164
  tryouts/failer
177
- tryouts/misc/console_tryout.rb
178
- tryouts/misc/disks_tryout.rb
179
- tryouts/misc/drydock_tryout.rb
180
- tryouts/misc/nested_methods.rb
181
- tryouts/misc/session_tryout.rb
182
- tryouts/misc/tryouts.rb
183
- tryouts/misc/usage_tryout.rb
184
165
  )
185
166
 
186
167
 
@@ -15,7 +15,7 @@ tryout "Rudy Initialization" do
15
15
  drill "has sysinfo", Rudy.sysinfo, :class, SysInfo
16
16
  drill "debug is disabled", Rudy.debug?, false
17
17
  drill "quiet is disabled", Rudy.quiet?, false
18
- drill "auto-yes is disabled", Rudy.yes?, false
18
+ drill "auto-yes is disabled", Rudy.auto?, false
19
19
 
20
20
  drill "debug can be enabled", true do
21
21
  Rudy.enable_debug
@@ -1,6 +1,6 @@
1
1
  #!/bin/sh
2
2
 
3
3
  # For some reason when this echo is commented out
4
- # and Net::SSH always reports the exit code as 0.
4
+ # Net::SSH always reports the exit code as 0.
5
5
  echo "Failing with $1"
6
6
  exit $1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solutious-rudy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.8.5
23
+ version: 0.8.6
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: attic
@@ -70,7 +70,7 @@ dependencies:
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.6.2
73
+ version: 0.6.3
74
74
  version:
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: gibbler
@@ -132,66 +132,6 @@ dependencies:
132
132
  - !ruby/object:Gem::Version
133
133
  version: 0.3.8
134
134
  version:
135
- - !ruby/object:Gem::Dependency
136
- name: tenderlove-frex
137
- type: :runtime
138
- version_requirement:
139
- version_requirements: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: "0"
144
- version:
145
- - !ruby/object:Gem::Dependency
146
- name: archive-tar-minitar
147
- type: :runtime
148
- version_requirement:
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: "0"
154
- version:
155
- - !ruby/object:Gem::Dependency
156
- name: nokogiri
157
- type: :runtime
158
- version_requirement:
159
- version_requirements: !ruby/object:Gem::Requirement
160
- requirements:
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- version: "0"
164
- version:
165
- - !ruby/object:Gem::Dependency
166
- name: echoe
167
- type: :runtime
168
- version_requirement:
169
- version_requirements: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: "0"
174
- version:
175
- - !ruby/object:Gem::Dependency
176
- name: racc
177
- type: :runtime
178
- version_requirement:
179
- version_requirements: !ruby/object:Gem::Requirement
180
- requirements:
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- version: "0"
184
- version:
185
- - !ruby/object:Gem::Dependency
186
- name: hoe
187
- type: :runtime
188
- version_requirement:
189
- version_requirements: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- version: "0"
194
- version:
195
135
  description: "Rudy: Not your grandparents' EC2 deployment tool."
196
136
  email: delano@solutious.com
197
137
  executables:
@@ -216,6 +156,7 @@ files:
216
156
  - bin/rudy-ec2
217
157
  - bin/rudy-s3
218
158
  - bin/rudy-sdb
159
+ - examples/gem-test.rb
219
160
  - lib/rudy.rb
220
161
  - lib/rudy/aws.rb
221
162
  - lib/rudy/aws/ec2.rb
@@ -254,7 +195,9 @@ files:
254
195
  - lib/rudy/cli/execbase.rb
255
196
  - lib/rudy/cli/machines.rb
256
197
  - lib/rudy/cli/metadata.rb
198
+ - lib/rudy/cli/networks.rb
257
199
  - lib/rudy/cli/routines.rb
200
+ - lib/rudy/cli/status.rb
258
201
  - lib/rudy/config.rb
259
202
  - lib/rudy/config/objects.rb
260
203
  - lib/rudy/disks.rb
@@ -330,14 +273,9 @@ files:
330
273
  - tryouts/40_routines/11_group_handler_tryouts.rb
331
274
  - tryouts/80_cli/10_rudyec2_tryouts.rb
332
275
  - tryouts/80_cli/60_rudy_tryouts.rb
276
+ - tryouts/exploration/console.rb
277
+ - tryouts/exploration/machine.rb
333
278
  - tryouts/failer
334
- - tryouts/misc/console_tryout.rb
335
- - tryouts/misc/disks_tryout.rb
336
- - tryouts/misc/drydock_tryout.rb
337
- - tryouts/misc/nested_methods.rb
338
- - tryouts/misc/session_tryout.rb
339
- - tryouts/misc/tryouts.rb
340
- - tryouts/misc/usage_tryout.rb
341
279
  has_rdoc: true
342
280
  homepage: http://github.com/solutious/rudy
343
281
  licenses:
@@ -1,48 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- # Tryout - New Rudy::Metadata::Disk API
4
- #
5
-
6
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
7
- %w{drydock caesars rye}.each { |dir| $: << File.join(File.dirname(__FILE__), '..', '..', dir, 'lib') }
8
-
9
- require 'rubygems'
10
- require 'rudy'
11
- require 'tryouts'
12
- include Tryouts
13
-
14
- #
15
- #mach7 = Rudy::Machine.load('m-us-east-1b-stage-app-01')
16
- mach7 = Rudy::Machine.new
17
-
18
- #puts mach7.running?
19
- #mach7.position = "07"
20
- ##y mach1.start
21
- ##mach1.save
22
- #p Rudy::Machines.get(mach7.name)
23
- #
24
- #
25
-
26
-
27
-
28
- #disk1 = Rudy::Metadata::Disk.new('/mnt/ride', 1, '/dev/sdh')
29
- #p disk1.valid?
30
- #p disk1.name
31
- #disk1.save
32
- #disk2 = Rudy::Disks.get("disk-poop-stage-app-01-")
33
- #
34
- #p disk1
35
- #p disk2
36
- #puts disk2 == disk1
37
- #puts disk2.destroy
38
-
39
- __END__
40
-
41
-
42
- #puts disk1.to_select
43
- #p disk1.to_query(nil, [:path])
44
- #p Rudy::Disks.query( "['rtype'='disk']")
45
-
46
- __END__
47
- group = Rudy::Groups.new
48
- inst = Rudy::Machines.new