right-scale-api 0.0.4 → 0.0.5
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/.gitignore +1 -0
- data/Rakefile +14 -32
- data/lib/right-scale-api/account.rb +27 -10
- data/lib/right-scale-api/base.rb +13 -6
- data/lib/right-scale-api/ec2_elastic_ip.rb +0 -1
- data/lib/right-scale-api/server.rb +0 -1
- data/lib/right-scale-api.rb +7 -0
- data/right-scale-api.gemspec +4 -22
- metadata +3 -3
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -2,42 +2,24 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
|
4
4
|
begin
|
5
|
-
require '
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
gem.description = %Q{A client for the RightScale API that hides some of the complexity of the API
|
10
|
-
(It doesn't require passing around hrefs as much). Based on HTTParty
|
11
|
-
}
|
12
|
-
gem.email = "ndh@baroquebobcat.com"
|
13
|
-
gem.homepage = "http://github.com/baroquebobcat/right-scale-api"
|
14
|
-
gem.authors = ["Nick Howard"]
|
15
|
-
gem.add_dependency "httparty", "~> 0.6.0"
|
16
|
-
gem.add_dependency "activesupport"
|
17
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
18
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
5
|
+
require 'spec/rake/spectask'
|
6
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
7
|
+
spec.libs << 'lib' << 'spec'
|
8
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
19
9
|
end
|
20
|
-
Jeweler::GemcutterTasks.new
|
21
|
-
rescue LoadError
|
22
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
23
|
-
end
|
24
10
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
32
|
-
spec.libs << 'lib' << 'spec'
|
33
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
34
|
-
spec.rcov = true
|
35
|
-
end
|
36
|
-
|
37
|
-
task :spec => :check_dependencies
|
11
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
12
|
+
spec.libs << 'lib' << 'spec'
|
13
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
14
|
+
spec.rcov = true
|
15
|
+
end
|
38
16
|
|
39
|
-
task :
|
17
|
+
task :spec => :check_dependencies
|
40
18
|
|
19
|
+
task :default => :spec
|
20
|
+
rescue LoadError
|
21
|
+
puts 'install rspec'
|
22
|
+
end
|
41
23
|
require 'rake/rdoctask'
|
42
24
|
Rake::RDocTask.new do |rdoc|
|
43
25
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
@@ -1,13 +1,19 @@
|
|
1
1
|
module RightScaleAPI
|
2
2
|
class Account < Base
|
3
|
-
|
3
|
+
attributes [:id, :href]
|
4
4
|
collection_uri "/api/acct"
|
5
5
|
|
6
|
+
# Creates a method for each passed symbol
|
7
|
+
# that grabs the list of objects matching it
|
8
|
+
# takes options that are added as query params
|
9
|
+
# also does some munging of the opts
|
10
|
+
# in particular, :region => :us_east/:us_west/:eu/:ap
|
11
|
+
# will map to the proper cloud_id, so you don't have to remember them
|
6
12
|
def self.sub_resources *resources
|
7
13
|
resources.each do |resource|
|
8
14
|
module_eval %(
|
9
|
-
def #{resource}
|
10
|
-
get('/#{resource}.xml')['#{resource}'].map do |attrs|
|
15
|
+
def #{resource} query_opts={}
|
16
|
+
get('/#{resource}.xml', :query => #{resource.to_s.classify}.opts_to_query_opts(query_opts) )['#{resource}'].map do |attrs|
|
11
17
|
#{resource.to_s.classify}.new attrs.merge(:account => self)
|
12
18
|
end
|
13
19
|
end
|
@@ -31,6 +37,7 @@ module RightScaleAPI
|
|
31
37
|
# @option opts [String] :description The description of the deployment
|
32
38
|
# @option opts [String :default_ec2_availability_zone the default availability zone for the deployment e.g. us-east-1a
|
33
39
|
# @option opts [String] :default_vpc_subnet_href
|
40
|
+
# @option opts [Symbol] :region (:us_east) The region to create the IP in. One of :us_east, :eu, :us_west, :ap
|
34
41
|
def create_deployment opts
|
35
42
|
Deployment.create opts.merge :account => self
|
36
43
|
end
|
@@ -38,7 +45,7 @@ module RightScaleAPI
|
|
38
45
|
# Creates an EC2 EBS Elastic IP
|
39
46
|
# @param [Hash] opts ip attributes
|
40
47
|
# @option opts [String] :nickname The nickname of the ip
|
41
|
-
# @option opts [
|
48
|
+
# @option opts [Symbol] :region (:us_east) The region to create the IP in. One of :us_east, :eu, :us_west, :ap
|
42
49
|
def create_ec2_elastic_ip opts
|
43
50
|
Ec2ElasticIp.create opts.merge :account => self
|
44
51
|
end
|
@@ -49,20 +56,23 @@ module RightScaleAPI
|
|
49
56
|
# @option opts [String] :description
|
50
57
|
# @option opts [Fixnum] :aws_size The size of the volume in gigabytes*
|
51
58
|
# @option opts [String] :ec2_availability_zone name of the availability zone e.g. us-east-1a*
|
59
|
+
# @option opts [Symbol] :region (:us_east) The region to create the IP in. One of :us_east, :eu, :us_west, :ap
|
52
60
|
def create_ec2_ebs_volume opts
|
53
61
|
Ec2EbsVolume.create opts.merge :account => self
|
54
62
|
end
|
55
63
|
|
56
64
|
# Creates an EC2 Instance
|
57
65
|
# @param [Hash] opts server attributes
|
58
|
-
# @option [RightScaleAPI::ServerTemplate]
|
59
|
-
# @option [[RightScaleAPI::Deployment]
|
66
|
+
# @option opts [RightScaleAPI::ServerTemplate] :server_template the server template to use*
|
67
|
+
# @option opts [[RightScaleAPI::Deployment] :deployment the deployment to add the instance to.
|
68
|
+
# @option opts [Symbol] :region (:us_east) The region to create the IP in. One of :us_east, :eu, :us_west, :ap
|
60
69
|
def create_server opts
|
61
70
|
Server.create opts.merge :account => self
|
62
71
|
end
|
63
72
|
|
64
73
|
# Gets an EC2 ssh key.
|
65
|
-
# Currently you can't get a list of ssh keys through the API,
|
74
|
+
# Currently you can't get a list of ssh keys through the API,
|
75
|
+
# so you need to get the id through the web interface.
|
66
76
|
# https://my.rightscale.com/clouds/1/ec2_ssh_keys
|
67
77
|
# @param id the id of the ssh key to get
|
68
78
|
def get_ec2_ssh_key id
|
@@ -71,11 +81,18 @@ module RightScaleAPI
|
|
71
81
|
|
72
82
|
class SubResource < Base
|
73
83
|
attr_accessor :account
|
74
|
-
|
84
|
+
|
75
85
|
def collection_uri
|
76
|
-
account.path
|
86
|
+
"#{account.path}/#{self.class.api_name.pluralize}"
|
87
|
+
end
|
88
|
+
|
89
|
+
protected
|
90
|
+
|
91
|
+
def self.opts_to_query_opts opts
|
92
|
+
super(opts).tap{|o|o.delete "account"}
|
77
93
|
end
|
94
|
+
|
78
95
|
end
|
79
|
-
|
96
|
+
|
80
97
|
end
|
81
98
|
end
|
data/lib/right-scale-api/base.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
module RightScaleAPI
|
2
2
|
class Base
|
3
3
|
|
4
|
-
attr_accessor :id, :href
|
5
|
-
|
6
4
|
# attributes that directly correspond to the api's
|
7
5
|
# @param [Array<Symbol>] attrs a list of attributes an object type has
|
8
6
|
def self.attributes attrs=nil
|
@@ -23,7 +21,7 @@ module RightScaleAPI
|
|
23
21
|
@attributes
|
24
22
|
end
|
25
23
|
|
26
|
-
attributes [:tags, :created_at, :updated_at,:errors, :nickname]
|
24
|
+
attributes [:id, :href, :tags, :created_at, :updated_at,:errors, :nickname]
|
27
25
|
|
28
26
|
# gets an object by id
|
29
27
|
# @param id [Fixnum]
|
@@ -38,7 +36,7 @@ module RightScaleAPI
|
|
38
36
|
|
39
37
|
query_opts = opts_to_query_opts opts
|
40
38
|
|
41
|
-
result = RightScaleAPI::Client.post(object.collection_uri, :body =>
|
39
|
+
result = RightScaleAPI::Client.post(object.collection_uri, :body => query_opts)
|
42
40
|
|
43
41
|
if result.code.to_i != 201
|
44
42
|
p object.collection_uri
|
@@ -129,7 +127,7 @@ module RightScaleAPI
|
|
129
127
|
end
|
130
128
|
|
131
129
|
def path
|
132
|
-
collection_uri
|
130
|
+
"#{collection_uri}/#{id}"
|
133
131
|
end
|
134
132
|
|
135
133
|
def id_from_href href
|
@@ -143,6 +141,11 @@ module RightScaleAPI
|
|
143
141
|
def self.opts_to_query_opts opts
|
144
142
|
query_opts = opts.dup
|
145
143
|
|
144
|
+
if query_opts[:region]
|
145
|
+
val = query_opts.delete :region
|
146
|
+
query_opts[:cloud_id] = RightScaleAPI::CLOUD_REGIONS[val.to_sym]
|
147
|
+
end
|
148
|
+
|
146
149
|
relations = attributes.select {|a|a.to_s.include? '_href'}
|
147
150
|
relations.each do |r|
|
148
151
|
r_name = r.to_s.sub('_href','').to_sym
|
@@ -150,7 +153,11 @@ module RightScaleAPI
|
|
150
153
|
query_opts[r] = query_opts.delete(r_name).href
|
151
154
|
end
|
152
155
|
end
|
153
|
-
|
156
|
+
|
157
|
+
attrs = query_opts.dup.delete_if {|k,v| ! attributes.include? k.to_sym }
|
158
|
+
query_opts.dup.delete_if {|k,v| attributes.include? k.to_sym }
|
159
|
+
|
160
|
+
query_opts[api_name] = attrs
|
154
161
|
|
155
162
|
query_opts
|
156
163
|
end
|
data/lib/right-scale-api.rb
CHANGED
data/right-scale-api.gemspec
CHANGED
@@ -1,11 +1,8 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
3
|
Gem::Specification.new do |s|
|
7
4
|
s.name = %q{right-scale-api}
|
8
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.5"
|
9
6
|
|
10
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
8
|
s.authors = ["Nick Howard"]
|
@@ -54,23 +51,8 @@ Gem::Specification.new do |s|
|
|
54
51
|
"spec/spec_helper.rb"
|
55
52
|
]
|
56
53
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
|
-
s.add_runtime_dependency(%q<httparty>, ["~> 0.6.0"])
|
63
|
-
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
64
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
65
|
-
else
|
66
|
-
s.add_dependency(%q<httparty>, ["~> 0.6.0"])
|
67
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
68
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
69
|
-
end
|
70
|
-
else
|
71
|
-
s.add_dependency(%q<httparty>, ["~> 0.6.0"])
|
72
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
73
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
74
|
-
end
|
54
|
+
s.add_runtime_dependency(%q<httparty>, ["~> 0.6.0"])
|
55
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
56
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
75
57
|
end
|
76
58
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right-scale-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nick Howard
|