solutious-rudy 0.9.0 → 0.9.1

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 (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