simple_stack 0.0.1 → 0.0.2

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,67 @@
1
+ # Simple Stack Gem
2
+
3
+ A simple gem to deal with Simple Stack project.
4
+
5
+ Get a simplestack class:
6
+
7
+ stack = SimpleStack.new :url => url, :username => username, :password => password
8
+
9
+ Connecting to hypervisor:
10
+
11
+ vmware = stack.connect_to("vmware", :host => host, :username => username, :password => password)
12
+
13
+ Pool informations:
14
+
15
+ vmware.info
16
+ vmware.guests
17
+
18
+ # TODO:
19
+ # vmware.used_memory
20
+ # vmware.total_memory
21
+ # vmware.import vm_file
22
+
23
+ ### Working with Guests
24
+
25
+ guest = vmware.guests.find(vm.uuid)
26
+ guest.info
27
+ guest.update(:name => "Guest name", :memory => 512)
28
+ guest.delete
29
+
30
+ Shutdown and power on and reboot
31
+ guest.stop
32
+ guest.start
33
+ guest.reboot
34
+
35
+ Force the guest shutdown
36
+ guest.force_stop
37
+
38
+ Resume and suspend guests
39
+
40
+ guest.resume
41
+ guest.pause
42
+
43
+ TODO:
44
+
45
+ file = guest.export :to => file_path
46
+
47
+ #### Snapshots
48
+
49
+ List snapshots
50
+
51
+ guest.snapshots
52
+
53
+ Find a snapshot
54
+
55
+ guest.snapshots.find(snap.uuid)
56
+
57
+ Create a new snapshot
58
+
59
+ snap = guest.snapshots.create :name => :snapshot_name
60
+
61
+ Delete a snapshot
62
+
63
+ snap.delete
64
+
65
+ Revert a snapshot
66
+
67
+ snap.use
@@ -1,30 +1,41 @@
1
1
  module SimpleStack
2
2
  class Collection
3
- attr_accessor :url, :clazz
3
+ attr_accessor :hypervisor, :url, :clazz
4
4
 
5
- def initialize(url, clazz)
6
- self.url = url
5
+ def initialize(hypervisor, url, clazz)
6
+ self.hypervisor = hypervisor
7
+ self.url = url.to_s
7
8
  self.clazz = clazz
8
9
  end
9
10
 
10
11
  def to_a
11
- @items ||= SimpleStack.client.get(url).map do |item|
12
- clazz.new "#{url}/#{item["id"]}"
12
+ @items = hypervisor.get(url).map do |item|
13
+ clazz.new hypervisor, "#{url}/#{item["id"]}"
13
14
  end
14
15
  end
15
16
 
16
17
  def find(id)
17
- clazz.new "#{url}/#{id}"
18
+ clazz.new hypervisor, "#{url}/#{id}"
18
19
  end
19
20
 
20
21
  def create(options={})
