virt 0.2.0 → 0.2.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/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source "http://rubygems.org"
2
+ gem "ruby-libvirt" # to remove once upgrading vir to 0.3
2
3
 
3
4
  group :development do
4
5
  gem "shoulda", ">= 2.11.3"
@@ -8,6 +8,7 @@ GEM
8
8
  rake
9
9
  rake (0.8.7)
10
10
  rcov (0.9.8)
11
+ ruby-libvirt (0.4.0)
11
12
  shoulda (2.11.3)
12
13
 
13
14
  PLATFORMS
@@ -17,4 +18,5 @@ DEPENDENCIES
17
18
  bundler (~> 1.0.0)
18
19
  jeweler (~> 1.5.2)
19
20
  rcov (>= 0.9.8)
21
+ ruby-libvirt
20
22
  shoulda (>= 2.11.3)
data/Rakefile CHANGED
@@ -29,7 +29,6 @@ Rake::TestTask.new(:test) do |test|
29
29
  test.libs << 'lib' << 'test'
30
30
  test.pattern = 'test/*test*.rb'
31
31
  test.verbose = true
32
- test.warning = true
33
32
  end
34
33
 
35
34
  require 'rcov/rcovtask'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -7,10 +7,12 @@ require 'virt/volume'
7
7
  require 'virt/interface'
8
8
  module Virt
9
9
 
10
+ autoload :KVM, "virt/kvm"
11
+ autoload :VMWare, "virt/vmware"
10
12
  class << self
11
13
 
12
- def connect uri
13
- @connection = Virt::Connection.new uri
14
+ def connect uri, options = {}
15
+ @connection = Virt::Connection.new uri, options
14
16
  end
15
17
 
16
18
  def connection
@@ -1,11 +1,26 @@
1
1
  require 'libvirt'
2
2
  module Virt
3
3
  class Connection
4
- attr_reader :connection
4
+ attr_reader :connection, :type
5
5
 
6
- def initialize uri
7
- raise("Must provide a guest to connect to") unless uri
8
- @connection = Libvirt::open uri
6
+ def initialize uri, options = {}
7
+ raise("Must provide a host to connect to") unless uri
8
+ if uri =~ /^(esx|vpx)/
9
+ raise("Must provide a username and password") unless options[:username] or options[:password]
10
+ @connection = Libvirt::open_auth(uri, [Libvirt::CRED_AUTHNAME, Libvirt::CRED_PASSPHRASE]) do |cred|
11
+ # This may only be required for ESXi connections, not sure.
12
+ @type = "VMWare"
13
+ case cred['type']
14
+ when ::Libvirt::CRED_AUTHNAME
15
+ options[:username]
16
+ when ::Libvirt::CRED_PASSPHRASE
17
+ options[:password]
18
+ end
19
+ end
20
+ else
21
+ @type = "KVM"
22
+ @connection = Libvirt::open uri
23
+ end
9
24
  end
10
25
 
11
26
  def closed?
@@ -25,7 +40,14 @@ module Virt
25
40
  end
26
41
 
27
42
  def host
28
- Host.new
43
+ case type
44
+ when "KVM"
45
+ KVM::Host.new
46
+ when "VMWare"
47
+ VMWare::Host.new
48
+ else
49
+ raise "Non supported hypervisor"
50
+ end
29
51
  end
30
52
 
31
53
  end
@@ -15,8 +15,6 @@ module Virt
15
15
  @arch ||= options[:arch] || default_arch
16
16
 
17
17
  @template_path = options[:template_path] || default_template_path
18
- @volume = Volume.new options
19
- @interface ||= Interface.new options
20
18
  end
21
19
 
22
20
  def new?
@@ -79,10 +77,6 @@ module Virt
79
77
  @domain.uuid unless new?
80
78
  end
81
79
 
82
- def arch= value
83
- @arch = value == "i386" ? "i686" : value
84
- end
85
-
86
80
  def to_s
87
81
  name.to_s
88
82
  end
@@ -91,7 +85,7 @@ module Virt
91
85
  self.name <=> other.name
92
86
  end
93
87
 
94
- private
88
+ protected
95
89
 
96
90
  def fetch_guest
97
91
  @domain = @connection.connection.lookup_domain_by_name(name)
@@ -108,7 +102,7 @@ module Virt
108
102
  @vcpu = document("domain/vcpu")
109
103
  @arch = document("domain/os/type", "arch")
110
104
  @machine = document("domain/os/type", "machine")
