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 +1 -1
- data/cap-rightscale.gemspec +2 -3
- data/lib/cap-rightscale/configuration/rightscale.rb +84 -34
- data/lib/cap-rightscale/recipes/rightscale/cache.rb +2 -3
- metadata +26 -26
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/cap-rightscale.gemspec
CHANGED
@@ -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.
|
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.
|
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
|
16
|
-
|
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
|
20
|
-
|
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
|
-
|
24
|
-
|
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
|
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
|
-
|
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
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
237
|
-
|
238
|
-
|
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']}-*/#{
|
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,
|
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
|
-
|
290
|
-
|
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
|
295
|
-
@
|
341
|
+
def validate_echo
|
342
|
+
@validate_echo ||= false
|
296
343
|
end
|
297
344
|
|
298
|
-
|
299
|
-
|
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
|
303
|
-
|
304
|
-
|
305
|
-
|
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']}
|
12
|
-
|
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:
|
5
|
-
prerelease:
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
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
|
-
|
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
|
-
|
35
|
-
requirement: *id001
|
34
|
+
prerelease: false
|
36
35
|
type: :development
|
36
|
+
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
|
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
|
-
|
49
|
-
requirement: *id002
|
48
|
+
prerelease: false
|
50
49
|
type: :development
|
50
|
+
requirement: *id002
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
-
|
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
|
-
|
65
|
-
requirement: *id003
|
64
|
+
prerelease: false
|
66
65
|
type: :development
|
66
|
+
requirement: *id003
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
-
|
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
|
-
|
81
|
-
requirement: *id004
|
80
|
+
prerelease: false
|
82
81
|
type: :development
|
82
|
+
requirement: *id004
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
|
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
|
-
|
95
|
-
requirement: *id005
|
94
|
+
prerelease: false
|
96
95
|
type: :development
|
96
|
+
requirement: *id005
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
|
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
|
-
|
110
|
-
requirement: *id006
|
109
|
+
prerelease: false
|
111
110
|
type: :runtime
|
111
|
+
requirement: *id006
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
|
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
|
-
|
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.
|
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
|