rbovirt 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rbovirt might be problematic. Click here for more details.

data/Gemfile CHANGED
@@ -12,4 +12,5 @@ group :development do
12
12
  gem "bundler", "~> 1.0.0"
13
13
  gem "jeweler", "~> 1.6.4"
14
14
  gem "rcov", ">= 0"
15
+ gem "rspec-rails", "~> 2.6"
15
16
  end
data/Rakefile CHANGED
@@ -32,6 +32,13 @@ Rake::TestTask.new(:test) do |test|
32
32
  test.verbose = true
33
33
  end
34
34
 
35
+ require 'rspec/core/rake_task'
36
+ RSpec::Core::RakeTask.new(:spec) do |test|
37
+ #test.libs << 'lib' << 'spec'
38
+ test.pattern = 'spec/**/*_spec.rb'
39
+ test.verbose = true
40
+ end
41
+
35
42
  require 'rcov/rcovtask'
36
43
  Rcov::RcovTask.new do |test|
37
44
  test.libs << 'test'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/lib/ovirt/cluster.rb CHANGED
@@ -12,7 +12,7 @@ module OVIRT
12
12
 
13
13
  def parse_xml_attributes!(xml)
14
14
  @description = ((xml/'description').first.text rescue nil)
15
- @version =((xml/'version').first[:major].strip rescue nil)
15
+ @version = parse_version(xml)
16
16
  unless (xml/'data_center').empty?
17
17
  @datacenter = Link::new(@client, (xml/'data_center').first[:id], (xml/'data_center').first[:href])
18
18
  end
@@ -15,7 +15,7 @@ module OVIRT
15
15
  @description = (xml/'description').first.text rescue nil
16
16
  @status = (xml/'status').first.text.strip
17
17
  @storage_type = (xml/'storage_type').first.text
18
- @storage_format = (xml/'storage_format').first.text
18
+ @storage_format = (xml/'storage_format').first.text rescue nil
19
19
  @supported_versions = (xml/'supported_versions').collect { |v|
20
20
  parse_version v
21
21
  }
@@ -1,6 +1,6 @@
1
1
  module OVIRT
2
2
 
3
- class Nic < BaseObject
3
+ class Interface < BaseObject
4
4
  attr_reader :name, :mac, :interface, :network, :vm
5
5
 
6
6
  def initialize(client, xml)
@@ -8,12 +8,12 @@ module OVIRT
8
8
  self
9
9
  end
10
10
 
11
- def self.to_xml(vm_id, opts={})
11
+ def self.to_xml(opts={})
12
12
  builder = Nokogiri::XML::Builder.new do
13
13
  template_ {
14
14
  name_ opts[:name] || "t-#{Time.now.to_i}"
15
15
  description opts[:description] || ''
16
- vm(:id => vm_id)
16
+ vm(:id => opts[:vm])
17
17
  }
18
18
  end
19
19
  Nokogiri::XML(builder.to_xml).root.to_s
@@ -22,9 +22,23 @@ module OVIRT
22
22
  private
23
23
 
24
24
  def parse_xml_attributes!(xml)
25
- @description = ((xml/'description').first.text rescue nil)
26
- @status = (xml/'status').first.text
25
+
26
+ @description = ((xml/'description').first.text rescue '')
27
+ @status = ((xml/'status').first.text rescue 'unknown')
28
+ @memory = (xml/'memory').first.text
29
+ @profile = (xml/'type').first.text
27
30
  @cluster = Link::new(@client, (xml/'cluster').first[:id], (xml/'cluster').first[:href])
31
+ @display = {
32
+ :type => (xml/'display/type').first.text,
33
+ :monitors => (xml/'display/monitors').first.text
34
+ }
35
+ @cores = ((xml/'cpu/topology').first[:cores] rescue nil)
36
+ @storage = ((xml/'disks/disk/size').first.text rescue nil)
37
+ @creation_time = (xml/'creation_time').text
38
+ @os = {
39
+ :type => (xml/'os').first[:type],
40
+ :boot => (xml/'os/boot').collect {|boot| boot[:dev] }
41
+ }
28
42
  end