21
- response = SimpleStack.client.post(url, options)
22
- clazz.new response.headers["location"]
22
+ response = hypervisor.post(url, options)
23
+ entity_path = response.headers["location"].sub(/^\//, "").sub(/\/$/, "")
24
+ entity_url = "#{connection.url}/#{entity_path}"
25
+ clazz.new hypervisor, entity_url
23
26
  end
24
27
 
25
28
  def method_missing(method, *args, &block)
26
29
  to_a.send(method, *args, &block)
27
30
  end
28
31
 
32
+ def inspect
33
+ to_a.inspect
34
+ end
35
+
36
+ def connection
37
+ hypervisor.connection
38
+ end
39
+
29
40
  end
30
41
  end
@@ -3,11 +3,15 @@ module SimpleStack
3
3
  attr_accessor :url
4
4
 
5
5
  def initialize(options = {})
6
- self.url = options[:url]
6
+ self.url = options[:url].to_s.sub(/\/$/, "")
7
7
  end
8
8
 
9
9
  def connect_to(type, options)
10
- SimpleStack::Hypervisor.new url, type, options
10
+ SimpleStack::Hypervisor.new self, type, options
11
+ end
12
+
13
+ def token
14
+ "TODO"
11
15
  end
12
16
  end
13
17
  end
@@ -1,21 +1,30 @@
1
1
  module SimpleStack
2
2
  class Entity
3
- attr_accessor :url
3
+ attr_accessor :hypervisor, :url
4
4
 
5
- def initialize(url)
6
- self.url = url
5
+ def initialize(hypervisor, url)
6
+ self.hypervisor = hypervisor
7
+ self.url = url.to_s
7
8
  end
8
9
 
9
10
  def info
10
- SimpleStack.client.get url
11
+ hypervisor.get url
11
12
  end
12
13
 
13
14
  def update(attributes = {})
14
- SimpleStack.client.put url, attributes
15
+ hypervisor.put url, attributes
15
16
  end
16
17
 
17
18
  def delete
18
- SimpleStack.client.delete url
19
+ hypervisor.delete url
20
+ end
21
+
22
+ def inspect
23
+ "#<#{self.class} info=#{info.to_json}>"
24
+ end
25
+
26
+ def connection
27
+ hypervisor.connection
19
28
  end
20
29
  end
21
30
  end
@@ -1,15 +1,15 @@
1
1
  module SimpleStack
2
2
  class Guest < Entity
3
3
  def snapshots
4
- SimpleStack::Collection.new "#{url}/snapshots", SimpleStack::Snapshot
4
+ SimpleStack::Collection.new hypervisor, "#{url}/snapshots", SimpleStack::Snapshot
5
5
  end
6
6
 
7
7
  def reboot
8
- SimpleStack.client.put "#{url}/reboot"
8
+ hypervisor.put "#{url}/reboot"
9
9
  end
10
10
 
11
11
  def power_state=(state)
12
- SimpleStack.client.put "#{url}/power", :state => state
12
+ hypervisor.put "#{url}/power", :state => state
13
13
  end
14
14
 
15
15
  ["start", "stop", "force_stop", "pause", "resume"].each do |state|
@@ -1,23 +1,56 @@
1
1
  module SimpleStack
2
2
  class Hypervisor
3
- attr_accessor :main_url, :type, :host
3
+ attr_accessor :connection, :type, :host
4
4
 
5
- def initialize(main_url, type, options)
6
- self.main_url = main_url
5
+ def initialize(connection, type, options)
6
+ self.connection = connection
7
7
  self.type = type
8
8
  self.host = options[:host]
9
9
  end
10
10
 
11
11
  def url
12
- "#{main_url}/#{type}/#{host}"
12
+ "#{connection.url}/#{type}/#{host}"
13
+ end
14
+
15
+ def headers
16
+ {
17
+ "x-simplestack-version" => "1.0",
18
+ "x-simplestack-token" => connection.token,
19
+ "x-simplestack-hypervisor-token" => token,
20
+ "Content-Type" => "application/json"
21
+ }
22
+ end
23
+
24
+ def token
25
+ "TODO"
13
26
  end
14
27
 
15
28
  def info
16
- SimpleStack.client.get url
29
+ self.get url
17
30
  end
18
31
 
19
32
  def guests
20
- SimpleStack::Collection.new "#{url}/guests", SimpleStack::Guest
33
+ SimpleStack::Collection.new self, "#{url}/guests", SimpleStack::Guest
34
+ end
35
+
36
+ def get(url)
37
+ HTTParty.get(url, :headers => headers, :no_follow => true)
38
+ end
39
+
40
+ def post(url, body)
41
+ HTTParty.post(url, :body => JSON.dump(body), :headers => headers, :no_follow => true)
42
+ end
43
+
44
+ def put(url, body)
45
+ HTTParty.put(url, :body => JSON.dump(body), :headers => headers, :no_follow => true)
46
+ end
47
+
48
+ def delete(url)
49
+ HTTParty.delete(url, :headers => headers, :no_follow => true)
50
+ end
51
+
52
+ def inspect
53
+ "#<#{self.class} url=#{url}>"
21
54
  end
22
55
  end
23
56
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleStack
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/simple_stack.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "json"
1
2
  require "httparty"
2
3
  require "simple_stack/version"
3
4
  require "simple_stack/connection"
data/simple_stack.gemspec CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # specify any dependencies here; for example:
22
- # s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rspec"
23
23
  s.add_runtime_dependency "httparty"
24
24
  end
@@ -0,0 +1,19 @@
1
+ # -*- coding: UTF-8 -*-
2
+ require "spec_helper"
3
+
4
+ describe SimpleStack::Connection do
5
+ let(:url) {"http://simplestack.server"}
6
+ subject {SimpleStack::Connection.new :url => url}
7
+
8
+ it "should keep the connection url" do
9
+ subject.url.should == url
10
+ end
11
+
12
+ it "should connect to a hypervisor" do
13
+ host = "hypervisor_host"
14
+ hypervisor = subject.connect_to :mock, host: host
15
+ hypervisor.type.should == :mock
16
+ hypervisor.host.should == host
17
+ hypervisor.url.should == "#{url}/mock/#{host}"
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # -*- coding: UTF-8 -*-
2
+ require "spec_helper"
3
+
4
+ describe SimpleStack::Hypervisor do
5
+ let(:url) {"http://simplestack.server"}
6
+ let(:host) {"hypervisor_host"}
7
+ subject {SimpleStack::Connection.new(:url => url).connect_to :mock, host: host}
8
+
9
+ it "should keep the connection url" do
10
+ subject.url.should == "#{url}/mock/#{host}"
11
+ end
12
+
13
+ it "should connect to a hypervisor" do
14
+ subject.headers.should have_key("x-simplestack-version")
15
+ subject.headers.should have_key("x-simplestack-token")
16
+ subject.headers.should have_key("x-simplestack-hypervisor-token")
17
+ subject.headers["Content-Type"].should == "application/json"
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift(File.expand_path(__FILE__, "../lib"))
2
+ require "simple_stack"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_stack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,27 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-12 00:00:00.000000000 Z
12
+ date: 2012-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: httparty
16
- requirement: &2151814400 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
17
33
  none: false
18
34
  requirements:
19
35
  - - ! '>='
@@ -21,7 +37,12 @@ dependencies:
21
37
  version: '0'
22
38
  type: :runtime
23
39
  prerelease: false
24
- version_requirements: *2151814400
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
25
46
  description: A Simple Stack gem
26
47
  email:
27
48
  - thiago.morello@locaweb.com.br
@@ -31,6 +52,7 @@ extra_rdoc_files: []
31
52
  files:
32
53
  - .gitignore
33
54
  - Gemfile
55
+ - README.markdown
34
56
  - Rakefile
35
57
  - lib/simple_stack.rb
36
58
  - lib/simple_stack/collection.rb
@@ -41,6 +63,9 @@ files:
41
63
  - lib/simple_stack/snapshot.rb
42
64
  - lib/simple_stack/version.rb
43
65
  - simple_stack.gemspec
66
+ - spec/simple_stack/connection_spec.rb
67
+ - spec/simple_stack/hypervisor_spec.rb
68
+ - spec/spec_helper.rb
44
69
  homepage: ''
45
70
  licenses: []
46
71
  post_install_message:
@@ -61,8 +86,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
86
  version: '0'
62
87
  requirements: []
63
88
  rubyforge_project: simple_stack
64
- rubygems_version: 1.8.10
89
+ rubygems_version: 1.8.23
65
90
  signing_key:
66
91
  specification_version: 3
67
92
  summary: A Simple Stack gem
68
- test_files: []
93
+ test_files:
94
+ - spec/simple_stack/connection_spec.rb
95
+ - spec/simple_stack/hypervisor_spec.rb
96
+ - spec/spec_helper.rb