111
- @boot_device = document("domain/os/boot", "dev")
105
+ @boot_device = document("domain/os/boot", "dev") rescue nil
112
106
 
113
107
  # do we have a NIC?
114
108
  network_type = document("domain/devices/interface", "type") rescue nil
@@ -134,8 +128,6 @@ module Virt
134
128
  "x86_64"
135
129
  end
136
130
 
137
- def default_template_path
138
- "guest.xml.erb"
139
- end
131
+ def default_template_path; end
140
132
  end
141
133
  end
@@ -26,32 +26,13 @@ module Virt
26
26
  find_guest_by_name domain
27
27
  end
28
28
  end
29
-
30
- # Available libvirt interfaces, excluding lo
31
- def interfaces
32
- connection.list_interfaces.delete_if{|i| i == "lo"}.sort
33
- rescue => e
34
- raise "This function is not supported by the hypervisor: #{e}"
35
- end
36
-
37
- def interface iface
38
- connection.lookup_interface_by_name(iface)
39
- end
40
-
41
- # libvirt internal networks
42
- def networks
43
- connection.list_networks.map do |network|
44
- connection.lookup_network_by_name(network).bridge_name
45
- end
46
- end
47
-
48
29
  def storage_pools
49
- connection.list_storage_pools.map {|p| Pool.new({:name => p})}
30
+ connection.list_storage_pools.map {|p| create_pool({:name => p})}
50
31
  end
51
32
 
52
33
  # Returns a Virt::Pool object based on the pool name
53
34
  def storage_pool pool
54
- Pool.new({:name => pool.is_a?(Libvirt::StoragePool) ? pool.name : pool })
35
+ create_pool({:name => pool.is_a?(Libvirt::StoragePool) ? pool.name : pool })
55
36
  rescue Libvirt::RetrieveError
56
37
  end
57
38
 
@@ -66,15 +47,25 @@ module Virt
66
47
 
67
48
  def find_guest_by_name name
68
49
  if connection.lookup_domain_by_name name
69
- return Guest.new({:name => name})
50
+ return create_guest({:name => name})
70
51
  end
71
52
  end
72
53
 
73
54
  def find_guest_by_id id
74
- id.to_a.map do |did|
75
- return Guest.new({:name => connection.lookup_domain_by_id(did).name})
55
+ Array(id).map do |did|
56
+ return create_guest({:name => connection.lookup_domain_by_id(did).name})
76
57
  end
77
58
  end
78
59
 
60
+ protected
61
+
62
+ def create_guest opts
63
+ Virt::Guest.new opts
64
+ end
65
+
66
+ def create_pool opts
67
+ Virt::Pool.new opts
68
+ end
69
+
79
70
  end
80
71
  end
@@ -15,21 +15,14 @@ module Virt
15
15
  mac.nil?
16
16
  end
17
17
 
18
- private
18
+ protected
19
19
 
20
- def default_device
21
- @connection.host.interfaces.first
22
- rescue
23
- "br0"
24
- end
20
+ # Abstracted methods
21
+ def default_device; end
25
22
 
26
- def default_type
27
- "bridge"
28
- end
23
+ def default_type; end
29
24
 
30
- def default_model
31
- "virtio"
32
- end
25
+ def default_model; end
33
26
 
34
27
  end
35
28
  end
