roca 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/.autotest +5 -0
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/lib/roca/connector.rb +20 -0
- data/lib/roca/connector_helper.rb +22 -0
- data/lib/roca/group.rb +42 -0
- data/lib/roca/template.rb +63 -0
- data/lib/roca/template_pool.rb +18 -0
- data/lib/roca/version.rb +3 -0
- data/lib/roca/virtual_machine.rb +42 -0
- data/lib/roca.rb +16 -0
- data/roca.gemspec +32 -0
- data/spec/.gitkeep +0 -0
- data/spec/connector_helper_spec.rb +5 -0
- data/spec/connector_spec.rb +5 -0
- data/spec/group_spec.rb +42 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/template_spec.rb +14 -0
- data/spec/version_spec.rb +7 -0
- metadata +149 -0
data/.autotest
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Roca
|
2
|
+
class Connector
|
3
|
+
|
4
|
+
def initialize(args = {})
|
5
|
+
@xmlrpc_client = args[:xmlrpc_client] || build_xmlrpc_client(args[:endpoint])
|
6
|
+
@session_string = args[:session_string]
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute(method, *args)
|
10
|
+
args = args.unshift(@session_string)
|
11
|
+
@xmlrpc_client.call_async(method, *args)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def build_xmlrpc_client(endpoint)
|
17
|
+
XMLRPC::Client.new2(endpoint)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Roca
|
2
|
+
module ConnectorHelper
|
3
|
+
def connector
|
4
|
+
self.class.connector
|
5
|
+
end
|
6
|
+
|
7
|
+
def connector=(_connector)
|
8
|
+
self.class.connector = _connector
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def connector
|
13
|
+
# todo: inject endpoint and session_string
|
14
|
+
@connector ||= Connector.new(endpoint: endpoint, session_string: session_string)
|
15
|
+
end
|
16
|
+
|
17
|
+
def connector=(_connector)
|
18
|
+
@connector = _connector
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/roca/group.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Roca
|
2
|
+
class Group
|
3
|
+
include ConnectorHelper
|
4
|
+
extend ConnectorHelper::ClassMethods
|
5
|
+
|
6
|
+
attr_reader :group_id, :name
|
7
|
+
|
8
|
+
def self.create(attributes = {})
|
9
|
+
success_flag, group_id, error_code = connector.execute("one.group.allocate", attributes[:name])
|
10
|
+
attributes[:group_id] = group_id
|
11
|
+
success_flag ? Group.build_from_hash(attributes) : false
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find(group_id)
|
15
|
+
success_flag, xml_object_description, error_code = connector.execute("one.group.info", group_id)
|
16
|
+
success_flag ? Group.build_from_xml(xml_object_description) : false
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.build_from_hash(attributes = {})
|
20
|
+
Group.new(attributes)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.build_from_xml(xml_description)
|
24
|
+
doc = Nokogiri::Slop(xml_description)
|
25
|
+
|
26
|
+
Group.build_from_hash(
|
27
|
+
group_id: doc.GROUP.ID.content.to_i,
|
28
|
+
name: doc.GROUP.NAME.content
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(attributes = {})
|
33
|
+
@name = attributes[:name]
|
34
|
+
@group_id = attributes[:group_id]
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete
|
38
|
+
success_flag, xml_object_description, error_code = connector.execute("one.group.delete", group_id)
|
39
|
+
success_flag
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Roca
|
2
|
+
class Template
|
3
|
+
include ConnectorHelper
|
4
|
+
extend ConnectorHelper::ClassMethods
|
5
|
+
|
6
|
+
attr_reader :template_id, :user_id, :group_id, :user_name, :group_name, :name, :template
|
7
|
+
|
8
|
+
def self.find(template_id)
|
9
|
+
success_flag, xml_object_description, error_code = connector.execute("one.template.info", template_id)
|
10
|
+
success_flag ? Template.build_from_xml(xml_object_description) : false
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.build_from_hash(attributes = {})
|
14
|
+
Template.new(attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.build_from_xml(xml_description)
|
18
|
+
doc = Nokogiri::Slop(xml_description)
|
19
|
+
|
20
|
+
Template.build_from_hash(
|
21
|
+
template_id: doc.VMTEMPLATE.ID.content.to_i,
|
22
|
+
user_id: doc.VMTEMPLATE.UID.content.to_i,
|
23
|
+
group_id: doc.VMTEMPLATE.GID.content.to_i,
|
24
|
+
user_name: doc.VMTEMPLATE.UNAME.content,
|
25
|
+
group_name: doc.VMTEMPLATE.GNAME.content,
|
26
|
+
name: doc.VMTEMPLATE.NAME.content,
|
27
|
+
public: !doc.VMTEMPLATE.PUBLIC.content.to_i.zero?,
|
28
|
+
regtime: doc.VMTEMPLATE.REGTIME.content.to_i,
|
29
|
+
xml_template: doc.VMTEMPLATE.TEMPLATE.to_xml
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(attributes = {})
|
34
|
+
@template_id = attributes[:template_id]
|
35
|
+
@user_id = attributes[:user_id]
|
36
|
+
@group_id = attributes[:group_id]
|
37
|
+
@user_name = attributes[:user_name]
|
38
|
+
@group_name = attributes[:group_name]
|
39
|
+
@name = attributes[:name]
|
40
|
+
@public = attributes[:public]
|
41
|
+
@regtime = attributes[:regtime]
|
42
|
+
@xml_template = attributes[:xml_template]
|
43
|
+
end
|
44
|
+
|
45
|
+
def instantiate(attributes = {})
|
46
|
+
virtual_machine_name = attributes[:virtual_machine_name] || ""
|
47
|
+
success_flag, virtual_machine_id, error_code = connector.execute("one.template.instantiate", template_id, virtual_machine_name)
|
48
|
+
success_flag ? virtual_machine_name : false
|
49
|
+
end
|
50
|
+
|
51
|
+
def public?
|
52
|
+
@public
|
53
|
+
end
|
54
|
+
|
55
|
+
def registration_time
|
56
|
+
@regtime_as_time_object ||= Time.at(@regtime)
|
57
|
+
end
|
58
|
+
|
59
|
+
def group
|
60
|
+
@group ||= Group.find(@group_id)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Roca
|
2
|
+
class TemplatePool
|
3
|
+
include ConnectorHelper
|
4
|
+
extend ConnectorHelper::ClassMethods
|
5
|
+
|
6
|
+
def self.all
|
7
|
+
success_flag, xml_templates, error_code = connector.execute("one.templatepool.info", -2, -1, -1)
|
8
|
+
result = []
|
9
|
+
if success_flag then
|
10
|
+
doc = Nokogiri::Slop(xml_templates)
|
11
|
+
doc.VMTEMPLATE_POOL.children.each do |xml_template|
|
12
|
+
result << Template.build_from_xml(xml_template.to_s)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
result
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/roca/version.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Roca
|
2
|
+
class VirtualMachine
|
3
|
+
include ConnectorHelper
|
4
|
+
extend ConnectorHelper::ClassMethods
|
5
|
+
|
6
|
+
def self.build_from_hash(attributes = {})
|
7
|
+
VirtualMachine.new(attributes)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.build_from_xml(xml_description)
|
11
|
+
doc = Nokogiri::Slop(xml_description)
|
12
|
+
|
13
|
+
VirtualMachine.build_from_hash(
|
14
|
+
virtual_machine_id: doc.VM.ID.content.to_i,
|
15
|
+
user_id: doc.VM.UID.content.to_i,
|
16
|
+
group_id: doc.VM.GID.content.to_i,
|
17
|
+
user_name: doc.VM.UNAME.content,
|
18
|
+
group_name: doc.VM.GNAME.content,
|
19
|
+
name: doc.VM.NAME.content,
|
20
|
+
last_poll: doc.VM.LAST_POLL.content.to_i,
|
21
|
+
state: doc.VM.STATE.content.to_i,
|
22
|
+
lcm_state: doc.VM.LCM_STATE.content.to_i,
|
23
|
+
stime: doc.VM.STIME.content.to_i,
|
24
|
+
etime: doc.VM.ETIME.content.to_i
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(attributes = {})
|
29
|
+
@virtual_machine_id = attributes[:virtual_machine_id],
|
30
|
+
@user_id = attributes[:user_id],
|
31
|
+
@group_id = attributes[:group_id],
|
32
|
+
@user_name = attributes[:user_name],
|
33
|
+
@group_name = attributes[:group_name],
|
34
|
+
@name = attributes[:name],
|
35
|
+
@last_poll = attributes[:last_poll],
|
36
|
+
@state = attributes[:state],
|
37
|
+
@lcm_state = attributes[:lcm_state],
|
38
|
+
@stime = attributes[:stime],
|
39
|
+
@etime = attributes[:etime]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/roca.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# require "roca/version"
|
2
|
+
require "nokogiri"
|
3
|
+
require "xmlrpc/client"
|
4
|
+
|
5
|
+
module Roca
|
6
|
+
autoload :Connector, "roca/connector"
|
7
|
+
autoload :ConnectorHelper, "roca/connector_helper"
|
8
|
+
autoload :Group, "roca/group"
|
9
|
+
autoload :Template, "roca/template"
|
10
|
+
autoload :TemplatePool, "roca/template_pool"
|
11
|
+
# autoload :Host, "roca/host"
|
12
|
+
# autoload :Image, "roca/image"
|
13
|
+
# autoload :User, "roca/user"
|
14
|
+
# autoload :VirtualMachine, "roca/virtual_machine"
|
15
|
+
# autoload :VirtualNetwork, "roca/virtual_network"
|
16
|
+
end
|
data/roca.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "roca/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "roca"
|
7
|
+
s.version = Roca::VERSION
|
8
|
+
s.authors = ["Nicolai Reuschling"]
|
9
|
+
s.email = ["gemdev@reuschling.name"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Ruby library for OpenNebula's XML-RPC API}
|
12
|
+
s.description = %q{This is a very experimental Ruby library for OpenNebula's XML-RPC API}
|
13
|
+
|
14
|
+
s.required_ruby_version = ">= 1.9.3"
|
15
|
+
# s.rubyforge_project = "roca"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
# specify any dependencies here; for example:
|
23
|
+
# s.add_development_dependency "rspec"
|
24
|
+
# s.add_runtime_dependency "rest-client"
|
25
|
+
s.add_development_dependency "rspec"
|
26
|
+
s.add_development_dependency "autotest"
|
27
|
+
s.add_development_dependency "autotest-fsevent"
|
28
|
+
s.add_development_dependency "autotest-growl"
|
29
|
+
s.add_development_dependency "simplecov"
|
30
|
+
s.add_runtime_dependency "activesupport"
|
31
|
+
s.add_runtime_dependency "nokogiri"
|
32
|
+
end
|
data/spec/.gitkeep
ADDED
File without changes
|
data/spec/group_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Group" do
|
4
|
+
it "should keep a name and group_id" do
|
5
|
+
group = Group.new(name: "group name", group_id: 105)
|
6
|
+
group.name.should == "group name"
|
7
|
+
group.group_id.should == 105
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should create a group" do
|
11
|
+
Group.connector = double(Connector, :execute => [true, 105, 0])
|
12
|
+
|
13
|
+
group = Group.create(name: "group name")
|
14
|
+
group.group_id.should == 105
|
15
|
+
group.name.should == "group name"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should find a specific group" do
|
19
|
+
Group.connector = double(Connector, :execute => [true, "<GROUP><ID>105</ID><NAME>group name</NAME><USERS/></GROUP>", 0])
|
20
|
+
|
21
|
+
group = Group.find(105)
|
22
|
+
group.group_id.should == 105
|
23
|
+
group.name.should == "group name"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "can be deleted" do
|
27
|
+
fake_connector = double(Connector)
|
28
|
+
fake_connector.should_receive(:execute)
|
29
|
+
.with("one.group.delete", 105)
|
30
|
+
.and_return([true, "<GROUP><ID>105</ID><NAME>group name</NAME><USERS/></GROUP>", 0])
|
31
|
+
Group.connector = fake_connector
|
32
|
+
|
33
|
+
group = Group.new(name: "group name", group_id: 105)
|
34
|
+
group.delete
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should parse an XML group description to a new Group instance" do
|
38
|
+
group = Group.build_from_xml "<GROUP><ID>105</ID><NAME>group name</NAME><USERS/></GROUP>"
|
39
|
+
group.group_id.should == 105
|
40
|
+
group.name.should == "group name"
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Template" do
|
4
|
+
it "should parse an XML group description to a new Group instance" do
|
5
|
+
template = Template.build_from_xml("<VMTEMPLATE><ID>99</ID><UID>1</UID><GID>2</GID><UNAME>user name</UNAME><GNAME>group name</GNAME><NAME>template name</NAME><PUBLIC>0</PUBLIC><REGTIME>1326974817</REGTIME><TEMPLATE><CONTEXT><HOSTNAME><![CDATA[$NAME]]></HOSTNAME><PRIV_BC><![CDATA[192.168.2.255]]></PRIV_BC><PRIV_IP><![CDATA[$NIC[IP,NETWORK_ID=\"1\"]]]></PRIV_IP><PRIV_NM><![CDATA[255.255.255.0]]></PRIV_NM><PRIV_NW><![CDATA[192.168.2.0]]></PRIV_NW><PUB_BC><![CDATA[8.8.8.8]]></PUB_BC><PUB_GW><![CDATA[8.8.8.8]]></PUB_GW><PUB_IP><![CDATA[$NIC[IP,NETWORK_ID=\"1\"]]]></PUB_IP><PUB_NM><![CDATA[255.255.255.240]]></PUB_NM><PUB_NS><![CDATA[8.8.8.8]]></PUB_NS><PUB_NW><![CDATA[8.8.8.8]]></PUB_NW></CONTEXT><CPU><![CDATA[0.5]]></CPU><DISK><BUS><![CDATA[virtio]]></BUS><READONLY><![CDATA[no]]></READONLY><SOURCE><![CDATA[/var/lib/one/images/image.img]]></SOURCE><TARGET><![CDATA[blubber]]></TARGET></DISK><FEATURES><ACPI><![CDATA[no]]></ACPI></FEATURES><GRAPHICS><LISTEN><![CDATA[127.0.0.1]]></LISTEN><TYPE><![CDATA[vnc]]></TYPE></GRAPHICS><MEMORY><![CDATA[512]]></MEMORY><NAME><![CDATA[testvm4_vm]]></NAME><NIC><MODEL><![CDATA[virtio]]></MODEL><NETWORK_ID><![CDATA[1]]></NETWORK_ID></NIC><NIC><MODEL><![CDATA[virtio]]></MODEL><NETWORK_ID><![CDATA[1]]></NETWORK_ID></NIC><OS><ARCH><![CDATA[x86_64]]></ARCH><BOOT><![CDATA[hd]]></BOOT></OS><RAW><TYPE><![CDATA[kvm]]></TYPE></RAW><TEMPLATE_ID><![CDATA[10]]></TEMPLATE_ID><VCPU><![CDATA[1]]></VCPU></TEMPLATE></VMTEMPLATE>")
|
6
|
+
template.template_id.should == 99
|
7
|
+
template.user_id.should == 1
|
8
|
+
template.group_id.should == 2
|
9
|
+
template.user_name.should == "user name"
|
10
|
+
template.group_name.should == "group name"
|
11
|
+
template.name.should == "template name"
|
12
|
+
template.registration_time.should == Time.at(1326974817)
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: roca
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nicolai Reuschling
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70295818659180 !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: *70295818659180
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: autotest
|
27
|
+
requirement: &70295818658400 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70295818658400
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: autotest-fsevent
|
38
|
+
requirement: &70295818657700 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70295818657700
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: autotest-growl
|
49
|
+
requirement: &70295818657000 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70295818657000
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: simplecov
|
60
|
+
requirement: &70295818656100 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70295818656100
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activesupport
|
71
|
+
requirement: &70295818662560 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70295818662560
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: nokogiri
|
82
|
+
requirement: &70295818661440 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70295818661440
|
91
|
+
description: This is a very experimental Ruby library for OpenNebula's XML-RPC API
|
92
|
+
email:
|
93
|
+
- gemdev@reuschling.name
|
94
|
+
executables: []
|
95
|
+
extensions: []
|
96
|
+
extra_rdoc_files: []
|
97
|
+
files:
|
98
|
+
- .autotest
|
99
|
+
- .gitignore
|
100
|
+
- .rspec
|
101
|
+
- Gemfile
|
102
|
+
- Rakefile
|
103
|
+
- lib/roca.rb
|
104
|
+
- lib/roca/connector.rb
|
105
|
+
- lib/roca/connector_helper.rb
|
106
|
+
- lib/roca/group.rb
|
107
|
+
- lib/roca/template.rb
|
108
|
+
- lib/roca/template_pool.rb
|
109
|
+
- lib/roca/version.rb
|
110
|
+
- lib/roca/virtual_machine.rb
|
111
|
+
- roca.gemspec
|
112
|
+
- spec/.gitkeep
|
113
|
+
- spec/connector_helper_spec.rb
|
114
|
+
- spec/connector_spec.rb
|
115
|
+
- spec/group_spec.rb
|
116
|
+
- spec/spec_helper.rb
|
117
|
+
- spec/template_spec.rb
|
118
|
+
- spec/version_spec.rb
|
119
|
+
homepage: ''
|
120
|
+
licenses: []
|
121
|
+
post_install_message:
|
122
|
+
rdoc_options: []
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ! '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 1.9.3
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
133
|
+
requirements:
|
134
|
+
- - ! '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
requirements: []
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 1.8.17
|
140
|
+
signing_key:
|
141
|
+
specification_version: 3
|
142
|
+
summary: Ruby library for OpenNebula's XML-RPC API
|
143
|
+
test_files:
|
144
|
+
- spec/connector_helper_spec.rb
|
145
|
+
- spec/connector_spec.rb
|
146
|
+
- spec/group_spec.rb
|
147
|
+
- spec/spec_helper.rb
|
148
|
+
- spec/template_spec.rb
|
149
|
+
- spec/version_spec.rb
|