cap-rightscale 0.3.12 → 0.3.13
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 +3 -3
- data/lib/cap-rightscale/configuration/rightscale.rb +22 -62
- data/lib/cap-rightscale/configuration/rightscale/cache.rb +64 -0
- metadata +27 -26
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.13
|
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.3.
|
8
|
+
s.version = "0.3.13"
|
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"]
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
"lib/cap-rightscale.rb",
|
33
33
|
"lib/cap-rightscale/configuration.rb",
|
34
34
|
"lib/cap-rightscale/configuration/rightscale.rb",
|
35
|
+
"lib/cap-rightscale/configuration/rightscale/cache.rb",
|
35
36
|
"lib/cap-rightscale/configuration/rightscale/resource.rb",
|
36
37
|
"lib/cap-rightscale/recipes.rb",
|
37
38
|
"lib/cap-rightscale/recipes/rightscale.rb",
|
@@ -44,7 +45,7 @@ Gem::Specification.new do |s|
|
|
44
45
|
s.homepage = %q{http://github.com/roothybrid7/cap-rightscale}
|
45
46
|
s.licenses = ["MIT"]
|
46
47
|
s.require_paths = ["lib"]
|
47
|
-
s.rubygems_version = %q{1.
|
48
|
+
s.rubygems_version = %q{1.5.0}
|
48
49
|
s.summary = %q{Capistrano extension that maps RightScale parameters to Roles}
|
49
50
|
s.test_files = [
|
50
51
|
"spec/cap-rightscale_spec.rb",
|
@@ -52,7 +53,6 @@ Gem::Specification.new do |s|
|
|
52
53
|
]
|
53
54
|
|
54
55
|
if s.respond_to? :specification_version then
|
55
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
56
56
|
s.specification_version = 3
|
57
57
|
|
58
58
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
@@ -1,16 +1,22 @@
|
|
1
1
|
require 'cap-rightscale/utils/rs_utils'
|
2
|
+
require 'cap-rightscale/configuration/rightscale/cache'
|
2
3
|
require 'cap-rightscale/configuration/rightscale/resource'
|
3
4
|
|
4
5
|
module Capistrano
|
5
6
|
class Configuration
|
6
7
|
module RightScale
|
8
|
+
attr_reader :domainname
|
7
9
|
attr_writer :validate_echo, :use_nickname, :use_public_ip, :use_rs_cache
|
8
|
-
attr_accessor :
|
10
|
+
attr_accessor :rs_cache_lifetime
|
9
11
|
|
10
12
|
def get_rs_instance
|
11
13
|
@rs_instance ||= Capistrano::RightScale::Resource.instance
|
12
14
|
end
|
13
15
|
|
16
|
+
def get_cache_instance
|
17
|
+
@cache_instance ||= Capistrano::RightScale::Cache.instance
|
18
|
+
end
|
19
|
+
|
14
20
|
def get_rs_confpath
|
15
21
|
get_rs_instance.confpath
|
16
22
|
end
|
@@ -32,7 +38,11 @@ module Capistrano
|
|
32
38
|
end
|
33
39
|
|
34
40
|
def rs_cache_lifetime(time)
|
35
|
-
|
41
|
+
get_cache_instance.lifetime = time # seconds
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_domainname(domain)
|
45
|
+
@domainname = domain
|
36
46
|
end
|
37
47
|
|
38
48
|
# Get RightScale Server Array
|
@@ -55,20 +65,20 @@ start = Time.now
|
|
55
65
|
_array_id = params[:array_id]
|
56
66
|
params.delete(:array_id) # remove rightscale's parameters
|
57
67
|
|
58
|
-
host_list = use_rs_cache ?
|
68
|
+
host_list = use_rs_cache ? get_cache_instance.load_server_cache(role, @caller) : [] # Get cache
|
59
69
|
|
60
70
|
if host_list && host_list.size > 0
|
61
71
|
logger.info("restore cache of servers:\n#{host_list.pretty_inspect}")
|
62
72
|
role(role, params) { host_list } # set cache to role()
|
63
73
|
else
|
64
74
|
# Request RightScale API
|
65
|
-
array = get_rs_instance.
|
75
|
+
array = get_rs_instance.array(_array_id)
|
66
76
|
logger.info("querying rightscale for server_array #{array.nickname}...")
|
67
|
-
dept = get_rs_instance.
|
77
|
+
dept = get_rs_instance.deployment(array.deployment_href.match(/[0-9]+$/).to_s, :server_settings => 'true')
|
68
78
|
deployment_name = dept.nickname
|
69
79
|
logger.info("Deployment #{deployment_name}:")
|
70
80
|
|
71
|
-
host_list = get_rs_instance.
|
81
|
+
host_list = get_rs_instance.array_instances(array.id).select {|i| i[:state] == "operational"}.map do |instance|
|
72
82
|
hostname = instance[:nickname].sub(/ #[0-9]+$/, "-%03d" % instance[:nickname].match(/[0-9]+$/).to_s.to_i)
|
73
83
|
hostname << ".#{domainname}" if domainname && hostname.match(/#{domainname}/).nil?
|
74
84
|
ip = use_public_ip ? instance[:ip_address] : instance[:private_ip_address]
|
@@ -80,7 +90,7 @@ start = Time.now
|
|
80
90
|
|
81
91
|
if host_list && host_list.size > 0
|
82
92
|
role(role, params) { host_list }
|
83
|
-
dump_server_cache(role, host_list) if use_rs_cache # Dump cache
|
93
|
+
get_cache_instance.dump_server_cache(role, host_list, @caller) if use_rs_cache # Dump cache
|
84
94
|
end
|
85
95
|
end
|
86
96
|
puts "Time: #{Time.now - start}"
|
@@ -111,14 +121,14 @@ start = Time.now
|
|
111
121
|
params.delete(:deployment)
|
112
122
|
params.delete(:name_prefix) if params.has_key?(:name_prefix)
|
113
123
|
|
114
|
-
host_list = use_rs_cache ?
|
124
|
+
host_list = use_rs_cache ? get_cache_instance.load_server_cache(role, @caller) : [] # Get cache
|
115
125
|
|
116
126
|
if host_list && host_list.size > 0
|
117
127
|
logger.info("restore cache of servers:\n#{host_list.pretty_inspect}")
|
118
128
|
role(role, params) { host_list } # set cache to role()
|
119
129
|
else
|
120
130
|
# Request RightScale API
|
121
|
-
dept = get_rs_instance.
|
131
|
+
dept = get_rs_instance.deployment(_dept_id, :server_settings => 'true')
|
122
132
|
logger.info("querying rightscale for servers #{_name_prefix} in deployment #{dept.nickname}...")
|
123
133
|
srvs = dept.servers.select {|s| s[:state] == "operational"}
|
124
134
|
srvs = srvs.select {|s| /#{_name_prefix}/ =~ s[:nickname]} if _name_prefix
|
@@ -135,7 +145,7 @@ start = Time.now
|
|
135
145
|
|
136
146
|
if host_list && host_list.size > 0
|
137
147
|
role(role, params) { host_list }
|
138
|
-
dump_server_cache(role, host_list) if use_rs_cache # Dump cache
|
148
|
+
get_cache_instance.dump_server_cache(role, host_list, @caller) if use_rs_cache # Dump cache
|
139
149
|
end
|
140
150
|
end
|
141
151
|
puts "Time: #{Time.now - start}"
|
@@ -167,7 +177,7 @@ start = Time.now
|
|
167
177
|
params.delete(:deployment)
|
168
178
|
params.delete(:tags)
|
169
179
|
|
170
|
-
host_list = use_rs_cache ?
|
180
|
+
host_list = use_rs_cache ? get_cache_instance.load_server_cache(role, @caller) : [] # Get cache
|
171
181
|
|
172
182
|
if host_list && host_list.size > 0
|
173
183
|
logger.info("restore cache of servers:\n#{host_list.pretty_inspect}")
|
@@ -202,7 +212,7 @@ start = Time.now
|
|
202
212
|
|
203
213
|
if host_list && host_list.size > 0
|
204
214
|
role(role, params) { host_list }
|
205
|
-
dump_server_cache(role, host_list) if use_rs_cache # Dump cache
|
215
|
+
get_cache_instance.dump_server_cache(role, host_list, @caller) if use_rs_cache # Dump cache
|
206
216
|
end
|
207
217
|
end
|
208
218
|
puts "Time: #{Time.now - start}"
|
@@ -216,56 +226,6 @@ puts "Time: #{Time.now - start}"
|
|
216
226
|
return true
|
217
227
|
end
|
218
228
|
|
219
|
-
def get_server_cache(role)
|
220
|
-
@lifetime ||= 86400
|
221
|
-
server_cache = self.instance_variable_get("@#{role}_cache")
|
222
|
-
|
223
|
-
begin
|
224
|
-
cache_files = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/#{@caller}*#{role}")
|
225
|
-
|
226
|
-
if cache_files.size > 0 && !server_cache
|
227
|
-
c = Marshal.load(open(cache_files.first) {|f| f.read})
|
228
|
-
self.instance_variable_set("@#{role}_cache", c)
|
229
|
-
end
|
230
|
-
server_cache = self.instance_variable_get("@#{role}_cache")
|
231
|
-
return [] unless server_cache # No cache entry
|
232
|
-
|
233
|
-
# get servers
|
234
|
-
if Time.now - server_cache[role][:cache] > @lifetime
|
235
|
-
server_list = []
|
236
|
-
elsif server_cache[role][:servers]
|
237
|
-
server_list = server_cache[role][:servers]
|
238
|
-
else
|
239
|
-
server_list = []
|
240
|
-
end
|
241
|
-
rescue => e
|
242
|
-
return [] unless server_cache
|
243
|
-
end
|
244
|
-
|
245
|
-
server_list
|
246
|
-
end
|
247
|
-
|
248
|
-
def dump_server_cache(role, servers)
|
249
|
-
h = {role => {:servers => servers, :cache => Time.now}}
|
250
|
-
obj_dump = Marshal.dump(h)
|
251
|
-
|
252
|
-
# Get cache directory
|
253
|
-
cache_dir = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*").first
|
254
|
-
if cache_dir.nil?
|
255
|
-
RSUtils.mk_rs_cache_dir
|
256
|
-
cache_dir = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*").first
|
257
|
-
exit if cache_dir.nil?
|
258
|
-
end
|
259
|
-
cache_file = File.join(cache_dir, "#{@caller}-#{role}")
|
260
|
-
|
261
|
-
begin
|
262
|
-
open(cache_file, "w") {|f| f.write(obj_dump)}
|
263
|
-
rescue => e
|
264
|
-
STDERR.puts("#{e.class}: #{e.pretty_inspect}")
|
265
|
-
warn("Backtrace:\n#{e.backtrace.pretty_inspect}")
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
229
|
def validate_echo
|
270
230
|
@validate_echo ||= false
|
271
231
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module Capistrano
|
4
|
+
module RightScale
|
5
|
+
class Cache
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
attr_accessor :lifetime
|
9
|
+
attr_reader :array, :array_instances, :deployment
|
10
|
+
def initialize
|
11
|
+
@lifetime = 86400
|
12
|
+
end
|
13
|
+
|
14
|
+
def load_server_cache(role, prefix=nil)
|
15
|
+
server_cache = self.instance_variable_get("@#{role}_cache")
|
16
|
+
|
17
|
+
begin
|
18
|
+
cache_files = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*/#{prefix}*#{role}.cache")
|
19
|
+
|
20
|
+
if cache_files.size > 0 && !server_cache
|
21
|
+
c = Marshal.load(open(cache_files.first) {|f| f.read})
|
22
|
+
self.instance_variable_set("@#{role}_cache", c)
|
23
|
+
end
|
24
|
+
server_cache = self.instance_variable_get("@#{role}_cache")
|
25
|
+
return [] unless server_cache # No cache entry
|
26
|
+
|
27
|
+
# get servers
|
28
|
+
if Time.now - server_cache[role][:cache] > lifetime
|
29
|
+
server_list = []
|
30
|
+
elsif server_cache[role][:servers]
|
31
|
+
server_list = server_cache[role][:servers]
|
32
|
+
else
|
33
|
+
server_list = []
|
34
|
+
end
|
35
|
+
rescue => e
|
36
|
+
return [] unless server_cache
|
37
|
+
end
|
38
|
+
|
39
|
+
server_list
|
40
|
+
end
|
41
|
+
|
42
|
+
def dump_server_cache(role, servers, prefix=nil)
|
43
|
+
h = {role => {:servers => servers, :cache => Time.now}}
|
44
|
+
obj_dump = Marshal.dump(h)
|
45
|
+
|
46
|
+
# Get cache directory
|
47
|
+
cache_dir = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*").first
|
48
|
+
if cache_dir.nil?
|
49
|
+
RSUtils.mk_rs_cache_dir
|
50
|
+
cache_dir = Dir.glob("#{Dir.tmpdir}/cap-rightscale-#{ENV['USER']}-*").first
|
51
|
+
exit if cache_dir.nil?
|
52
|
+
end
|
53
|
+
cache_file = File.join(cache_dir, "#{prefix}-#{role}.cache")
|
54
|
+
|
55
|
+
begin
|
56
|
+
open(cache_file, "w") {|f| f.write(obj_dump)}
|
57
|
+
rescue => e
|
58
|
+
STDERR.puts("#{e.class}: #{e.pretty_inspect}")
|
59
|
+
warn("Backtrace:\n#{e.backtrace.pretty_inspect}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
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: 9
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 13
|
10
|
+
version: 0.3.13
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Satoshi Ohki
|
@@ -19,7 +19,7 @@ date: 2011-02-04 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: []
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/cap-rightscale.rb
|
151
151
|
- lib/cap-rightscale/configuration.rb
|
152
152
|
- lib/cap-rightscale/configuration/rightscale.rb
|
153
|
+
- lib/cap-rightscale/configuration/rightscale/cache.rb
|
153
154
|
- lib/cap-rightscale/configuration/rightscale/resource.rb
|
154
155
|
- lib/cap-rightscale/recipes.rb
|
155
156
|
- lib/cap-rightscale/recipes/rightscale.rb
|
@@ -188,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
189
|
requirements: []
|
189
190
|
|
190
191
|
rubyforge_project:
|
191
|
-
rubygems_version: 1.
|
192
|
+
rubygems_version: 1.5.0
|
192
193
|
signing_key:
|
193
194
|
specification_version: 3
|
194
195
|
summary: Capistrano extension that maps RightScale parameters to Roles
|