@@ -0,0 +1,6 @@
1
+ module Virt::KVM
2
+ autoload :Host, 'virt/kvm/host.rb'
3
+ autoload :Guest, 'virt/kvm/guest.rb'
4
+ autoload :Interface, 'virt/kvm/interface.rb'
5
+ autoload :Volume, 'virt/kvm/volume.rb'
6
+ end
@@ -0,0 +1,22 @@
1
+ module Virt::KVM
2
+ class Guest < Virt::Guest
3
+
4
+ def initialize options = {}
5
+ super(options)
6
+ @volume = Volume.new options
7
+ @interface ||= Interface.new options
8
+ end
9
+
10
+ def arch= value
11
+ @arch = value == "i386" ? "i686" : value
12
+ end
13
+
14
+
15
+ protected
16
+
17
+ def default_template_path
18
+ "kvm/guest.xml.erb"
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ module Virt::KVM
2
+ class Host < Virt::Host
3
+
4
+ # Available libvirt interfaces, excluding lo
5
+ def interfaces
6
+ connection.list_interfaces.delete_if{|i| i == "lo"}.sort
7
+ rescue => e
8
+ raise "This function is not supported by the hypervisor: #{e}"
9
+ end
10
+
11
+ def interface iface
12
+ connection.lookup_interface_by_name(iface)
13
+ end
14
+
15
+ # libvirt internal networks
16
+ def networks
17
+ connection.list_networks.map do |network|
18
+ connection.lookup_network_by_name(network).bridge_name
19
+ end
20
+ end
21
+
22
+ def create_guest opts
23
+ Virt::KVM::Guest.new opts
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,25 @@
1
+ module Virt::KVM
2
+ class Interface < Virt::Interface
3
+
4
+ protected
5
+
6
+ def default_template_path
7
+ "kvm/guest.xml.erb"
8
+ end
9
+
10
+ def default_device
11
+ @connection.host.interfaces.first
12
+ rescue
13
+ "br0"
14
+ end
15
+
16
+ def default_type
17
+ "bridge"
18
+ end
19
+
20
+ def default_model
21
+ "virtio"
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module Virt::KVM
2
+ class Volume < Virt::Volume
3
+
4
+ def default_type
5
+ "raw"
6
+ end
7
+
8
+ def default_template_path
9
+ "kvm/volume.xml.erb"
10
+ end
11
+
12
+ def path
13
+ "#{pool.path}/#{name}"
14
+ end
15
+
16
+ def name= name
17
+ super name
18
+ @name += ".img" unless name.match(/.*\.img$/)
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -8,6 +8,10 @@ module Virt
8
8
  ERB.new(template, nil, '-').result(binding)
9
9
  end
10
10
 
11
+ def to_gb bytes
12
+ bytes.to_i / 1073741824
13
+ end
14
+
11
15
  private
12
16
  # template file that contain our xml template
13
17
  def template
@@ -0,0 +1,6 @@
1
+ module Virt::VMWare
2
+ autoload :Host, 'virt/vmware/host.rb'
3
+ autoload :Guest, 'virt/vmware/guest.rb'
4
+ autoload :Interface, 'virt/vmware/interface.rb'
5
+ autoload :Volume, 'virt/vmware/volume.rb'
6
+ end
@@ -0,0 +1,17 @@
1
+ module Virt::VMWare
2
+ class Guest < Virt::Guest
3
+
4
+ def initialize options = {}
5
+ super(options)
6
+ @volume = Volume.new options
7
+ @interface ||= Interface.new options
8
+ end
9
+
10
+ protected
11
+
12
+ def default_template_path
13
+ "vmware/guest.xml.erb"
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ module Virt::VMWare
2
+ class Host < Virt::Host
3
+
4
+ # Available libvirt interfaces, excluding lo
5
+ def interfaces
6
+ connection.list_interfaces.delete_if{|i| i == "lo"}.sort
7
+ rescue => e
8
+ raise "This function is not supported by the hypervisor: #{e}"
9
+ end
10
+
11
+ def interface iface
12
+ connection.lookup_interface_by_name(iface)
13
+ end
14
+
15
+ # libvirt internal networks
16
+ def networks
17
+ connection.list_networks.map do |network|
18
+ connection.lookup_network_by_name(network).bridge_name
19
+ end
20
+ end
21
+
22
+ def create_guest opts
23
+ Virt::VMWare::Guest.new opts
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,25 @@
1
+ module Virt::VMWare
2
+ class Interface < Virt::Interface
3
+
4
+ protected
5
+
6
+ def default_template_path
7
+ "vmware/guest.xml.erb"
8
+ end
9
+
10
+ def default_device
11
+ @connection.host.interfaces.first
12
+ rescue
13
+ "VM Network"
14
+ end
15
+
16
+ def default_type
17
+ "bridge"
18
+ end
19
+
20
+ def default_model
21
+ "e1000"
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module Virt::VMWare
2
+ class Volume < Virt::Volume
3
+
4
+ def default_type
5
+ "raw"
6
+ end
7
+
8
+ def default_template_path
9
+ "vmware/volume.xml.erb"
10
+ end
11
+
12
+ def path
13
+ "[#{pool.name}] #{self}"
14
+ end
15
+
16
+ def name= name
17
+ super name
18
+ @name += ".vmdk" unless name.match(/.*\.vmdk$/)
19
+ end
20
+
21
+ def to_s
22
+ "#{title}/#{name}"
23
+ end
24
+
25
+ private
26
+
27
+ def title
28
+ name.chomp(".vmdk")
29
+ end
30
+
31
+ end
32
+ end
@@ -1,17 +1,18 @@
1
1
  module Virt
2
2
  class Volume