29
43
  end
30
44
  end
data/lib/ovirt/vm.rb CHANGED
@@ -4,30 +4,43 @@ module OVIRT
4
4
  FILEINJECT_PATH = "user-data.txt"
5
5
 
6
6
  class VM < BaseObject
7
- attr_reader :description, :status, :memory, :profile, :display, :host, :cluster, :template, :nics
7
+ attr_reader :description, :status, :memory, :profile, :display, :host, :cluster, :template
8
8
  attr_reader :storage, :cores, :creation_time, :os, :ip, :vnc
9
- attr_accessor :nics, :disks
9
+ attr_accessor :interfaces, :volumes
10
10
 
11
11
  def initialize(client, xml)
12
12
  super(client, xml[:id], xml[:href], (xml/'name').first.text)
13
13
  parse_xml_attributes!(xml)
14
- self
15
14
  end
16
15
 
17
16
  def running?
18
- @status =~ /up/i
17
+ !(@status =~ /down/i)
19
18
  end
20
19
 
21
- def self.to_xml(template_name, cluster_name, opts={})
20
+ def interfaces
21
+ @interfaces ||= @client.interfaces(id)
22
+ end
23
+
24
+ def disks
25
+ @disks ||= @client.disks(id)
26
+ end
27
+
28
+ def self.to_xml( opts={})
22
29
  builder = Nokogiri::XML::Builder.new do
