cap-rightscale 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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