3
3
  include Virt::Util
4
- attr_reader :name, :pool, :type, :allocated_size, :size, :template_path, :key
4
+ attr_reader :name, :pool, :type, :allocated_size, :size, :template_path, :key, :xml_desc
5
5
 
6
6
  def initialize options = {}
7
7
  @connection = Virt.connection
8
8
  self.name = options[:name] || raise("Volume requires a name")
9
- @type = options[:type] || default_type
10
- @allocated_size = options[:allocated_size] || default_allocated_size
11
- @template_path = options[:template_path] || default_template_path
12
- @size = options[:size] || default_size
13
- @pool = options[:pool].nil? ? @connection.host.storage_pools.first : @connection.host.storage_pool(options[:pool])
9
+ # If our volume already exists, we ignore the provided options and defaults
10
+ @pool = options[:pool].nil? ? default_pool : @connection.host.storage_pool(options[:pool])
14
11
  fetch_volume
12
+ @type ||= options[:type] || default_type
13
+ @allocated_size ||= options[:allocated_size] || default_allocated_size
14
+ @template_path ||= options[:template_path] || default_template_path
15
+ @size ||= options[:size] || default_size
15
16
  end
16
17
 
17
18
  def new?
@@ -33,20 +34,13 @@ module Virt
33
34
  new?
34
35
  end
35
36
 
36
- def path
37
- "#{pool.path}/#{name}"
38
- end
37
+ def path; end
39
38
 
40
- private
39
+ protected
41
40
 
42
41
  def name= name
43
42
  raise "invalid name" if name.nil?
44
43
  @name = name
45
- @name += ".img" unless name.match(/.*\.img$/)
46
- end
47
-
48
- def default_type
49
- "raw"
50
44
  end
51
45
 
52
46
  def default_allocated_size
@@ -57,13 +51,21 @@ module Virt
57
51
  def default_size
58
52
  8
59
53
  end
60
-
61
- def default_template_path
62
- "volume.xml.erb"
54
+ def fetch_volume
55
+ return unless @vol = pool.find_volume_by_name(name)
56
+ @size = to_gb(@vol.info.capacity)
57
+ @allocated_size = to_gb(@vol.info.allocation)
63
58
  end
64
59
 
65
- def fetch_volume
66
- @vol = pool.find_volume_by_name(name)
60
+ def default_pool
61
+ # this is an expensive call on hosts with lots of pools
62
+ @connection.host.storage_pools.first
67
63
  end
64
+
65
+ # abstracted methods
66
+
67
+ def default_type; end
68
+
69
+ def default_template_path; end
68
70
  end
69
71
  end
@@ -0,0 +1,41 @@
1
+ <domain type='vmware'>
2
+ <name><%= name %></name>
3
+ <%- if uuid -%>
4
+ <uuid><%= uuid %></uuid>
5
+ <%- end -%>
6
+ <memory><%= memory %></memory>
7
+ <currentMemory><%= memory %></currentMemory>
8
+ <vcpu><%= vcpu %></vcpu>
9
+ <os>
10
+ <type arch='<%= arch %>'>hvm</type>
11
+ <boot dev='network'/>
12
+ <%- if volume -%>
13
+ <boot dev='hd'/>
14
+ <%- end -%>
15
+ </os>
16
+ <clock offset='utc'/>
17
+ <devices>
18
+ <%- if volume -%>
19
+ <disk type='file' device='disk'>
20
+ <source file='<%= volume.path %>'/>
21
+ <target dev='sda' bus='scsi'/>
22
+ <address type='drive' controller='0' bus='0' unit='0'/>
23
+ </disk>
24
+ <%- end -%>
25
+ <controller type='scsi' index='0' model='lsilogic'/>
26
+ <%- if interface -%>
27
+ <interface type='<%= interface.type %>'>
28
+ <%- if interface.mac -%>
29
+ <mac address='<%= interface.mac %>'/>
30
+ <%- end -%>
31
+ <source <%= interface.type %>='<%= interface.device %>'/>
32
+ <model type='<%= interface.model %>'/>
33
+ </interface>
34
+ <%- end -%>
35
+ <graphics type='vnc' port='-1' autoport='yes'>
36
+ </graphics>
37
+ <video>
38
+ <model type='vmvga' vram='32768'/>
39
+ </video>
40
+ </devices>
41
+ </domain>
@@ -0,0 +1,14 @@
1
+ <volume>
2
+ <name><%= to_s %></name>
3
+ <allocation unit="G"><%= allocated_size %></allocation>
4
+ <capacity unit="G"><%= size %></capacity>
5
+ <target>
6
+ <path><%= path %></path>
7
+ <format type='vmdk'/>
8
+ <permissions>
9
+ <mode>00</mode>
10
+ <owner>0</owner>
11
+ <group>0</group>
12
+ </permissions>
13
+ </target>
14
+ </volume>
@@ -3,10 +3,10 @@ require 'test/test_helper'
3
3
  class Virt::GuestTest < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
