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 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