rightresource 0.2.8 → 0.2.9

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/README.rdoc CHANGED
@@ -10,7 +10,4 @@ License:: The MIT License
10
10
  rest_client
11
11
  crack
12
12
 
13
- == install
14
- sudo gem install json rest-client crack
15
-
16
13
  == example
@@ -1,7 +1,10 @@
1
1
  class AlertSpec < RightResource::Base
2
2
  class << self
3
3
  def alert_specs_subject(id, params={})
4
- connection.post(element_path(id, :alert_specs_subject, params))
4
+ pair = URI.decode({:alert_specs_subject => params}.to_params).split('&').map {|l| l.split('=')}
5
+ h = Hash[*pair.flatten]
6
+ path = "alert_specs_subject"
7
+ action(:post, path, h)
5
8
  end
6
9
  end
7
10
  end
@@ -20,7 +20,7 @@ module RightResource
20
20
 
21
21
  # Set RESTFul client with login authentication for HTTP Methods(Low level)
22
22
  # === Examples
23
- # conn = Connection.new do |c|
23
+ # conn = RightResource::Connection.new do |c|
24
24
  # c.login(:username => "user", :password => "pass", :account => "1")
25
25
  # end
26
26
  # Deployment.connection = conn
@@ -83,6 +83,27 @@ module RightResource
83
83
  connection.resource_id || nil
84
84
  end
85
85
 
86
+ # RestFul Method
87
+ def action(method, path, params={})
88
+ case method
89
+ when :get
90
+ connection.get(path, params)
91
+ when :post
92
+ connection.post(path, params)
93
+ when :put
94
+ connection.put(path, params)
95
+ when :delete
96
+ connection.delete(path, params)
97
+ end
98
+ rescue RestClient::ResourceNotFound
99
+ nil
100
+ rescue => e
101
+ logger.error("#{e.class}: #{e.pretty_inspect}")
102
+ logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
103
+ ensure
104
+ logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
105
+ end
106
+
86
107
  # Get resources by index method
87
108
  # same resources support criteria like filtering.
88
109
  #
@@ -150,14 +171,30 @@ module RightResource
150
171
  end
151
172
 
152
173
  # Create new resource
153
- # Example:
174
+ # ==== Parameters
175
+ #
176
+ # * +params+ - see Examples
177
+ #
178
+ # === Examples
154
179
  # params = {
155
- # :nickname => "dev",
156
- # :deployment_href => "https://my.rightscale.com/api/acct/22329/deployments/59855",
157
- # :server_template_href => "https://my.rightscale.com/api/acct/22329/server_templates/76610",
158
- # :ec2_availability_zone => "ap-northeast-1a"
180
+ # :cloud_id => 4, # {1 = us-east; 2 = eu; 3 = us-west, 4 = ap}
181
+ # :ec2_image_href => "https://my.rightscale.com/api/acct/22329/multi_cloud_images/40840", # AMI image or MultiCloud image
182
+ # :nickname =>"dev703", # Instance rightscale nickname
183
+ # :instance_type => 'm1.xlarge',
184
+ # :assoicate_eip_at_launch => '0',
185
+ # :deployment_href => "https://my.rightscale.com/api/acct/22329/deployments/63387",
186
+ # :ec2_availability_zone=>"ap-southeast-1b", # (ex: 'us-east-1a', 'any')
187
+ # :ec2_ssh_key_href => "https://my.rightscale.com/api/acct/22329/ec2_ssh_keys/240662",
188
+ # :ec2_security_group =>
189
+ # ["https://my.rightscale.com/api/acct/22329/ec2_security_groups/170342",
190
+ # "https://my.rightscale.com/api/acct/22329/ec2_security_groups/170344",
191
+ # "https://my.rightscale.com/api/acct/22329/ec2_security_groups/170353"],
192
+ # :server_template_href => "https://my.rightscale.com/api/acct/22329/ec2_server_templates/82665" # rightscale servertemplate
159
193
  # }
160
- # Server.create(params)
194
+ # server_id = Server.create(params).id
195
+ # settings = Server.settings(server_id)
196
+ # p settings
197
+ #
161
198
  def create(params={})
162
199
  #TODO: refactor
163
200
  self.new(params).tap do |resource|
@@ -187,12 +224,12 @@ module RightResource
187
224
 
188
225
  # Get single resource
189
226
  def element_path(id, prefix_options = nil, query_options = nil)