- hostname = "h01.sat.lab"
6
+ hostname = "h02.sat.lab"
7
7
  uri = "qemu+ssh://root@#{hostname}/system"
8
8
  Virt.connect(uri)
9
- @guest = Virt::Guest.new({:name => "test-host-#{Time.now.to_i}"})
9
+ @guest = Virt::KVM::Guest.new({:name => "test-host-#{Time.now.to_i}"})
10
10
  end
11
11
 
12
12
  def teardown
@@ -40,11 +40,11 @@ class Virt::GuestTest < Test::Unit::TestCase
40
40
  end
41
41
 
42
42
  def test_should_be_able_to_save_and_start
43
- @guest = Virt::Guest.new({:name => "test-host-#{Time.now.to_i}", :device => "br180"})
43
+ @guest = Virt::KVM::Guest.new({:name => "test-host-#{Time.now.to_i}", :device => "br180"})
44
44
  assert @guest.volume.save
45
45
  assert @guest.save
46
46
  assert @guest.start
47
- assert @guest.stop
47
+ assert @guest.poweroff
48
48
  assert @guest.volume.destroy
49
49
  assert @guest.destroy
50
50
  end
@@ -6,7 +6,7 @@ class Virt::VolumeTest < Test::Unit::TestCase
6
6
  hostname = "h01.sat.lab"
7
7
  uri = "qemu+ssh://root@#{hostname}/system"
8
8
  Virt.connect(uri)
9
- @vol = Virt::Volume.new({:name => "mytestvol-#{Time.now}"})
9
+ @vol = Virt::KVM::Volume.new({:name => "mytestvol-#{Time.now}"})
10
10
  end
11
11
 
12
12
  def test_should_be_new
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "virt"
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ohad Levy"]
12
- s.date = "2011-11-15"
12
+ s.date = "2012-01-22"
13
13
  s.description = "Simplied interface to use ruby the libvirt ruby library"
14
14
  s.email = "ohadlevy@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -29,11 +29,23 @@ Gem::Specification.new do |s|
29
29
  "lib/virt/guest.rb",
30
30
  "lib/virt/host.rb",
31
31
  "lib/virt/interface.rb",
32
+ "lib/virt/kvm.rb",
33
+ "lib/virt/kvm/guest.rb",
34
+ "lib/virt/kvm/host.rb",
35
+ "lib/virt/kvm/interface.rb",
36
+ "lib/virt/kvm/volume.rb",
32
37
  "lib/virt/pool.rb",
33
38
  "lib/virt/util.rb",
39
+ "lib/virt/vmware.rb",
40
+ "lib/virt/vmware/guest.rb",
41
+ "lib/virt/vmware/host.rb",
42
+ "lib/virt/vmware/interface.rb",
43
+ "lib/virt/vmware/volume.rb",
34
44
  "lib/virt/volume.rb",
35
- "templates/guest.xml.erb",
36
- "templates/volume.xml.erb",
45
+ "templates/kvm/guest.xml.erb",
46
+ "templates/kvm/volume.xml.erb",
47
+ "templates/vmware/guest.xml.erb",
48
+ "templates/vmware/volume.xml.erb",
37
49
  "test/connection_test.rb",
38
50
  "test/guest_test.rb",
39
51
  "test/host_test.rb",
@@ -46,7 +58,7 @@ Gem::Specification.new do |s|
46
58
  s.homepage = "https://github.com/ohadlevy/virt"
47
59
  s.licenses = ["GPLv3"]
48
60
  s.require_paths = ["lib"]
49
- s.rubygems_version = "1.7.2"
61
+ s.rubygems_version = "1.8.11"
50
62
  s.summary = "Simple to use ruby interface to libvirt"
