solutious-rudy 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,13 @@ RUDY, CHANGES
8
8
  * TODO: Tests for AWS HTTPS
9
9
 
10
10
 
11
+ #### 0.7.2 (2009-04-04) ###############################
12
+
13
+ * FIXED: cli/routine.rb release method wasn't sending command alias (which broke rerelease)
14
+ * ADDED: global.offline for being cool when Internet is down
15
+ * ADDED: Better handling in aws/sdb when call returns nil (Internet is down)
16
+
17
+
11
18
  #### 0.7.1 (2009-04-04) ###############################
12
19
 
13
20
  * FIXED: rudy wasn't honouring -C option for specifying a config file
@@ -45,7 +45,7 @@ module Rudy
45
45
  unless defined?(MAJOR)
46
46
  MAJOR = 0.freeze
47
47
  MINOR = 7.freeze
48
- TINY = 1.freeze
48
+ TINY = 2.freeze
49
49
  end
50
50
  def self.to_s; [MAJOR, MINOR, TINY].join('.'); end
51
51
  def self.to_f; self.to_s.to_f; end
@@ -23,6 +23,7 @@ module Rudy
23
23
  end
24
24
 
25
25
  module ObjectBase
26
+ include Rudy::Huxtable
26
27
 
27
28
  protected
28
29
 
@@ -52,9 +53,9 @@ module Rudy
52
53
  rescue Timeout::Error => ex
53
54
  STDERR.puts "Timeout (#{timeout}): #{ex.message}!"
54
55
  rescue SocketError => ex
55
- raise SocketError, "Check your Internets!"
56
56
  #STDERR.puts ex.message
57
57
  #STDERR.puts ex.backtrace
58
+ raise SocketError, "Check your Internets!" unless @@global.offline
58
59
  ensure
59
60
  response ||= default
60
61
  end
@@ -98,18 +98,20 @@ module Rudy
98
98
 
99
99
  doc = call(:get, params)
100
100
  results = []
101
- REXML::XPath.each(doc, "//Item") do |item|
102
- name = REXML::XPath.first(item, './Name/text()').to_s
101
+ if doc
102
+ REXML::XPath.each(doc, "//Item") do |item|
103
+ name = REXML::XPath.first(item, './Name/text()').to_s
103
104
 
104
- attributes = {'Name' => name}
105
- REXML::XPath.each(item, "./Attribute") do |attr|
106
- key = REXML::XPath.first(attr, './Name/text()').to_s
107
- value = REXML::XPath.first(attr, './Value/text()').to_s
108
- ( attributes[key] ||= [] ) << value
105
+ attributes = {'Name' => name}
106
+ REXML::XPath.each(item, "./Attribute") do |attr|
107
+ key = REXML::XPath.first(attr, './Name/text()').to_s
108
+ value = REXML::XPath.first(attr, './Value/text()').to_s
109
+ ( attributes[key] ||= [] ) << value
110
+ end
111
+ results << attributes
109
112
  end
110
- results << attributes
113
+ #return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
111
114
  end
112
- #return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
113
115
 
114
116
  hash_results = {}
115
117
  results.each do |item|
@@ -134,8 +136,10 @@ module Rudy
134
136
 
135
137
  doc = call(:get, params)
136
138
  results = []
137
- REXML::XPath.each(doc, '//ItemName/text()') do |item|
138
- results << item.to_s
139
+ if doc
140
+ REXML::XPath.each(doc, '//ItemName/text()') do |item|
141
+ results << item.to_s
142
+ end
139
143
  end
140
144
 
141
145
  #return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
@@ -159,18 +163,20 @@ module Rudy
159
163
 
160
164
  doc = call(:get, params)
161
165
  results = []
162
- REXML::XPath.each(doc, "//Item") do |item|
163
- name = REXML::XPath.first(item, './Name/text()').to_s
166
+ if doc
167
+ REXML::XPath.each(doc, "//Item") do |item|
168
+ name = REXML::XPath.first(item, './Name/text()').to_s
164
169
 
165
- attributes = {'Name' => name}
166
- REXML::XPath.each(item, "./Attribute") do |attr|
167
- key = REXML::XPath.first(attr, './Name/text()').to_s
168
- value = REXML::XPath.first(attr, './Value/text()').to_s
169
- ( attributes[key] ||= [] ) << value
170
+ attributes = {'Name' => name}
171
+ REXML::XPath.each(item, "./Attribute") do |attr|
172
+ key = REXML::XPath.first(attr, './Name/text()').to_s
173
+ value = REXML::XPath.first(attr, './Value/text()').to_s
174
+ ( attributes[key] ||= [] ) << value
175
+ end
176
+ results << attributes
170
177
  end
