cap-rightscale 0.3.12 → 0.3.13

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.12
1
+ 0.3.13
@@ -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.12"
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.3.7}
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 :domainname
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
- @lifetime = time # seconds
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 ? get_server_cache(role) : [] # Get 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.__send__(:array, _array_id)
75
+ array = get_rs_instance.array(_array_id)
66
76
  logger.info("querying rightscale for server_array #{array.nickname}...")
67
- dept = get_rs_instance.__send__(:deployment, array.deployment_href.match(/[0-9]+$/).to_s, :server_settings => 'true')
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.__send__(:array_instances, array.id).select {|i| i[:state] == "operational"}.map do |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 ? get_server_cache(role) : [] # Get 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.__send__(:deployment, _dept_id, :server_settings => 'true')
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 ? get_server_cache(role) : [] # Get 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: 11
5
- prerelease: false
4
+ hash: 9
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 12
10
- version: 0.3.12
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
- 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: []
@@ -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.3.7
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