cap-rightscale 0.2.3 → 0.2.4

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cap-rightscale}
8
- s.version = "0.2.3"
8
+ s.version = "0.2.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Satoshi Ohki"]
@@ -41,7 +41,7 @@ Gem::Specification.new do |s|
41
41
  s.homepage = %q{http://github.com/roothybrid7/cap-rightscale}
42
42
  s.licenses = ["MIT"]
43
43
  s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.3.7}
44
+ s.rubygems_version = %q{1.5.0}
45
45
  s.summary = %q{Capistrano extension that maps RightScale parameters to Roles}
46
46
  s.test_files = [
47
47
  "spec/cap-rightscale_spec.rb",
@@ -49,7 +49,6 @@ Gem::Specification.new do |s|
49
49
  ]
50
50
 
51
51
  if s.respond_to? :specification_version then
52
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
53
52
  s.specification_version = 3
54
53
 
55
54
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -4,6 +4,8 @@ require 'ping'
4
4
  module Capistrano
5
5
  class Configuration
6
6
  module RightScale
7
+ attr_writer :validate_echo, :use_nickname, :use_public_ip
8
+
7
9
  def get_rs_confpath
8
10
  @rs_confpath ||= File.join(ENV['HOME'], ".rsconf", "rsapiconfig.yml")
9
11
  end
@@ -12,17 +14,20 @@ module Capistrano
12
14
  @rs_confpath = path
13
15
  end
14
16
 
15
- def rs_cache_lifetime(time)
16
- @lifetime = time # seconds
17
+ def rs_enable(*args)
18
+ args.each do |arg|
19
+ __send__("#{arg}=".to_sym, true) if respond_to?("#{arg}=".to_sym)
20
+ end
17
21
  end
18
22
 
19
- def validate_echo(bool=false)
20
- @pingecho = bool
23
+ def rs_disable(*args)
24
+ args.each do |arg|
25
+ __send__("#{arg}=".to_sym, false) if respond_to?("#{arg}=".to_sym)
26
+ end
21
27
  end
22
28
 
23
- # register deploy host's /etc/hosts OR dns record(replace 's/ #/-000/' to ServerArray name)
24
- def use_nickname(bool=false)
25
- @use_nick = bool
29
+ def rs_cache_lifetime(time)
30
+ @lifetime = time # seconds
26
31
  end
27
32
 
28
33
  def domainname(domain)
@@ -40,6 +45,7 @@ module Capistrano
40
45
  def server_array(role, params)
41
46
  return [] unless check_role(role)
42
47
  raise ArgumentError, ":array_id is not included in params!![#{params}]" unless params.has_key?(:array_id)
48
+ @caller ||= File.basename(caller.map {|x| /(.*?):(\d+)/ =~ x; $1}.first, ".*")
43
49
 
44
50
  start = Time.now
45
51
  logger.info("SETTING ROLE: #{role}")
@@ -65,13 +71,13 @@ start = Time.now
65
71
  host_list = ServerArray.instances(array.id).select {|i| i[:state] == "operational"}.map do |instance|
