rightscale-api 0.0.1

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.markdown ADDED
@@ -0,0 +1,37 @@
1
+ RightScale API
2
+ ===================
3
+
4
+ This is a light Ruby wrapper around the RightScale API.
5
+ It, like the RightScale API itself is a little incomplete. It should however be ready soon for general use as it is being developed for a production application.
6
+ Below is an example of usage. Please contact if with bug reports or if you would like to contribute.
7
+
8
+ At the moment only GET requests are implemented.
9
+ Depends upon [HTTParty](http://github.com/jnunemaker/httparty)
10
+
11
+ Usage
12
+ -----
13
+
14
+ account = 1234
15
+ username = 'alibaba@example.com'
16
+ password = 'opensezme'
17
+
18
+ rightscale = RightScale::Client.new(account, username, password)
19
+
20
+ deployments = rightscale.deployments
21
+ servers = rightscale.servers
22
+ right_scripts = rightscale.right_scripts
23
+
24
+
25
+ production = deployments.index.find {|d| d['nickname'] ==
26
+ 'Production Deployment V1'
27
+ }
28
+
29
+ production['servers'].each {|server|
30
+ settings = servers.settings(server['href'])
31
+ dns = settings['dns_name']
32
+ pp IPSocket.getaddress(dns) if dns
33
+ }
34
+
35
+ pp rightscale.right_scripts.show(1234)
36
+ pp rightscale.deployments.show(1234)
37
+ pp rightscale.servers.show(1234)
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,48 @@
1
+ module RightScale
2
+ class API
3
+ attr_reader :client
4
+
5
+ def initialize(client, options = {})
6
+ @client = client
7
+ @resource = options[:resource] || self.class.name.split('::').last.downcase
8
+ @singular = @resource.chop
9
+ @format = 'xml'
10
+ end
11
+
12
+ def index
13
+ response = client.get("/#{@resource}.#{@format}")
14
+ return response["#{@resource}"]
15
+ end
16
+
17
+ def show(identifier)
18
+ puts formatted_uri(identifier)
19
+ response = client.get formatted_uri(identifier)
20
+ return response["#{@singular}"]
21
+ end
22
+
23
+ def create
24
+ # implement in derivative classes
25
+ end
26
+
27
+ def update
28
+ # implement in derivative classes
29
+ end
30
+
31
+ def destroy(identifier)
32
+ response = client.delete("/#{@resource}/#{identifier}")
33
+ end
34
+
35
+ # As discussed in more detail in the RightScale API Overview Guide, every
36
+ # major resource exported by the RightScale API will always have an href
37
+ # field that corresponds to the URL of the resource listed.
38
+
39
+ def formatted_uri(identifier)
40
+ if identifier.is_a?(String)
41
+ identifier.gsub(client.class.base_uri, '')
42
+ else
43
+ "/#{@resource}/#{identifier}.#{@format}"
44
+ end
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,35 @@
1
+ module RightScale
2
+ class Client
3
+ include HTTParty
4
+
5
+ def initialize(account, email, password)
6
+ @account, @email, @password = account, email, password
7
+ self.class.base_uri "https://my.rightscale.com/api/acct/#{@account}"
8
+ end
9
+
10
+ def get(path, options={})
11
+ options.merge!({
12
+ :basic_auth => {:username => @email, :password => @password},
13
+ :headers => {'X-API-VERSION' => '1.0'}
14
+ })
15
+
16
+ self.class.get("#{path}", options)
17
+ end
18
+
19
+ def deployments
20
+ @deployments ||= Deployments.new(self)
21
+ end
22
+
23
+ def servers
24
+ @servers ||= Servers.new(self)
25
+ end
26
+
27
+ def statuses
28
+ @statuses ||= Statuses.new(self)
29
+ end
30
+
31
+ def right_scripts
32
+ @right_scripts ||= RightScripts.new(self, :resource => 'right_scripts')
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ module RightScale
2
+ # http://support.rightscale.com/15-References/RightScale_API_Reference_Guide/02-Management/01-Deployments
3
+ class Deployments < API
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module RightScale
2
+ # http://support.rightscale.com/15-References/RightScale_API_Reference_Guide/02-Management/01-Deployments
3
+ class RightScripts < API
4
+ end
5
+ end
@@ -0,0 +1,37 @@
1
+ module RightScale
2
+ # http://support.rightscale.com/15-References/RightScale_API_Reference_Guide/02-Management/02-Servers
3
+ class Servers < API
4
+ def start(identifier)
5
+ response = client.post("/servers/#{identifier}/start")
6
+ end
7
+
8
+ def stop(identifier)
9
+ response = client.post("/servers/#{identifier}/stop")
10
+ end
11
+
12
+ def reboot(identifier)
13
+ response = client.post("/servers/#{identifier}/reboot")
14
+ end
15
+
16
+ def run_script(identifier, right_script_href, params = {})
17
+ query = {:server => {:right_script_href => right_script_href}}
18
+ query[:server].merge(params) if !params.empty?
19
+
20
+ response = client.post("/servers/#{identifier}/run_script", :query => query)
21
+ end
22
+
23
+ def attach_volume(ec2_ebs_volume_href, device)
24
+ response = client.post("/servers/#{identifier}/attach_volume", :query => {
25
+ :server => {
26
+ :ec2_ebs_volume_href => ec2_ebs_volume_href,
27
+ :device => device
28
+ }
29
+ })
30
+ end
31
+
32
+ def settings(identifier)
33
+ response = client.get("#{formatted_uri(identifier)}/settings")
34
+ return response['settings']
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ module RightScale
2
+ class Statuses
3
+ attr_reader :client
4
+
5
+ def initialize(client)
6
+ @client = client
7
+ @@resource = self.class.name.split('::').last.downcase
8
+ @@format = 'xml'
9
+ end
10
+
11
+ def show(identifier)
12
+ response = client.get("/#{@@resource}/#{identifier}.#{@@format}")
13
+ return response["#{@@resource.chop}"]
14
+ end
15
+ end
16
+ end
data/lib/rightscale.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'pathname'
2
+ require 'rubygems'
3
+ require 'httparty'
4
+ require 'pp'
5
+ require 'socket'
6
+
7
+ dir = Pathname(__FILE__).dirname.expand_path
8
+
9
+ require dir + 'rightscale/api'
10
+ require dir + 'rightscale/client'
11
+
12
+ # Management API
13
+ require dir + 'rightscale/deployments'
14
+ require dir + 'rightscale/servers'
15
+ require dir + 'rightscale/right_scripts'
16
+
17
+
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rightscale-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - David Michael
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-30 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A Ruby Wrapper for the RightScale API
17
+ email: david.michael@sonymusic.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.markdown
24
+ files:
25
+ - README.markdown
26
+ - VERSION
27
+ - lib/rightscale.rb
28
+ - lib/rightscale/api.rb
29
+ - lib/rightscale/client.rb
30
+ - lib/rightscale/deployments.rb
31
+ - lib/rightscale/right_scripts.rb
32
+ - lib/rightscale/servers.rb
33
+ - lib/rightscale/statuses.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/dmichael/rightscale-api
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options:
40
+ - --charset=UTF-8
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.3.5
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: A Ruby Wrapper for the RightScale API
62
+ test_files: []
63
+