190
- "#{resource_name}s/#{id}#{prefix(prefix_options)}.#{format.extension}#{query_string(query_options)}"
227
+ "#{resource_name}s/#{id}#{prefix(prefix_options)}#{query_string(query_options)}"
191
228
  end
192
229
 
193
230
  # Get resource collections
194
231
  def collection_path(prefix_options = nil, query_options = nil)
195
- "#{resource_name}s#{prefix(prefix_options)}.#{format.extension}#{query_string(query_options)}"
232
+ "#{resource_name}s#{prefix(prefix_options)}#{query_string(query_options)}"
196
233
  end
197
234
 
198
235
  # Get resource name(equals plural of classname)
@@ -233,7 +270,7 @@ module RightResource
233
270
  raise ArgumentError, "expected an Hash, String or Symbol, got #{options.pretty_inspect}"
234
271
  end
235
272
  end
236
- default
273
+ "#{default}.#{format.extension}"
237
274
  end
238
275
 
239
276
  # create querystring by crack to_params method
@@ -271,7 +308,7 @@ module RightResource
271
308
 
272
309
  def loads(attributes)
273
310
  raise ArgumentError, "expected an attributes Hash, got #{attributes.pretty_inspect}" unless attributes.is_a?(Hash)
274
- attributes.each_pair {|key,value| @attributes[key.to_s.gsub('-', '_').to_sym] = value}
311
+ @attributes = attributes.generate_attributes
275
312
  self
276
313
  end
277
314
 
@@ -316,18 +353,18 @@ module RightResource
316
353
  #TODO: refactor hard coding
317
354
  attrs = self.attributes.reject {|key,value| key.to_s == "cloud_id"}
318
355
  pair = URI.decode({resource_name.to_sym => attrs}.to_params).split('&').map {|l| l.split('=')}
319
- headers = Hash[*pair.flatten]
320
- headers["cloud_id"] = self.attributes[:cloud_id] if self.attributes.has_key?(:cloud_id)
321
- connection.put(element_path, headers)
356
+ h = Hash[*pair.flatten]
357
+ h["cloud_id"] = self.attributes[:cloud_id] if self.attributes.has_key?(:cloud_id)
358
+ connection.put(element_path, h)
322
359
  end
323
360
 
324
361
  def create
325
362
  #TODO: refactor hard coding
326
363
  attrs = self.attributes.reject {|key,value| key.to_s == "cloud_id"}
327
364
  pair = URI.decode({resource_name.to_sym => attrs}.to_params).split('&').map {|l| l.split('=')}
328
- headers = Hash[*pair.flatten]
329
- headers["cloud_id"] = self.attributes[:cloud_id] if self.attributes.has_key?(:cloud_id)
330
- connection.post(collection_path, headers)
365
+ h= Hash[*pair.flatten]
366
+ h["cloud_id"] = self.attributes[:cloud_id] if self.attributes.has_key?(:cloud_id)
367
+ connection.post(collection_path, h)
331
368
  self.id = self.class.resource_id
332
369
  end
333
370
 
@@ -0,0 +1,11 @@
1
+ class Hash
2
+ def generate_attributes
3
+ attrs = {}
4
+ self.each_pair {|key,value| attrs[key.to_s.gsub('-', '_').to_sym] = value}
5
+ if attrs
6
+ self.clear
7
+ self.merge!(attrs)
8
+ end
9
+ self
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ require 'right_resource/core_ext/hash/generate_attributes'
@@ -1,3 +1,3 @@
1
1
  if RUBY_VERSION < "1.9.0"
2
- require 'right_resource/core_ext/object/tap.rb'
2
+ require 'right_resource/core_ext/object/tap'
3
3
  end
@@ -1,15 +1,14 @@
1
+ # == Define methods
2
+ # deployment actions (start_all, stop_all, duplicate)
3
+ # ==== Parameters
4
+ # * +id+ - RightScale deployment resource id(https://my.rightscale.com/deployments/{id})
1
5
  class Deployment < RightResource::Base
2
6
  class << self