51
63
  s.test_files = [
52
64
  "test/connection_test.rb",
@@ -62,17 +74,20 @@ Gem::Specification.new do |s|
62
74
  s.specification_version = 3
63
75
 
64
76
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
77
+ s.add_runtime_dependency(%q<ruby-libvirt>, [">= 0"])
65
78
  s.add_development_dependency(%q<shoulda>, [">= 2.11.3"])
66
79
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
67
80
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
68
81
  s.add_development_dependency(%q<rcov>, [">= 0.9.8"])
69
82
  else
83
+ s.add_dependency(%q<ruby-libvirt>, [">= 0"])
70
84
  s.add_dependency(%q<shoulda>, [">= 2.11.3"])
71
85
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
72
86
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
73
87
  s.add_dependency(%q<rcov>, [">= 0.9.8"])
74
88
  end
75
89
  else
90
+ s.add_dependency(%q<ruby-libvirt>, [">= 0"])
76
91
  s.add_dependency(%q<shoulda>, [">= 2.11.3"])
77
92
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
78
93
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virt
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ohad Levy
@@ -15,12 +15,24 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-15 00:00:00 Z
18
+ date: 2012-01-22 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: shoulda
22
- type: :development
23
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ requirement: *id001
32
+ name: ruby-libvirt
33
+ prerelease: false
34
+ - !ruby/object:Gem::Dependency
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
24
36
  none: false
25
37
  requirements:
26
38
  - - ">="
@@ -31,12 +43,12 @@ dependencies:
31
43
  - 11
32
44
  - 3
33
45
  version: 2.11.3
46
+ type: :development
47
+ requirement: *id002
48
+ name: shoulda
34
49
  prerelease: false
35
- requirement: *id001
36
50
  - !ruby/object:Gem::Dependency
37
- name: bundler
38
- type: :development
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
40
52
  none: false
41
53
  requirements:
42
54
  - - ~>
@@ -47,12 +59,12 @@ dependencies:
47
59
  - 0
48
60
  - 0
49
61
  version: 1.0.0
62
+ type: :development
63
+ requirement: *id003
64
+ name: bundler
50
65
  prerelease: false
51
- requirement: *id002
52
66
  - !ruby/object:Gem::Dependency
53
- name: jeweler
54
- type: :development
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
56
68
  none: false
57
69
  requirements:
58
70
  - - ~>
@@ -63,12 +75,12 @@ dependencies:
63
75
  - 5
64
76
  - 2
65
77
  version: 1.5.2
78
+ type: :development
79
+ requirement: *id004
80
+ name: jeweler
66
81
  prerelease: false
67
- requirement: *id003
68
82
  - !ruby/object:Gem::Dependency
69
- name: rcov
70
- type: :development
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
72
84
  none: false
73
85
  requirements:
74
86
  - - ">="
@@ -79,8 +91,10 @@ dependencies:
79
91
  - 9
80
92
  - 8
81
93
  version: 0.9.8
94
+ type: :development
95
+ requirement: *id005
96
+ name: rcov
82
97
  prerelease: false
83
- requirement: *id004
84
98
  description: Simplied interface to use ruby the libvirt ruby library
85
99
  email: ohadlevy@gmail.com
86
100
  executables: []
@@ -103,11 +117,23 @@ files:
103
117
  - lib/virt/guest.rb
104
118
  - lib/virt/host.rb
105
119
  - lib/virt/interface.rb
120
+ - lib/virt/kvm.rb
121
+ - lib/virt/kvm/guest.rb
122
+ - lib/virt/kvm/host.rb
123
+ - lib/virt/kvm/interface.rb
124
+ - lib/virt/kvm/volume.rb
106
125
  - lib/virt/pool.rb
107
126
  - lib/virt/util.rb
127
+ - lib/virt/vmware.rb
128
+ - lib/virt/vmware/guest.rb
129
+ - lib/virt/vmware/host.rb
130
+ - lib/virt/vmware/interface.rb
131
+ - lib/virt/vmware/volume.rb
108
132
  - lib/virt/volume.rb
109
- - templates/guest.xml.erb
110
- - templates/volume.xml.erb
133
+ - templates/kvm/guest.xml.erb
134
+ - templates/kvm/volume.xml.erb
135
+ - templates/vmware/guest.xml.erb
136
+ - templates/vmware/volume.xml.erb
111
137
  - test/connection_test.rb
112
138
  - test/guest_test.rb
113
139
  - test/host_test.rb
@@ -145,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
171
  requirements: []
146
172
 
147
173
  rubyforge_project:
148
- rubygems_version: 1.7.2
174
+ rubygems_version: 1.8.11
149
175
  signing_key:
150
176
  specification_version: 3
151
177
  summary: Simple to use ruby interface to libvirt