23
30
  vm{
24
31
  name_ opts[:name] || "i-#{Time.now.to_i}"
25
- template_{
26
- name_(template_name)
27
- }
28
- cluster_{
29
- name_(cluster_name)
30
- }
32
+ if opts[:template]
33
+ template_ :id => (opts[:template])
34
+ elsif opts[:template_name]
35
+ template_{ name_(opts[:template_name])}
36
+ else
37
+ template_{name_('Blank')}
38
+ end
39
+ if opts[:cluster]
40
+ cluster_( :id => opts[:cluster])
41
+ elsif opts[:cluster_name]
42
+ cluster_{ name_(opts[:cluster_name])}
43
+ end
31
44
  type_ opts[:hwp_id] || 'Server'
32
45
  memory opts[:hwp_memory] ? (opts[:hwp_memory].to_i*1024*1024).to_s : (512*1024*1024).to_s
33
46
  cpu {
@@ -1,6 +1,6 @@
1
1
  module OVIRT
2
2
 
3
- class Disk < BaseObject
3
+ class Volume < BaseObject
4
4
  attr_reader :size, :disk_type, :bootable, :interface, :format, :sparse, :storage_domain, :vm
5
5
 
6
6
  def initialize(client, xml)
data/lib/rbovirt.rb CHANGED
@@ -5,8 +5,8 @@ require "ovirt/host"
5
5
  require "ovirt/storage_domain"
6
6
  require "ovirt/template"
7
7
  require "ovirt/vm"
8
- require "ovirt/disk"
9
- require "ovirt/nic"
8
+ require "ovirt/volume"
9
+ require "ovirt/interface"
10
10
 
11
11
  require "nokogiri"
12
12
  require "rest_client"
@@ -27,26 +27,36 @@ module OVIRT
27
27
 
28
28
  class Client
29
29
 
30
- attr_reader :credentials, :api_entrypoint, :datacenter_id
30
+ attr_reader :credentials, :api_entrypoint, :datacenter_id, :cluster_id
31
31
 
32
- def initialize(username, password, api_entrypoint, datacenter_id=nil)
32
+ def initialize(username, password, api_entrypoint, datacenter_id=nil, cluster_id=nil)
33
33
  @credentials = { :username => username, :password => password }
34
34
  @datacenter_id = datacenter_id
35
+ @cluster_id = cluster_id
35
36
  @api_entrypoint = api_entrypoint
36
37
  end
37
38
 
38
39
  def vm(vm_id, opts={})
39
40
  headers = {:accept => "application/xml; detail=disks; detail=nics; detail=hosts"}
40
41
  vm = OVIRT::VM::new(self, http_get("/vms/%s" % vm_id, headers).root)
41
- vm.nics = http_get("/vms/%s/nics" % vm_id, headers).xpath('/nics/nic').collect do |nic|
42
- OVIRT::Nic::new(self, nic)
43
- end if opts[:nics]
44
- vm.disks = http_get("/vms/%s/disks" % vm_id, headers).xpath('/disks/disk').collect do |disk|
45
- OVIRT::Disk::new(self, disk)
46
- end if opts[:disks]
42
+ # optional eager loading
43
+ vm.interfaces = interfaces(vm_id) if opts[:include] && opts[:include].include?(:interfaces)
44
+ vm.volumes = volumes(vm_id) if opts[:include] && opts[:include].include?(:volumes)
47
45
  vm
48
46
  end
49
47
 
48
+ def interfaces vm_id
49
+ http_get("/vms/%s/nics" % vm_id, http_headers).xpath('/nics/nic').collect do |nic|
50
+ OVIRT::Interface::new(self, nic)
51
+ end
52
+ end
53
+
54
+ def volumes vm_id
55
+ http_get("/vms/%s/disks" % vm_id, http_headers).xpath('/disks/disk').collect do |disk|
56
+ OVIRT::Volume::new(self, disk)
57
+ end
58
+ end
59
+
50
60
  def vms(opts={})
51
61
  headers = {:accept => "application/xml; detail=disks; detail=nics; detail=hosts"}
52
62
  search= opts[:search] || ("datacenter=%s" % current_datacenter.name)
@@ -65,37 +75,37 @@ module OVIRT
65
75
  end
66
76
 
67
77
  def api_version
68
- result_xml = http_get("/")
69
- (result_xml/'/api/product_info/version')
78
+ xml = http_get("/")/'/api/product_info/version'
79
+ (xml/'version').first[:major] +"."+ (xml/'version').first[:minor]
70
80
  end
71
81
 
72
82
  def api_version?(major)
73
- api_version.first[:major].strip == major
83
+ api_version.split('.')[0] == major
74
84
  end
75
85
 
76
86
  def cluster_version?(cluster_id, major)
77
- result_xml = http_get("/clusters/%s" % cluster_id)
78
- (result_xml/'/cluster/version').first[:major].strip == major
87
+ c = cluster(cluster_id)
88
+ c.version.split('.')[0] == major
79
89
  end
80
90
 
81
- def create_vm(template_name, opts)
82
- cluster_name = opts[:cluster_name] || clusters.first.name
83
- result_xml = http_post("/vms",OVIRT::VM.to_xml(template_name, cluster_name, opts))
91
+ def create_vm(opts)
92
+ opts[:cluster_name] ||= clusters.first.name
93
+ result_xml = http_post("/vms",OVIRT::VM.to_xml(opts))
84
94
  OVIRT::VM::new(self, result_xml.root)
85
95
  end
86
96
 
87
- def add_disk(vm_id, opts={})
97
+ def add_volume(vm_id, opts={})
88
98
  storage_domain_id = opts[:storage_domain] || storagedomains.first.id
89
- result_xml = http_post("/vms/%s/disks" % vm_id, OVIRT::Disk.to_xml(storage_domain_id, opts))
99
+ result_xml = http_post("/vms/%s/disks" % vm_id, OVIRT::Volume.to_xml(storage_domain_id, opts))
90
100
  end
91
101
 
92
102
 
93
- def add_nic(vm_id, opts={})
94
- http_post("/vms/%s/nics" % vm_id, OVIRT::Nic.to_xml( opts))
103
+ def add_interface(vm_id, opts={})
104
+ http_post("/vms/%s/nics" % vm_id, OVIRT::Interface.to_xml( opts))
95
105
  end
96
106
 
97
- def create_template(vm_id, opts)
98
- template = http_post("/templates", Template.to_xml(vm_id, opts))
107
+ def create_template(opts)
108
+ template = http_post("/templates", Template.to_xml(opts))
99
109
  OVIRT::Template::new(self, template.root)
100
110
  end
101
111
 
@@ -104,7 +114,7 @@ module OVIRT
104
114
  end
105
115
 
106
116
  def templates(opts={})
107
- search= opts[:search] || ("datacenter=$s" % current_datacenter.name)
117
+ search= opts[:search] || ("datacenter=%s" % current_datacenter.name)
108
118
  http_get("/templates?search=%s" % CGI.escape(search)).xpath('/templates/template').collect do |t|
109
119
  OVIRT::Template::new(self, t)
110
120
  end.compact
@@ -125,7 +135,7 @@ module OVIRT
125
135
 
126
136
  def clusters(opts={})
127
137
  headers = {:accept => "application/xml; detail=datacenters"}
128
- search= opts[:search] || ("datacenter=$s" % current_datacenter.name)
138
+ search= opts[:search] || ("datacenter=%s" % current_datacenter.name)
129
139
  http_get("/clusters?search=%s" % CGI.escape(search), headers).xpath('/clusters/cluster').collect do |cl|
130
140
  OVIRT::Cluster.new(self, cl)
131
141
  end
@@ -141,6 +151,10 @@ module OVIRT
141
151
  @current_datacenter ||= self.datacenter_id ? datacenter(self.datacenter_id) : datacenters.first
142
152
  end
143
153
 
154
+ def current_cluster
155
+ @current_cluster ||= self.cluster_id ? cluster(self.cluster_id) : clusters.first
156
+ end
157
+
144
158
  def datacenter(datacenter_id)
145
159
  begin
146
160
  datacenter = http_get("/datacenters/%s" % datacenter_id)
@@ -156,7 +170,7 @@ module OVIRT
156
170
  end
157
171
 
158
172
  def hosts(opts={})
159
- search= opts[:search] || ("datacenter=$s" % current_datacenter.name)
173
+ search= opts[:search] || ("datacenter=%s" % current_datacenter.name)
160
174
  http_get("/hosts?search=%s" % CGI.escape(search)).xpath('/hosts/host').collect do |h|
161
175
  OVIRT::Host::new(self, h)
162
176
  end
data/rbovirt.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rbovirt}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Amos Benari"]
12
- s.date = %q{2012-01-18}
12
+ s.date = %q{2012-01-30}
13
13
  s.description = %q{A Ruby client for oVirt REST API}
14
14
  s.email = %q{abenari@redhat.com}
15
15
  s.extra_rdoc_files = [
@@ -26,16 +26,18 @@ Gem::Specification.new do |s|
26
26
  "lib/ovirt/base_object.rb",
27
27
  "lib/ovirt/cluster.rb",
28
28
  "lib/ovirt/datacenter.rb",
29
- "lib/ovirt/disk.rb",
30
29
  "lib/ovirt/host.rb",
31
- "lib/ovirt/nic.rb",
30
+ "lib/ovirt/interface.rb",
32
31
  "lib/ovirt/storage_domain.rb",
33
32
  "lib/ovirt/template.rb",
34
33
  "lib/ovirt/vm.rb",
34
+ "lib/ovirt/volume.rb",
35
35
  "lib/rbovirt.rb",
36
36
  "rbovirt.gemspec",
37
- "test/helper.rb",
38
- "test/test_rbovirt.rb"
37
+ "spec/integration/api_spec.rb",
38
+ "spec/integration/vm_crud_spec.rb",
39
+ "spec/spec_helper.rb",
40
+ "spec/unit/vm_spec.rb"
39
41
  ]
40
42
  s.homepage = %q{http://github.com/abenari/rbovirt}
41
43
  s.licenses = ["MIT"]
@@ -54,6 +56,7 @@ Gem::Specification.new do |s|
54
56
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
55
57
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
56
58
  s.add_development_dependency(%q<rcov>, [">= 0"])
59
+ s.add_development_dependency(%q<rspec-rails>, ["~> 2.6"])
57
60
  else
58
61
  s.add_dependency(%q<nokogiri>, [">= 0"])
59
62
  s.add_dependency(%q<rest-client>, [">= 0"])
@@ -61,6 +64,7 @@ Gem::Specification.new do |s|
61
64
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
62
65
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
63
66
  s.add_dependency(%q<rcov>, [">= 0"])
67
+ s.add_dependency(%q<rspec-rails>, ["~> 2.6"])
64
68
  end
65
69
  else
66
70
  s.add_dependency(%q<nokogiri>, [">= 0"])
@@ -69,6 +73,7 @@ Gem::Specification.new do |s|
69
73
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
70
74
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
71
75
  s.add_dependency(%q<rcov>, [">= 0"])
76
+ s.add_dependency(%q<rspec-rails>, ["~> 2.6"])
72
77
  end
73
78
  end
74
79
 
@@ -0,0 +1,55 @@
1
+ require "#{File.dirname(__FILE__)}/../spec_helper"
2
+
3
+ describe OVIRT, "API" do
4
+
5
+ # This spec requires the API to be stable, so that projects using
6
+ # OVIRT do not have to update their code if a new (minor)
7
+ # version is released.
8
+ #
9
+ # API compatibility is only guaranteed for minor version changes;
10
+ # New major versions may change the API and require code changes
11
+ # in projects using this plugin.
12
+ #
13
+ # Because of the API stability guarantee, these spec's may only
14
+ # be changed for new major releases.
15
+
16
+ before(:all) do
17
+ user="admin@internal"
18
+ password="123123"
19
+ hostname = "ovirt.sat.lab.tlv.redhat.com"
20
+ port = "8080"
21
+ url = "http://#{hostname}:#{port}/api"
22
+ @blank_template_id = "00000000-0000-0000-0000-000000000000"
23
+ @client = ::OVIRT::Client.new(user, password, url)
24
+ end
25
+
26
+ after(:all) do
27
+ end
28
+
29
+ context 'basic api and listing' do
30
+ it "test_should_return_a_version" do
31
+ @client.api_version.should eql('3.0')
32
+ end
33
+
34
+ it "test_should_return_datacenters" do
35
+ @client.datacenters.class.should eql(Array)
36
+ end
37
+
38
+ it "test_should_return_clusters" do
39
+ @client.clusters.class.should eql(Array)
40
+ end
41
+
42
+ it "test_should_return_templates" do
43
+ @client.templates.class.should eql(Array)
44
+ end
45
+
46
+ it "test_should_return_vms" do
47
+ @client.vms.class.should eql(Array)
48
+ end
49
+ it "test_should_return_storage" do
50
+ @client.storagedomains.class.should eql(Array)
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,74 @@
1
+ require "#{File.dirname(__FILE__)}/../spec_helper"
2
+
3
+ describe "VM Life cycle" do
4
+
5
+ before(:all) do
6
+ user="admin@internal"
7
+ password="123123"
8
+ hostname = "ovirt.sat.lab.tlv.redhat.com"
9
+ port = "8080"
10
+ url = "http://#{hostname}:#{port}/api"
11
+ @blank_template_id = "00000000-0000-0000-0000-000000000000"
12
+ @client = ::OVIRT::Client.new(user, password, url)
13
+ end
14
+
15
+ context 'basic vm and templates operations' do
16
+
17
+ before(:all) do
18
+ name = 'vm-'+Time.now.to_i.to_s
19
+ params = {}
20
+ params[:name] = name
21
+ params[:cluster_name] = "test"
22
+ @vm = @client.create_vm(params)
23
+ @client.add_volume(@vm.id)
24
+ @client.add_interface(@vm.id)
25
+ while @client.vm(@vm.id).status !~ /down/i do
26
+ end
27
+ end
28
+
29
+ after(:all) do
30
+ @client.destroy_vm(@vm.id)
31
+ end
32
+
33
+ it "test_should_create_template" do
34
+ template_name = "test_template"
35
+ template = @client.create_template(:vm => @vm.id, :name => template_name, :description => "test_template")
36
+ template.class.to_s.should eql("OVIRT::Template")
37
+ while @client.vm(@vm.id).status !~ /down/i do
38
+ end
39
+ @client.destroy_template(template.id)
40
+ end
41
+
42
+ it "test_should_return_a_template" do
43
+ @client.template(@blank_template_id).id.should eql(@blank_template_id)
44
+ end
45
+
46
+ it "test_should_return_a_vm" do
47
+ @client.vm(@vm.id).id.should eql(@vm.id)
48
+ end
49
+
50
+ it "test_should_start_and_stop_vm" do
51
+ @client.vm_action(@vm.id, :start)
52
+ @client.vm_action(@vm.id, :shutdown)
53
+ end
54
+
55
+ it "test_should_destroy_vm" do
56
+ name = 'd-'+Time.now.to_i.to_s
57
+ params = {}
58
+ params[:name] = name
59
+ params[:cluster_name] = "test"
60
+ vm = @client.create_vm(params)
61
+ @client.destroy_vm(vm.id)
62
+ end
63
+
64
+ it "test_should_create_a_vm" do
65
+ name = 'c-'+Time.now.to_i.to_s
66
+ params = {}
67
+ params[:name] = name
68
+ params[:cluster_name] = "test"
69
+ vm = @client.create_vm(params)
70
+ vm.class.to_s.should eql("OVIRT::VM")
71
+ @client.destroy_vm(vm.id)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,7 @@
1
+ #require 'rubygems'
2
+ #require 'bundler/setup'
3
+
4
+ require 'rspec'
5
+ require 'rbovirt'
6
+
7
+ module OVIRT::RSpec end
@@ -0,0 +1,88 @@
1
+ require "#{File.dirname(__FILE__)}/../spec_helper"
2
+
3
+
4
+ describe OVIRT::VM do
5
+
6
+ context 'xml parsing' do
7
+ before(:all) do
8
+ @xml = <<END_HEREDOC
9
+ <vm id="76d29095-bc27-4cd0-8178-07e942aea549" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549">
10
+ <name>c-1326980484</name>
11
+ <actions>
12
+ <link rel="shutdown" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/shutdown"/>
13
+ <link rel="start" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/start"/>
14
+ <link rel="stop" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/stop"/>
15
+ <link rel="suspend" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/suspend"/>
16
+ <link rel="detach" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/detach"/>
17
+ <link rel="export" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/export"/>
18
+ <link rel="move" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/move"/>
19
+ <link rel="ticket" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/ticket"/>
20
+ <link rel="migrate" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/migrate"/>
21
+ <link rel="cancelmigration" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/cancelmigration"/>
22
+ </actions>
23
+ <link rel="disks" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/disks"/>
24
+ <link rel="nics" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/nics"/>
25
+ <link rel="cdroms" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/cdroms"/>
26
+ <link rel="snapshots" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/snapshots"/>
27
+ <link rel="tags" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/tags"/>
28
+ <link rel="permissions" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/permissions"/>
29
+ <link rel="statistics" href="/api/vms/76d29095-bc27-4cd0-8178-07e942aea549/statistics"/>
30
+ <type>server</type>
31
+ <status>
32
+ <state>up</state>
33
+ </status>
34
+ <memory>536870912</memory>
35
+ <cpu>
36
+ <topology cores="1" sockets="1"/>
37
+ </cpu>
38
+ <os type="unassigned">
39
+ <boot dev="network"/>
40
+ <boot dev="hd"/>
41
+ </os>
42
+ <high_availability>
43
+ <enabled>false</enabled>
44
+ <priority>0</priority>
45
+ </high_availability>
46
+ <display>
47
+ <type>vnc</type>
48
+ <monitors>1</monitors>
49
+ </display>
50
+ <cluster id="b68980dc-3ab8-11e1-bcbf-5254005f0f6f" href="/api/clusters/b68980dc-3ab8-11e1-bcbf-5254005f0f6f"/>
51
+ <template id="00000000-0000-0000-0000-000000000000" href="/api/templates/00000000-0000-0000-0000-000000000000"/>
52
+ <start_time>2012-01-19T14:41:58.428Z</start_time>
53
+ <creation_time>2012-01-19T13:41:24.405Z</creation_time>
54
+ <origin>rhev</origin>
55
+ <stateless>false</stateless>
56
+ <placement_policy>
57
+ <affinity>migratable</affinity>
58
+ </placement_policy>
59
+ <memory_policy>
60
+ <guaranteed>536870912</guaranteed>
61
+ </memory_policy>
62
+ <usb>
63
+ <enabled>true</enabled>
64
+ </usb>
65
+ </vm>
66
+ END_HEREDOC
67
+ end
68
+
69
+ it "should parse VM xml" do
70
+ vm = OVIRT::VM.new(nil, Nokogiri::XML(@xml).xpath('/'))
71
+ vm.class.should eql(OVIRT::VM)
72
+ end
73
+
74
+ it "create vm xml" do
75
+ opts = {:cluster_name=>'cluster', :template_name =>'template'}
76
+ xml = OVIRT::VM.to_xml(opts)
77
+ xml.nil?.should eql(false)
78
+ end
79
+
80
+ it "should be running" do
81
+ vm = OVIRT::VM.new(nil, Nokogiri::XML(@xml).xpath('/'))
82
+ vm.running?.should eql(true)
83
+ end
84
+
85
+
86
+ end
87
+
88
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbovirt
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Amos Benari
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-18 00:00:00 +02:00
18
+ date: 2012-01-30 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -106,6 +106,21 @@ dependencies:
106
106
  version: "0"
107
107
  requirement: *id006
108
108
  type: :development
109
+ - !ruby/object:Gem::Dependency
110
+ prerelease: false
111
+ name: rspec-rails
112
+ version_requirements: &id007 !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ hash: 15
118
+ segments:
119
+ - 2
120
+ - 6
121
+ version: "2.6"
122
+ requirement: *id007
123
+ type: :development
109
124
  description: A Ruby client for oVirt REST API
110
125
  email: abenari@redhat.com
111
126
  executables: []
@@ -125,16 +140,18 @@ files:
125
140
  - lib/ovirt/base_object.rb
126
141
  - lib/ovirt/cluster.rb
127
142
  - lib/ovirt/datacenter.rb
128
- - lib/ovirt/disk.rb
129
143
  - lib/ovirt/host.rb
130
- - lib/ovirt/nic.rb
144
+ - lib/ovirt/interface.rb
131
145
  - lib/ovirt/storage_domain.rb
132
146
  - lib/ovirt/template.rb
133
147
  - lib/ovirt/vm.rb
148
+ - lib/ovirt/volume.rb
134
149
  - lib/rbovirt.rb
135
150
  - rbovirt.gemspec
136
- - test/helper.rb
137
- - test/test_rbovirt.rb
151
+ - spec/integration/api_spec.rb
152
+ - spec/integration/vm_crud_spec.rb
153
+ - spec/spec_helper.rb
154
+ - spec/unit/vm_spec.rb
138
155
  has_rdoc: true
139
156
  homepage: http://github.com/abenari/rbovirt
140
157
  licenses:
data/test/helper.rb DELETED
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
15
- require 'rbovirt'
16
-
17
- class Test::Unit::TestCase
18
- end
data/test/test_rbovirt.rb DELETED
@@ -1,112 +0,0 @@
1
- require 'helper'
2
-
3
- class TestRbovirt < Test::Unit::TestCase
4
-
5
- def setup
6
- user="admin@internal"
7
- password="123123"
8
- hostname = "ovirt.sat.lab.tlv.redhat.com"
9
- port = "8080"
10
- url = "http://#{hostname}:#{port}/api"
11
- @blank_template_id = "00000000-0000-0000-0000-000000000000"
12
- @client = ::OVIRT::Client.new(user, password, url)
13
- end
14
-
15
- def test_should_return_a_version
16
- assert @client.api_version
17
- end
18
-
19
- def test_should_return_datacenters
20
- assert @client.datacenters
21
- end
22
-
23
- def test_should_return_clusters
24
- assert @client.clusters
25
- end
26
-
27
- def test_should_return_templates
28
- assert @client.templates
29
- end
30
-
31
- def test_should_create_template
32
- name = 't'+Time.now.to_i.to_s
33
- params = {}
34
- params[:name] = name
35
- params[:cluster_name] = "test"
36
- vm = @client.create_vm("Blank",params)
37
-
38
- @client.add_disk(vm.id)
39
- @client.add_nic(vm.id)
40
- while @client.vm(vm.id).status !~ /down/i do
41
- end
42
- template_name = "test_template"
43
- assert template = @client.create_template(vm.id, :name => template_name, :description => "test_template")
44
- while @client.vm(vm.id).status !~ /down/i do
45
- end
46
- assert @client.destroy_template(template.id)
47
- @client.destroy_vm(vm.id)
48
- end
49
-
50
- def test_should_return_a_template
51
- assert @client.template(@blank_template_id)
52
- end
53
-
54
-
55
- def test_should_return_vms
56
- assert @client.vms
57
- end
58
-
59
- def test_should_return_a_vm
60
- name = 'a'+Time.now.to_i.to_s
61
- params = {}
62
- params[:name] = name
63
- params[:cluster_name] = "test"
64
- vm = @client.create_vm("Blank",params)
65
- assert @client.vm(vm.id)
66
- @client.destroy_vm(vm.id)
67
- end
68
-
69
- def test_should_start_vm
70
- name = 'r'+Time.now.to_i.to_s
71
- params = {}
72
- params[:name] = name
73
- params[:cluster_name] = "test"
74
- vm = @client.create_vm("Blank",params)
75
- @client.add_disk(vm.id)
76
- @client.add_nic(vm.id)
77
- while @client.vm(vm.id).status !~ /down/i do
78
- end
79
- assert @client.vm_action(vm.id, :start)
80
- @client.vm_action(vm.id, :shutdown)
81
- while @client.vm(vm.id).status !~ /down/i do
82
- end
83
- @client.destroy_vm(vm.id)
84
- end
85
-
86
- def test_should_stop_vm
87
-
88
- end
89
-
90
- def test_should_destroy_vm
91
- name = 'd'+Time.now.to_i.to_s
92
- params = {}
93
- params[:name] = name
94
- params[:cluster_name] = "test"
95
- vm = @client.create_vm("Blank",params)
96
- assert @client.destroy_vm(vm.id)
97
- end
98
-
99
- def test_should_return_storage
100
- assert @client.storagedomains
101
- end
102
-
103
- def test_should_create_a_vm
104
- name = 'c'+Time.now.to_i.to_s
105
- params = {}
106
- params[:name] = name
107
- params[:cluster_name] = "test"
108
- assert vm = @client.create_vm("Blank",params)
109
- @client.destroy_vm(vm.id)
110
- end
111
-
112
- end