3
- def start_all(id)
4
- connection.post(element_path(id, :start_all))
5
- end
6
-
7
- def stop_all(id)
8
- connection.post(element_path(id, :stop_all))
9
- end
10
-
11
- def duplicate(id)
12
- connection.post(element_path(id, :duplicate))
7
+ [:start_all, :stop_all, :duplicate].each do |act_method|
8
+ define_method(act_method) do |id|
9
+ path = element_path(id, act_method).sub(/\.#{format.extension}$/, '')
10
+ action(:post, path)
11
+ end
13
12
  end
14
13
  end
15
14
  end
@@ -1,8 +1,16 @@
1
+ # == alias_method
2
+ # * _attach_to_server_ - component_ec2_ebs_volumes
1
3
  class Ec2EbsVolume < RightResource::Base
2
4
  class << self
3
- def attach_to_server
4
- name = "component_ec2_ebs_volumes"
5
- raise NotImplementedError
5
+ # Eb2Volume attach to server
6
+ # === Parameters
7
+ # * +params+ - Hash (keys = [:ec2_ebs_volume_href, :component_href, :device, :mount])
8
+ def component_ec2_ebs_volumes(params)
9
+ pair = URI.decode({:component_ec2_ebs_volume => elems}.to_params).split('&').map {|l| l.split('=')}
10
+ h = Hash[*pair.flatten]
11
+ path = "component_ec2_ebs_volumes"
12
+ action(:post, path, h)
6
13
  end
14
+ alias_method :attach_to_server, :component_ec2_ebs_volumes
7
15
  end
8
16
  end
@@ -1,11 +1,6 @@
1
1
  class Ec2ElasticIp < RightResource::Base
2
2
  class << self
3
- def update(id)
4
- raise NotImplementedError
5
- end
6
- end
7
-
8
- def update
9
- raise NotImplementedError
3
+ undef :update
10
4
  end
5
+ undef :update
11
6
  end
@@ -1,7 +1,5 @@
1
1
  class Ec2SshKey < RightResource::Base
2
2
  class << self
3
- def index(id)
4
- raise NotImplementedError
5
- end
3
+ undef :index
6
4
  end
7
5
  end
@@ -1,27 +1,6 @@
1
1
  class MultiCloudImage < RightResource::Base
2
2
  class << self
3
- def create
4
- raise NotImplementedError
5
- end
6
-
7
- def update(id)
8
- raise NotImplementedError
9
- end
10
-
11
- def destory(id)
12
- raise NotImplementedError
13
- end
14
- end
15
-
16
- def create
17
- raise NotImplementedError
18
- end
19
-
20
- def update(id)
21
- raise NotImplementedError
22
- end
23
-
24
- def destory(id)
25
- raise NotImplementedError
3
+ undef :create, :update, :destory
26
4
  end
5
+ undef :create, :update, :destory
27
6
  end
@@ -1,27 +1,6 @@
1
1
  class RightScript < RightResource::Base
2
2
  class << self
3
- def create
4
- raise NotImplementedError
5
- end
6
-
7
- def update(id)
8
- raise NotImplementedError
9
- end
10
-
11
- def destory(id)
12
- raise NotImplementedError
13
- end
14
- end
15
-
16
- def create
17
- raise NotImplementedError
18
- end
19
-
20
- def update(id)
21
- raise NotImplementedError
22
- end
23
-
24
- def destory(id)
25
- raise NotImplementedError
3
+ undef :create, :update, :destory
26
4
  end
5
+ undef :create, :update, :destory
27
6
  end
@@ -1,11 +1,6 @@
1
1
  class S3Bucket < RightResource::Base
2
2
  class << self
3
- def update(id)
4
- raise NotImplementedError
5
- end
6
- end
7
-
8
- def update
9
- raise NotImplementedError
3
+ undef :update
10
4
  end
5
+ undef :update
11
6
  end
@@ -1,48 +1,116 @@
1
+ # == define_methods 1
2
+ # Server Action
3
+ # * _start_
4
+ # * _stop_
5
+ # * _restart_
6
+ #
7
+ # === Parameters
8
+ # * _id_ - RightScale server resource id(https://my.rightscale.com/servers/{id})
9
+ # === Examples
10
+ # server_id = Server.index(:filter => "nickname=dev001").first.id
11
+ # Server.start(server_id)
12
+ #
13
+ # == define_methods 2
14
+ # Server and other resource action
15
+ # * _run_script_
16
+ # * _attach_volume_
17
+ # === Parameters
18
+ # * _id_ - RightScale server resource id(https://my.rightscale.com/servers/{id})
19
+ # * _params_ - Hash(ex. :right_script, :ec2_ebs_volume_href, :device)
20
+ # === Examples
21
+ # server_id = 1
22
+ # params = {:ec2_ebs_volume_href => "https://my.rightscale.com/api/acct/##/ec2_ebs_volumes/1", :device => "/dev/sdj"}
23
+ # Server.attach_volume(server_id, params) # => 204 No Content
1
24
  class Server < RightResource::Base
2
25
  class << self
3
- #TODO: refactor define_method or method_missing
4
- def action; end
5
- # server start(Starting created instance)
6
- # === Examples
7
- # server_id = Server.index(:filter => "nickname=dev001").first.id
8
- # Server.start(server_id)
9
- def start(id)
10
- connection.post(element_path(id, :start))
11
- end
12
-
13
- # server stop(Starting created instance)
14
- def stop(id)
15
- connection.post(element_path(id, :stop))
26
+ [:start, :stop, :reboot].each do |act_method|
27
+ define_method(act_method) do |id|
28
+ path = element_path(id, act_method).sub(/\.#{format.extension}$/, '')
29
+ action(:post, path)
30
+ end
16
31
  end
17
32
 
18
- # server restart(Starting created instance)
19
- def reboot(id)
20
- connection.post(element_path(id, :reboot))
33
+ [:run_script, :attach_volume].each do |act_method|
34
+ define_method(act_method) do |id,params|
35
+ elems = params.reject {|key,value| key == :right_script} # select server resource params
36
+ pair = URI.decode({resource_name.to_sym => elems}.to_params).split('&').map {|l| l.split('=')}
37
+ h = Hash[*pair.flatten]
38
+ h["right_script"] = params[:right_script] if params.has_key?(:right_script)
39
+ path = element_path(id, act_method)
40
+ action(:post, path, h)
41
+ end
21
42
  end
22
43
 
23
- # Run rightscript
24
- # location header is status href
25
- def run_script(id, params={})
26
- raise NotImplementedError
27
- end
28
-
29
- def attach_volume(id, params={})
30
- raise NotImplementedError
44
+ # Get sampleing data
45
+ # === Return
46
+ # Hash (keys # => [:cf, :start, :vars, :lag_time, :end, :data :avg_lag_time])
47
+ # === Examples
48
+ # server_id = 848422
49
+ # params = {:start => -180, :end => -20, :plugin_name => "cpu-0", :plugin_type => "cpu-idle"}
50
+ # Server.get_sketchy_data(server_id, params)
51
+ def get_sketchy_data(id, params)
52
+ path = element_path(id, :get_sketchy_data, params)
53
+ format.decode(action(:get, path)).generate_attributes
31
54
  end
32
55
 
33
- def get_sketchy_data(id, params={})
34
- raise NotImplementedError
56
+ # Get URL of Server monitoring graph
57
+ # === Examples
58
+ # * General Graph
59
+ # Server.monitoring(1)
60
+ #
61
+ # * Custumize Graph
62
+ # server_id = 1
63
+ # params = {:graph_name => "cpu-0/cpu-idle", :size => "small", :period => "day", :title => "MyCpuGraph", :tz => "JST"}
64
+ # Server.monitoring(server_id, params)
65
+ def monitoring(id, params={})
66
+ if params[:graph_name]
67
+ prefix_options = params[:graph_name]
68
+ params.delete(:graph_name)
69
+ path = element_path(id, :monitoring => prefix_options)
70
+ else
71
+ path = element_path(id, :monitoring)
72
+ end
73
+ format.decode(action(:get, path, params)).generate_attributes
35
74
  end
36
75
 
76
+ # Get Server settings(Subresource)
77
+ # === Examples
78
+ # server_id = Server.index(:filter => "nickname=dev-001").first.id
79
+ # settings = Server.settings(server_id)
37
80
  def settings(id)
38
81
  path = element_path(id, :settings)
39
- generate_attributes(format.decode(connection.get(path)))
82
+ format.decode(action(:get, path)).generate_attributes
83
+ end
84
+
85
+ # Get status of any running jobs after calling to the servers resource to run_script
86
+ # === Parameters
87
+ # * +resource_ref+ - Hash[:id] or Hash[:href](execute run_script method response location header)
88
+ # (ex. Location: https://my.rightscale.com/api/acct/##/statuses/{id})
89
+ # === Examples
90
+ # server_id = 1
91
+ # right_script_id = 1
92
+ # Server.run_script(server_id, :right_script => right_script_id)
93
+ # # => 201 Created, location: https://my.rightscale.com/api/acct/##/statuses/12345
94
+ #
95
+ # Server.statuses(:id => Server.resource_id) if Server.status == 201
96
+ # or
97
+ # Server.statuses(:href => Server.headers[:location]) if Server.status == 201
98
+ def statuses(resource_ref)
99
+ path = element_path(id, :get_sketchy_data, params)
100
+ format.decode(action(:get, path)).generate_attributes
40
101
  end
41
102
 
103
+ # Get Server tags(server or ec2_current_instance)
104
+ # === Parameters
105
+ # * +resource_href+ - server.href or server.ec2_current_href
106
+ # === Examples
107
+ # server = Server.show(1)
108
+ # tags = Server.tags(server.ec2_current_href)
109
+ # # => [{"name"=>"rs_login:state=active"}, {"name"=>"rs_logging:state=active"}, {"name"=>"rs_monitoring:state=active"}]
42
110
  def tags(resource_href)
43
- query_options = {'resource_href' => resource_href}
111
+ query_options = {:resource_href => resource_href}
44
112
  path = "tags/search.#{format.extension}#{query_string(query_options)}"
45
- Hash[*format.decode(connection.get(path)).collect {|tag|
113
+ Hash[*format.decode(action(:get, path)).collect {|tag|
46
114
  tag['name'].split('=')
47
115
  }.flatten]
48
116
  end
@@ -1,21 +1,42 @@
1
1
  class ServerArray < RightResource::Base
2
2
  class << self
3
+ # server array launch
4
+ # ==== Parameters
5
+ # * +id+ - RightScale server array resource id(https://my.rightscale.com/server_arrays/{id})
6
+ #
7
+ # === Examples
8
+ # array_id = 1
9
+ # ServerArray.launch(array_id)
3
10
  def launch(id)
4
- connection.post(element_path(id, :launch))
11
+ path = element_path(id, :launch)
12
+ action(:post, path)
5
13
  end
6
14
 
15
+ # server array terminate all
16
+ # === Examples
17
+ # ServerArray.terminate_all(1)
18
+ # # => {:ec2_instances=>{"failure"=>[],
19
+ # "success"=>[{"ec2_instance_href"=>"https://my.rightscale.com/api/acct/##/ec2_instances/1367"}]}}
7
20
  def terminate_all(id)
8
- connection.post(element_path(id, :terminate_all))
21
+ path = element_path(id, :terminate_all)
22
+ format.decode(action(:post, path)).generate_attributes
9
23
  end
10
24
 
11
- def run_script_on_all(id)
25
+ # Run script on all
26
+ # === Exception
27
+ # * +NotImplementedError+
28
+ def run_script_on_all(id, params)
12
29
  raise NotImplementedError
30
+ # pair = URI.decode({resource_name.to_sym => params}.to_params).split('&').map {|l| l.split('=')}
31
+ # h = Hash[*pair.flatten]
32
+ # path = element_path(id, :run_script_on_all)
33
+ # action(:post, path, h)
13
34
  end
14
35
 
15
36
  def instances(id)
16
37
  path = element_path(id, :instances)
17
- result = format.decode(connection.get(path)).map do |instance|
18
- generate_attributes(instance)
38
+ result = format.decode(action(:get, path)).map do |instance|
39
+ instance.generate_attributes
19
40
  end
20
41
  end
21
42
  end
@@ -1,8 +1,11 @@
1
1
  class ServerTemplate < RightResource::Base
2
2
  class << self
3
+ # === Parameters
4
+ # * _id_ - ServerTemplate id
5
+ # * _params_ - Hash (keys = [:phase]) ex. 'boot', 'operational', 'decommission'
3
6
  def executables(id, params={})
4
7
  path = element_path(id, :executables, params)
5
- instantiate_collection(format.decode(connection.get(path)))
8
+ format.decode(connection.get(path)).map {|x| x.generate_attributes}
6
9
  end
7
10
  end
8
11
  end
@@ -1,31 +1,6 @@
1
1
  class Status < RightResource::Base
2
2
  class << self
3
- def index(id)
4
- raise NotImplementedError
5
- end
6
-
7
- def create
8
- raise NotImplementedError
9
- end
10
-
11
- def update(id)
12
- raise NotImplementedError
13
- end
14
-
15
- def destory(id)
16
- raise NotImplementedError
17
- end
18
- end
19
-
20
- def create
21
- raise NotImplementedError
22
- end
23
-
24
- def update(id)
25
- raise NotImplementedError
26
- end
27
-
28
- def destory(id)
29
- raise NotImplementedError
3
+ undef :index, :create, :update, :destory
30
4
  end
5
+ undef :create, :update, :destory
31
6
  end
@@ -0,0 +1,66 @@
1
+ # == define_methods
2
+ # * _set_
3
+ # * _unset_
4
+ # === Examples
5
+ # Set tags for a resource
6
+ # ec2_href = Server.show(1).current_instance_href
7
+ # params = {:resource_href => ec2_href, :tags => ["xx99_server:role=dev", "xx99_server:group=dev"]}
8
+ # Tag.set(params)
9
+ # puts Tag.status
10
+ # p Tag.search(:resource_href => ec2_href)
11
+ # Unset tags for a resource
12
+ # Tag.unset(params)
13
+ # puts Tag.status
14
+ # p Tag.search(:resource_href => ec2_href)
15
+ class Tag < RightResource::Base
16
+ class << self
17
+ undef :index, :show, :create, :update, :destory
18
+
19
+ [:set, :unset].each do |act_method|
20
+ define_method(act_method) do |params|
21
+ path = "#{get_tag_resource_path(act_method)}"
22
+ action(:put, path, params)
23
+ end
24
+ end
25
+
26
+ # Search tags for a resource(resource_href in params) or resources matching giving tags
27
+ # === Parameters
28
+ # * +params+ - Hash (keys = [:resource_href or :resource_type, :match_all, :tags])
29
+ # === Return
30
+ # Array(tags)
31
+ # === Examples
32
+ # Get tags for a resource
33
+ # Tag.search(:resource_href => "/ec2_instances/1")
34
+ #
35
+ # Get resources matching tags
36
+ # param = {:resource_type => "ec2_instance", :tags => ["x99_db:role=*"]}
37
+ # servers = Tag.search(p).select {|server| server[:state] == "operational"}.map do |resource|
38
+ # Server.new(resource)
39
+ # end
40
+ #
41
+ # param = {:resource_type => "ec2_instance", :match_all => 'true', :tags => ["x99_db:role=slave"]}
42
+ # servers = Tag.search(p).select {|server| server[:state] == "operational"}.map do |resource|
43
+ # Server.new(resource)
44
+ # end
45
+ def search(params)
46
+ path = "#{get_tag_resource_path("search")}.#{format.extension}#{query_string(params)}"
47
+ result = format.decode(action(:get, path)).map do |tags|
48
+ tags.generate_attributes
49
+ end
50
+ end
51
+
52
+ # === Examples
53
+ # Tag.taggable_resources
54
+ def taggable_resources
55
+ # "#{self.name.to_s.split('::').last}s/#{__method__}" if RUBY_VERSION >= "1.8.7"
56
+ path = get_tag_resource_path("taggable_resources")
57
+ RightResource::Formats::XmlFormat.decode(action(:get, path))
58
+ end
59
+
60
+ private
61
+ def get_tag_resource_path(method_name)
62
+ "#{self.name.to_s.split('::').last.downcase}s/#{method_name}"
63
+ end
64
+ end
65
+ undef :create, :update, :destory
66
+ end
@@ -27,7 +27,7 @@ require 'right_resource/ec2_ssh_key'
27
27
  require 'right_resource/server_array'
28
28
  require 'right_resource/ec2_ebs_snapshot'
29
29
  require 'right_resource/s3_bucket'
30
- #require 'right_resource/tag'
30
+ require 'right_resource/tag'
31
31
  # Design API
32
32
  require 'right_resource/server_template'
33
33
  require 'right_resource/right_script'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rightresource
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 8
10
- version: 0.2.8
9
+ - 9
10
+ version: 0.2.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Satoshi Ohki
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-12 00:00:00 +09:00
18
+ date: 2010-11-15 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -80,6 +80,8 @@ files:
80
80
  - lib/right_resource/alert_spec.rb
81
81
  - lib/right_resource/base.rb
82
82
  - lib/right_resource/connection.rb
83
+ - lib/right_resource/core_ext/hash/generate_attributes.rb
84
+ - lib/right_resource/core_ext/hash.rb
83
85
  - lib/right_resource/core_ext/object/tap.rb
84
86
  - lib/right_resource/core_ext/object.rb
85
87
  - lib/right_resource/core_ext.rb
@@ -101,6 +103,7 @@ files:
101
103
  - lib/right_resource/server_array.rb
102
104
  - lib/right_resource/server_template.rb
103
105
  - lib/right_resource/status.rb
106
+ - lib/right_resource/tag.rb
104
107
  - lib/right_resource.rb
105
108
  has_rdoc: true
106
109
  homepage: https://github.com/satsv/rightresource