171
- results << attributes
178
+ #return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
172
179
  end
173
- #return results, REXML::XPath.first(doc, '//NextToken/text()').to_s
174
180
 
175
181
  hash_results = {}
176
182
  results.each do |item|
@@ -216,10 +222,12 @@ module Rudy
216
222
  }
217
223
  )
218
224
  attributes = {}
219
- REXML::XPath.each(doc, "//Attribute") do |attr|
220
- key = REXML::XPath.first(attr, './Name/text()').to_s
221
- value = REXML::XPath.first(attr, './Value/text()').to_s
222
- ( attributes[key] ||= [] ) << value
225
+ if doc
226
+ REXML::XPath.each(doc, "//Attribute") do |attr|
227
+ key = REXML::XPath.first(attr, './Name/text()').to_s
228
+ value = REXML::XPath.first(attr, './Value/text()').to_s
229
+ ( attributes[key] ||= [] ) << value
230
+ end
223
231
  end
224
232
  attributes = nil if attributes.empty?
225
233
  attributes
@@ -154,6 +154,7 @@ module Rudy
154
154
  global :C, :config, String, "Specify another configuration file to read (ie: #{Rudy::CONFIG_FILE})"
155
155
  global :Y, :yes, "Assume a correct answer to confirmation questions"
156
156
  global :q, :quiet, "Run with less output"
157
+ global :O, :offline, "Be cool about the internet being down"
157
158
  global :v, :verbose, "Increase verbosity of output (i.e. -v or -vv or -vvv)" do
158
159
  @verbose ||= 0
159
160
  @verbose += 1
@@ -6,7 +6,7 @@ module AWS; module EC2;
6
6
 
7
7
  def status_valid?
8
8
  avail = Rudy::Utils.service_available?('status.aws.amazon.com', 80, 5)
9
- raise ServiceUnavailable, 'status.aws.amazon.com' unless avail
9
+ raise ServiceUnavailable, 'status.aws.amazon.com' unless @@global.offline || avail
10
10
  true
11
11
  end
12
12
  def status
@@ -31,7 +31,7 @@ module Rudy; module CLI;
31
31
  end
32
32
 
33
33
  def release_valid?
34
- @rr = Rudy::Routines::Release.new
34
+ @rr = Rudy::Routines::Release.new(@alias) # Important: could be rerelease
35
35
  @rr.raise_early_exceptions
36
36
  true
37
37
  end
@@ -34,6 +34,8 @@ module Rudy
34
34
  field :local_user
35
35
  field :local_hostname
36
36
 
37
+ field :offline
38
+
37
39
  field :config => String
38
40
 
39
41
  attr_accessor :print_header
@@ -91,7 +91,6 @@ module Rudy
91
91
  }
92
92
  end
93
93
 
94
-
95
94
  # TODO: trap rbox errors. We could get an authentication error.
96
95
  opts = { :keys => root_keypairpath, :user => 'root', :info => @@global.verbose > 0 }
97
96
  begin
@@ -125,12 +124,12 @@ module Rudy
125
124
  puts task_separator("AUTHORIZE USER")
126
125
  Rudy::Routines::UserHelper.authorize(@routine, machine, rbox)
127
126
  end
128
-
127
+ #puts 1
129
128
  if Rudy::Routines::ScriptHelper.before?(@routine) # before
130
129
  puts task_separator("REMOTE SHELL")
131
130
  Rudy::Routines::ScriptHelper.before(@routine, sconf, machine, rbox)
132
131
  end
133
-
132
+ #puts 2
134
133
  if Rudy::Routines::DiskHelper.disks?(@routine) # disk
135
134
  puts task_separator("DISKS")
136
135
  if rbox.ostype == "sunos"
@@ -139,7 +138,7 @@ module Rudy
139
138
  Rudy::Routines::DiskHelper.execute(@routine, machine, rbox)
140
139
  end
141
140
  end
142
-
141
+
143
142
  # Startup, shutdown, release, deploy, etc...
144
143
  routine_action.call(machine, rbox) if routine_action
145
144
 
@@ -21,7 +21,7 @@ module Rudy
21
21
  ip = /([0-9]{1,3}\.){3}[0-9]{1,3}/.match(ipstr).to_s
22
22
  break if ip && !ip.empty?
23
23
  end
24
- rescue SocketError, Errno::ETIMEDOUT
24
+ rescue SocketError, Errno::ETIMEDOUT => ex
25
25
  STDERR.puts "Connection Error. Check your internets!"
26
26
  end
27
27
  ip += "/32" if ip
@@ -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.1"
4
+ s.version = "0.7.2"
5
5
  s.summary = "Rudy: Not your grandparents' EC2 deployment tool."
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
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.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum