virt 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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