66
72
  hostname = instance[:nickname].sub(/ #[0-9]+$/, "-%03d" % instance[:nickname].match(/[0-9]+$/).to_s.to_i)
67
73
  hostname << ".#{_domain}" if _domain
68
- ip = instance[:private_ip_address]
69
- if @pingecho
74
+ ip = use_public_ip ? instance[:ip_address] : instance[:private_ip_address]
75
+ if validate_echo
70
76
  next unless Ping.pingecho(ip)
71
77
  end
72
78
 
73
79
  logger.info("Found server: #{hostname}(#{ip})")
74
- enable_hostname ? hostname : ip
80
+ use_nickname ? hostname : ip
75
81
  end
76
82
  host_list.delete(nil)
77
83
 
@@ -96,6 +102,7 @@ puts "Time: #{Time.now - start}"
96
102
  def nickname(role, params)
97
103
  return [] unless check_role(role)
98
104
  raise ArgumentError, ":deployment is not included in params!![#{params}]" unless params.has_key?(:deployment)
105
+ @caller ||= File.basename(caller.map {|x| /(.*?):(\d+)/ =~ x; $1}.first, ".*")
99
106
 
100
107
  start = Time.now
101
108
  logger.info("SETTING ROLE: #{role}")
@@ -122,13 +129,13 @@ start = Time.now
122
129
  host_list = srvs.map do |server|
123
130
  hostname = server[:nickname]
124
131
  hostname << ".#{_domain}" if _domain
125
- ip = server[:settings][:private_ip_address]
126
- if @pingecho
132
+ ip = use_public_ip ? server[:settings][:ip_address] : server[:settings][:private_ip_address]
133
+ if validate_echo
127
134
  next unless Ping.pingecho(ip)
128
135
  end
129
136
 
130
137
  logger.info("Found server: #{hostname}(#{ip})")
131
- enable_hostname ? hostname : ip
138
+ use_nickname ? hostname : ip
132
139
  end
133
140
  host_list.delete(nil)
134
141
 
@@ -154,6 +161,7 @@ puts "Time: #{Time.now - start}"
154
161
  return [] unless check_role(role)
155
162
  raise ArgumentError, ":tags is not included in params!![#{params}]" unless params.has_key?(:tags)
156
163
  raise ArgumentError, ":deployment is not included in params!![#{params}]" unless params.has_key?(:deployment)
164
+ @caller ||= File.basename(caller.map {|x| /(.*?):(\d+)/ =~ x; $1}.first, ".*")
157
165
 
158
166
  start = Time.now
159
167
  logger.info("SETTING ROLE: #{role}")
@@ -190,13 +198,13 @@ start = Time.now
190
198
  host_list = srvs.select {|s| found_ids.include?(s[:href].match(/[0-9]+$/).to_s)}.map do |server|
191
199
  hostname = server[:nickname]
192
200
  hostname << ".#{_domain}" if _domain
193
- ip = server[:settings][:private_ip_address]
194
- if @pingecho
201
+ ip = use_public_ip ? server[:settings][:ip_address] : server[:settings][:private_ip_address]
202
+ if validate_echo
195
203
  next unless Ping.pingecho(ip)
196
204
  end
197
205
 
198
206
  logger.info("Found server: #{hostname}(#{ip})")
199
- enable_hostname ? hostname : ip
207
+ use_nickname ? hostname : ip
200
208
  end
201
209
  host_list.delete(nil)
202
210
  end
@@ -211,12 +219,32 @@ puts "Time: #{Time.now - start}"
211
219
  end
212
220
 
213
221
  private
222
+ def check_role(role)
223
+ return false if ENV['HOSTS']
224
+ return false if ENV['ROLES'] && ENV['ROLES'].split(',').include?("#{role}") == false
225
+ return true
226
+ end
227
+
214
228
  def get_array(id)
215
229
  array = self.instance_variable_get("@array_#{id}")
216
230
 
217
231
  unless array
218
232
  connect
219
- array = self.instance_variable_set("@array_#{id}", ServerArray.show(id))
233
+ begin
234
+ self.instance_variable_set("@array_#{id}", ServerArray.show(id))
235
+ rescue => e
236
+ STDERR.puts("#{e.class}: #{e.pretty_inspect}")
237
+ warn("Backtrace:\n#{e.backtrace.pretty_inspect}")
238
+ exit(1)
239
+ end
240
+
241
+ unless ServerArray.status_code == 200
242
+ STDERR.puts("Errors: STATUS is NOT 200 OK")
243
+ warn(ServerArray.headers)
244
+ exit(1)
245
+ end
246
+
247
+ array = self.instance_variable_get("@array_#{id}")
220
248
  end
221
249
  array
222
250
  end
@@ -226,27 +254,46 @@ puts "Time: #{Time.now - start}"
226
254
 
227
255
  unless dept
228
256
  connect
229
- self.instance_variable_set("@deployment_#{id}", Deployment.show(id, params))
257
+ begin
258
+ self.instance_variable_set("@deployment_#{id}", Deployment.show(id, params))
259
+ rescue => e
260
+ STDERR.puts("#{e.class}: #{e.pretty_inspect}")
261
+ warn("Backtrace:\n#{e.backtrace.pretty_inspect}")
262
+ exit(1)
263
+ end
264
+
265
+ unless Deployment.status_code == 200
266
+ STDERR.puts("Errors: STATUS is NOT 200 OK")
267
+ warn(Deployment.headers)
268
+ exit(1)
269
+ end
270
+
230
271
  dept = self.instance_variable_get("@deployment_#{id}")
231
272
  end
232
273
  dept
233
274
  end
234
275
 
235
276
  def connect
236
- @auth ||= open(get_rs_confpath) {|f| YAML.load(f)}
237
- @conn ||= RightResource::Connection.new do |c|
238
- c.login(:username => @auth["username"], :password => @auth["password"], :account => @auth["account"])
277
+ begin
278
+ @auth ||= open(get_rs_confpath) {|f| YAML.load(f)}
279
+ @conn ||= RightResource::Connection.new do |c|
280
+ c.login(:username => @auth["username"], :password => @auth["password"], :account => @auth["account"])
281
+ end
282
+ rescue Errno::ENOENT => e
283
+ STDERR.puts("Cannot loaded RightScale Auth data!!:\nusername: foo@example.com\npassword: password\naccount: 22329\n")
284
+ exit(1)
239
285
  end
240
-
241
286
  RightResource::Base.connection = @conn
242
287
  end
243
288
 
244
289
  def get_server_cache(role)
245
290
  @lifetime ||= 86400
246
291
  @server_cache ||= {}
292
+ c = caller.map {|x| /(.*?):(\d+)/ =~ x; $1}
293
+ c.delete(__FILE__)
247
294
 
248
295
  begin
249
- @cache_files ||= Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/#{stage}*")
296
+ @cache_files ||= Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/#{@caller}*")
250
297
 
251
298
  @cache_files.each do |c|
252
299
  @server_cache.update(Marshal.load(open(c) {|f| f.read}))
@@ -281,28 +328,31 @@ puts "Time: #{Time.now - start}"
281
328
  cache_dir = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*").first
282
329
  exit if cache_dir.nil?
283
330
  end
284
- cache_file = File.join(cache_dir, stage ? "#{stage}" : "default")
331
+ cache_file = File.join(cache_dir, @caller)
285
332
 
286
333
  begin
287
334
  open(cache_file, "w") {|f| f.write(obj_dump)}
288
335
  rescue => e
289
- logger.error("#{e.class}: #{e.pretty_inspect}")
290
- logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
336
+ STDERR.puts("#{e.class}: #{e.pretty_inspect}")
337
+ warn("Backtrace:\n#{e.backtrace.pretty_inspect}")
291
338
  end
292
339
  end
293
340
 
294
- def enable_hostname
295
- @use_nick ||= false
341
+ def validate_echo
342
+ @validate_echo ||= false
296
343
  end
297
344
 
298
- def _domain
299
- @domain || nil
345
+ # register deploy host's /etc/hosts OR dns record(replace 's/ #/-000/' to ServerArray name)
346
+ def use_nickname
347
+ @use_nickname ||= false
300
348
  end
301
349
 
302
- def check_role(role)
303
- return false if ENV['HOSTS']
304
- return false if ENV['ROLES'] && ENV['ROLES'].split(',').include?("#{role}") == false
305
- return true
350
+ def use_public_ip
351
+ @use_public_ip ||= false
352
+ end
353
+
354
+ def _domain
355
+ @domain || nil
306
356
  end
307
357
  end
308
358
  end
@@ -8,9 +8,8 @@ namespace :rightscale do
8
8
  namespace :cache do
9
9
  task :clear do
10
10
  logger.info("Clear cache all")
11
- pp Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/#{stage}*")
12
- prefix = stage ? "#{stage}" : "default"
13
- FileUtils.rm(Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/#{prefix}*"), {:force => true})
11
+ pp Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/*")
12
+ FileUtils.rm(Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/*"), {:force => true})
14
13
  end
15
14
  end
16
15
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cap-rightscale
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
4
+ hash: 31
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Satoshi Ohki
@@ -19,7 +19,7 @@ date: 2011-02-03 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- prerelease: false
22
+ name: rspec
23
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
@@ -31,11 +31,11 @@ dependencies:
31
31
  - 3
32
32
  - 0
33
33
  version: 2.3.0
34
- name: rspec
35
- requirement: *id001
34
+ prerelease: false
36
35
  type: :development
36
+ requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- prerelease: false
38
+ name: cucumber
39
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
@@ -45,11 +45,11 @@ dependencies:
45
45
  segments:
46
46
  - 0
47
47
  version: "0"
48
- name: cucumber
49
- requirement: *id002
48
+ prerelease: false
50
49
  type: :development
50
+ requirement: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- prerelease: false
52
+ name: bundler
53
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
54
54
  none: false
55
55
  requirements:
@@ -61,11 +61,11 @@ dependencies:
61
61
  - 0
62
62
  - 0
63
63
  version: 1.0.0
64
- name: bundler
65
- requirement: *id003
64
+ prerelease: false
66
65
  type: :development
66
+ requirement: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- prerelease: false
68
+ name: jeweler
69
69
  version_requirements: &id004 !ruby/object:Gem::Requirement
70
70
  none: false
71
71
  requirements:
@@ -77,11 +77,11 @@ dependencies:
77
77
  - 5
78
78
  - 2
79
79
  version: 1.5.2
80
- name: jeweler
81
- requirement: *id004
80
+ prerelease: false
82
81
  type: :development
82
+ requirement: *id004
83
83
  - !ruby/object:Gem::Dependency
84
- prerelease: false
84
+ name: rcov
85
85
  version_requirements: &id005 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
@@ -91,11 +91,11 @@ dependencies:
91
91
  segments:
92
92
  - 0
93
93
  version: "0"
94
- name: rcov
95
- requirement: *id005
94
+ prerelease: false
96
95
  type: :development
96
+ requirement: *id005
97
97
  - !ruby/object:Gem::Dependency
98
- prerelease: false
98
+ name: capistrano
99
99
  version_requirements: &id006 !ruby/object:Gem::Requirement
100
100
  none: false
101
101
  requirements:
@@ -106,11 +106,11 @@ dependencies:
106
106
  - 2
107
107
  - 4
108
108
  version: "2.4"
109
- name: capistrano
110
- requirement: *id006
109
+ prerelease: false
111
110
  type: :runtime
111
+ requirement: *id006
112
112
  - !ruby/object:Gem::Dependency
113
- prerelease: false
113
+ name: rightresource
114
114
  version_requirements: &id007 !ruby/object:Gem::Requirement
115
115
  none: false
116
116
  requirements:
@@ -122,9 +122,9 @@ dependencies:
122
122
  - 3
123
123
  - 4
124
124
  version: 0.3.4
125
- name: rightresource
126
- requirement: *id007
125
+ prerelease: false
127
126
  type: :runtime
127
+ requirement: *id007
128
128
  description: Capistrano extension that maps RightScale parameters to Roles.
129
129
  email: roothybrid7@gmail.com
130
130
  executables: []
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
185
  requirements: []
186
186
 
187
187
  rubyforge_project:
188
- rubygems_version: 1.3.7
188
+ rubygems_version: 1.5.0
189
189
  signing_key:
190
190
  specification_version: 3
191
191
  summary: Capistrano extension that maps RightScale parameters to Roles