vagrant-libvirt 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGELOG.md +5 -0
  2. data/README.md +32 -3
  3. data/lib/vagrant-libvirt.rb +1 -1
  4. data/lib/vagrant-libvirt/action.rb +1 -1
  5. data/lib/vagrant-libvirt/action/connect_libvirt.rb +9 -5
  6. data/lib/vagrant-libvirt/action/create_domain.rb +5 -3
  7. data/lib/vagrant-libvirt/action/create_domain_volume.rb +4 -4
  8. data/lib/vagrant-libvirt/action/create_network_interfaces.rb +20 -19
  9. data/lib/vagrant-libvirt/action/create_networks.rb +3 -3
  10. data/lib/vagrant-libvirt/action/destroy_domain.rb +1 -1
  11. data/lib/vagrant-libvirt/action/destroy_networks.rb +1 -1
  12. data/lib/vagrant-libvirt/action/halt_domain.rb +1 -1
  13. data/lib/vagrant-libvirt/action/handle_box_image.rb +3 -3
  14. data/lib/vagrant-libvirt/action/handle_storage_pool.rb +3 -3
  15. data/lib/vagrant-libvirt/action/is_created.rb +1 -1
  16. data/lib/vagrant-libvirt/action/is_running.rb +1 -1
  17. data/lib/vagrant-libvirt/action/is_suspended.rb +1 -1
  18. data/lib/vagrant-libvirt/action/message_already_created.rb +1 -1
  19. data/lib/vagrant-libvirt/action/message_not_created.rb +1 -1
  20. data/lib/vagrant-libvirt/action/message_not_running.rb +1 -1
  21. data/lib/vagrant-libvirt/action/message_not_suspended.rb +1 -1
  22. data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +1 -1
  23. data/lib/vagrant-libvirt/action/prune_nfs_exports.rb +1 -1
  24. data/lib/vagrant-libvirt/action/read_ssh_info.rb +4 -4
  25. data/lib/vagrant-libvirt/action/read_state.rb +1 -1
  26. data/lib/vagrant-libvirt/action/resume_domain.rb +1 -1
  27. data/lib/vagrant-libvirt/action/set_name_of_domain.rb +2 -2
  28. data/lib/vagrant-libvirt/action/share_folders.rb +1 -1
  29. data/lib/vagrant-libvirt/action/start_domain.rb +1 -1
  30. data/lib/vagrant-libvirt/action/suspend_domain.rb +1 -1
  31. data/lib/vagrant-libvirt/action/sync_folders.rb +1 -1
  32. data/lib/vagrant-libvirt/action/timed_provision.rb +1 -1
  33. data/lib/vagrant-libvirt/action/wait_till_up.rb +1 -1
  34. data/lib/vagrant-libvirt/config.rb +4 -1
  35. data/lib/vagrant-libvirt/errors.rb +1 -1
  36. data/lib/vagrant-libvirt/plugin.rb +5 -5
  37. data/lib/vagrant-libvirt/provider.rb +3 -3
  38. data/lib/vagrant-libvirt/templates/domain.xml.erb +5 -4
  39. data/lib/vagrant-libvirt/templates/interface.xml.erb +3 -0
  40. data/lib/vagrant-libvirt/templates/public_interface.xml.erb +7 -0
  41. data/lib/vagrant-libvirt/util.rb +1 -1
  42. data/lib/vagrant-libvirt/util/collection.rb +1 -1
  43. data/lib/vagrant-libvirt/util/erb_template.rb +1 -1
  44. data/lib/vagrant-libvirt/util/libvirt_util.rb +1 -1
  45. data/lib/vagrant-libvirt/util/timer.rb +1 -1
  46. data/lib/vagrant-libvirt/version.rb +2 -2
  47. data/vagrant-libvirt.gemspec +5 -4
  48. metadata +10 -5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.0.7
2
+
3
+ * Fixed namespace collision with ruby-libvirt library which used by
4
+ vagrant-kvm provider.(by Hiroshi Miura)
5
+
1
6
  # 0.0.6 (Jul 24, 2013)
2
7
 
3
8
  * Synced folder via NFS support.
data/README.md CHANGED
@@ -103,6 +103,7 @@ This provider exposes quite a few provider-specific configuration options:
103
103
  * `memory` - Amount of memory in MBytes. Defaults to 512 if not set.
104
104
  * `cpus` - Number of virtual cpus. Defaults to 1 if not set.
105
105
  * `nested` - [Enable nested virtualization](https://github.com/torvalds/linux/blob/master/Documentation/virtual/kvm/nested-vmx.txt). Default is false.
106
+ * `volume_cache` - Controls the cache mechanism. Possible values are "default", "none", "writethrough", "writeback", "directsync" and "unsafe". [See driver->cache in libvirt documentation](http://libvirt.org/formatdomain.html#elementsDisks).
106
107
 
107
108
  Specific domain settings can be set for each domain separately in multi-VM
108
109
  environment. Example below shows a part of Vagrantfile, where specific options
@@ -116,6 +117,7 @@ Vagrant.configure("2") do |config|
116
117
  domain.memory = 2048
117
118
  domain.cpus = 2
118
119
  domain.nested = true
120
+ domain.volume_cache = 'none'
119
121
  end
120
122
  end
121
123
 
@@ -152,14 +154,25 @@ Vagrant goes through steps below when creating new project:
152
154
  ## Networks
153
155
 
154
156
  Networking features in the form of `config.vm.network` support private networks
155
- concept. No public network or port forwarding are supported in current version
156
- of provider.
157
+ concept. Port Forwarding is currently not supported.
158
+
159
+ Public Network interfaces are currently implemented using the macvtap driver. The macvtap
160
+ driver is only available with the Linux Kernel version >= 2.6.24. See the following libvirt
161
+ documentation for the details of the macvtap usage.
162
+
163
+ http://www.libvirt.org/formatdomain.html#elementsNICSDirect
157
164
 
158
165
  An examples of network interface definitions:
159
166
 
160
167
  ```ruby
168
+ # Private network
161
169
  config.vm.define :test_vm1 do |test_vm1|
162
- test_vm1.vm.network :private_network, :ip => "10.20.30.40",
170
+ test_vm1.vm.network :private_network, :ip => "10.20.30.40"
171
+ end
172
+
173
+ # Public Network
174
+ config.vm.define :test_vm1 do |test_vm1|
175
+ test_vm1.vm.network :public_network, :dev => "eth0", :mode => 'bridge'
163
176
  end
164
177
  ```
165
178
 
@@ -174,8 +187,16 @@ created networks are NATed to outside world, so your VM will be able to connect
174
187
  to the internet (if hypervisor can). And by default, DHCP is offering addresses
175
188
  on newly created networks.
176
189
 
190
+ The second interface is created and bridged into the physical device 'eth0'.
191
+ This mechanism uses the macvtap Kernel driver and therefore does not require
192
+ an existing bridge device. This configuration assumes that DHCP and DNS services
193
+ are being provided by the public network. This public interface should be reachable
194
+ by anyone with access to the public network.
195
+
177
196
  ### Private Network Options
178
197
 
198
+ *Note: These options are not applicable to public network interfaces.*
199
+
179
200
  There is a way to pass specific options for libvirt provider when using
180
201
  `config.vm.network` to configure new network interface. Each parameter name
181
202
  starts with 'libvirt__' string. Here is a list of those options:
@@ -196,6 +217,14 @@ starts with 'libvirt__' string. Here is a list of those options:
196
217
  * `:libvirt__forward_device` - Name of interface/device, where network should
197
218
  be forwarded (NATed or routed). Used only when creating new network. By
198
219
  default, all physical interfaces are used.
220
+ * `:mac` - MAC address for the interface.
221
+
222
+ ### Public Network Options
223
+ * `:dev` - Physical device that the public interface should use. Default is 'eth0'
224
+ * `:mode` - The mode in which the public interface should operate in. Supported
225
+ modes are available from the [libvirt documentation](http://www.libvirt.org/formatdomain.html#elementsNICSDirect).
226
+ Default mode is 'bridge'.
227
+ * `:mac` - MAC address for the interface.
199
228
 
200
229
  ## Obtaining Domain IP Address
201
230
 
@@ -2,7 +2,7 @@ require 'pathname'
2
2
  require 'vagrant-libvirt/plugin'
3
3
 
4
4
  module VagrantPlugins
5
- module Libvirt
5
+ module ProviderLibvirt
6
6
  lib_path = Pathname.new(File.expand_path("../vagrant-libvirt", __FILE__))
7
7
  autoload :Action, lib_path.join("action")
8
8
  autoload :Errors, lib_path.join("errors")
@@ -1,7 +1,7 @@
1
1
  require 'vagrant/action/builder'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # Include the built-in modules so we can use them as top-level things.
7
7
  include Vagrant::Action::Builtin
@@ -2,11 +2,11 @@ require 'fog'
2
2
  require 'log4r'
3
3
 
4
4
  module VagrantPlugins
5
- module Libvirt
5
+ module ProviderLibvirt
6
6
  module Action
7
7
  class ConnectLibvirt
8
8
  def initialize(app, env)
9
- @logger = Log4r::Logger.new("vagrant_libvirt::action::connect_libvirt")
9
+ @logger = Log4r::Logger.new('vagrant_libvirt::action::connect_libvirt')
10
10
  @app = app
11
11
  end
12
12
 
@@ -14,8 +14,8 @@ module VagrantPlugins
14
14
 
15
15
  # If already connected to libvirt, just use it and don't connect
16
16
  # again.
17
- if Libvirt.libvirt_connection
18
- env[:libvirt_compute] = Libvirt.libvirt_connection
17
+ if ProviderLibvirt.libvirt_connection
18
+ env[:libvirt_compute] = ProviderLibvirt.libvirt_connection
19
19
  return @app.call(env)
20
20
  end
21
21
 
@@ -39,7 +39,11 @@ module VagrantPlugins
39
39
  uri << '://'
40
40
  uri << config.host if config.host
41
41
  end
42
+
42
43
  uri << '/system?no_verify=1'
44
+ # set ssh key for access to libvirt host
45
+ home_dir = `echo ${HOME}`.chomp
46
+ uri << "&keyfile=#{home_dir}/.ssh/id_rsa"
43
47
 
44
48
  conn_attr = {}
45
49
  conn_attr[:provider] = 'libvirt'
@@ -64,7 +68,7 @@ module VagrantPlugins
64
68
  raise Errors::FogLibvirtConnectionError,
65
69
  :error_message => e.message
66
70
  end
67
- Libvirt.libvirt_connection = env[:libvirt_compute]
71
+ ProviderLibvirt.libvirt_connection = env[:libvirt_compute]
68
72
 
69
73
  @app.call(env)
70
74
  end
@@ -1,11 +1,11 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
 
7
7
  class CreateDomain
8
- include VagrantPlugins::Libvirt::Util::ErbTemplate
8
+ include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
9
9
 
10
10
  def initialize(app, env)
11
11
  @logger = Log4r::Logger.new("vagrant_libvirt::action::create_domain")
@@ -21,6 +21,7 @@ module VagrantPlugins
21
21
  @cpus = config.cpus
22
22
  @nested = config.nested
23
23
  @memory_size = config.memory*1024
24
+ @domain_volume_cache = config.volume_cache
24
25
 
25
26
  # TODO get type from driver config option
26
27
  @domain_type = 'kvm'
@@ -28,7 +29,7 @@ module VagrantPlugins
28
29
  @os_type = 'hvm'
29
30
 
30
31
  # Get path to domain image.
31
- domain_volume = Libvirt::Util::Collection.find_matching(
32
+ domain_volume = ProviderLibvirt::Util::Collection.find_matching(
32
33
  env[:libvirt_compute].volumes.all, "#{@name}.img")
33
34
  raise Errors::DomainVolumeExists if domain_volume == nil
34
35
  @domain_volume_path = domain_volume.path
@@ -42,6 +43,7 @@ module VagrantPlugins
42
43
  env[:ui].info(" -- Base box: #{env[:machine].box.name}")
43
44
  env[:ui].info(" -- Storage pool: #{env[:machine].provider_config.storage_pool_name}")
44
45
  env[:ui].info(" -- Image: #{@domain_volume_path}")
46
+ env[:ui].info(" -- Volume Cache: #{@domain_volume_cache}")
45
47
 
46
48
  # Create libvirt domain.
47
49
  # Is there a way to tell fog to create new domain with already
@@ -1,14 +1,14 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
 
7
7
  # Create a snapshot of base box image. This new snapshot is just new
8
8
  # cow image with backing storage pointing to base box image. Use this
9
9
  # image as new domain volume.
10
10
  class CreateDomainVolume
11
- include VagrantPlugins::Libvirt::Util::ErbTemplate
11
+ include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
12
12
 
13
13
  def initialize(app, env)
14
14
  @logger = Log4r::Logger.new("vagrant_libvirt::action::create_domain_volume")
@@ -25,12 +25,12 @@ module VagrantPlugins
25
25
  @name = "#{env[:domain_name]}.img"
26
26
 
27
27
  # Verify the volume doesn't exist already.
28
- domain_volume = Libvirt::Util::Collection.find_matching(
28
+ domain_volume = ProviderLibvirt::Util::Collection.find_matching(
29
29
  env[:libvirt_compute].volumes.all, @name)
30
30
  raise Errors::DomainVolumeExists if domain_volume
31
31
 
32
32
  # Get path to backing image - box volume.
33
- box_volume = Libvirt::Util::Collection.find_matching(
33
+ box_volume = ProviderLibvirt::Util::Collection.find_matching(
34
34
  env[:libvirt_compute].volumes.all, env[:box_volume_name])
35
35
  @backing_file = box_volume.path
36
36
 
@@ -3,14 +3,14 @@ require 'vagrant/util/network_ip'
3
3
  require 'vagrant/util/scoped_hash_override'
4
4
 
5
5
  module VagrantPlugins
6
- module Libvirt
6
+ module ProviderLibvirt
7
7
  module Action
8
8
 
9
9
  # Create network interfaces for domain, before domain is running.
10
10
  # Networks for connecting those interfaces should be already prepared.
11
11
  class CreateNetworkInterfaces
12
- include VagrantPlugins::Libvirt::Util::ErbTemplate
13
- include VagrantPlugins::Libvirt::Util::LibvirtUtil
12
+ include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
13
+ include VagrantPlugins::ProviderLibvirt::Util::LibvirtUtil
14
14
  include Vagrant::Util::NetworkIP
15
15
  include Vagrant::Util::ScopedHashOverride
16
16
 
@@ -32,28 +32,16 @@ module VagrantPlugins
32
32
  # Setup list of interfaces before creating them.
33
33
  adapters = []
34
34
 
35
- # Assign main interface for provisioning to first slot.
36
- # Use network 'default' as network for ssh connecting and
37
- # machine provisioning.
38
- #
39
- # TODO Network name with DHCP for first interface should be
40
- # configurable.
41
- adapters[0] = {
42
- :network_name => 'default'
43
- }
35
+ # Vagrant gives you adapter 0 by default
44
36
 
45
37
  # Assign interfaces to slots.
46
38
  env[:machine].config.vm.networks.each do |type, options|
47
- # Only private network is supported now. Port forwarding and public
48
- # network are not supported via libvirt API, so they are not
49
- # implemented in this provider.
50
- next if type != :private_network
51
39
 
52
40
  # Get options for this interface. Options can be specified in
53
41
  # Vagrantfile in short format (:ip => ...), or provider format
54
42
  # (:libvirt__network_name => ...).
55
43
  options = scoped_hash_override(options, :libvirt)
56
- options = { :netmask => '255.255.255.0' }.merge(options)
44
+ options = { :netmask => '255.255.255.0', :iface_type => type }.merge(options)
57
45
 
58
46
  # TODO fill first ifaces with adapter option specified.
59
47
  if options[:adapter]
@@ -63,7 +51,7 @@ module VagrantPlugins
63
51
 
64
52
  free_slot = options[:adapter].to_i
65
53
  else
66
- free_slot = find_empty(adapters, start=1)
54
+ free_slot = find_empty(adapters)
67
55
  raise Errors::InterfaceSlotNotAvailable if free_slot == nil
68
56
  end
69
57
 
@@ -77,13 +65,26 @@ module VagrantPlugins
77
65
  adapters.each_with_index do |iface_configuration, slot_number|
78
66
  @iface_number = slot_number
79
67
  @network_name = iface_configuration[:network_name]
68
+ @mac = iface_configuration.fetch(:mac, false)
69
+ template_name = 'interface'
70
+
71
+ # Configuration for public interfaces which use the macvtap driver
72
+ if iface_configuration[:iface_type] == :public_network
73
+ template_name = 'public_interface'
74
+ @device = iface_configuration.fetch(:dev, 'eth0')
75
+ @mode = iface_configuration.fetch(:mode, 'bridge')
76
+ @logger.info("Setting up public interface using device #{@device} in mode #{@mode}")
77
+ end
80
78
 
81
79
  message = "Creating network interface eth#{@iface_number}"
82
80
  message << " connected to network #{@network_name}."
81
+ if @mac
82
+ message << " Using MAC address: #{@mac}"
83
+ end
83
84
  @logger.info(message)
84
85
 
85
86
  begin
86
- domain.attach_device(to_xml('interface'))
87
+ domain.attach_device(to_xml(template_name))
87
88
  rescue => e
88
89
  raise Errors::AttachDeviceError,
89
90
  :error_message => e.message
@@ -4,14 +4,14 @@ require 'vagrant/util/scoped_hash_override'
4
4
  require 'ipaddr'
5
5
 
6
6
  module VagrantPlugins
7
- module Libvirt
7
+ module ProviderLibvirt
8
8
  module Action
9
9
  # Prepare all networks needed for domain connections.
10
10
  class CreateNetworks
11
11
  include Vagrant::Util::NetworkIP
12
12
  include Vagrant::Util::ScopedHashOverride
13
- include VagrantPlugins::Libvirt::Util::ErbTemplate
14
- include VagrantPlugins::Libvirt::Util::LibvirtUtil
13
+ include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
14
+ include VagrantPlugins::ProviderLibvirt::Util::LibvirtUtil
15
15
 
16
16
  def initialize(app, env)
17
17
  @logger = Log4r::Logger.new("vagrant_libvirt::action::create_networks")
@@ -1,7 +1,7 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  class DestroyDomain
7
7
  def initialize(app, env)
@@ -2,7 +2,7 @@ require 'log4r'
2
2
  require 'nokogiri'
3
3
 
4
4
  module VagrantPlugins
5
- module Libvirt
5
+ module ProviderLibvirt
6
6
  module Action
7
7
  # Destroy all networks created for this specific domain. Skip
8
8
  # removing if network has still active connections.
@@ -1,7 +1,7 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # Halt the domain.
7
7
  class HaltDomain
@@ -1,7 +1,7 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  class HandleBoxImage
7
7
  def initialize(app, env)
@@ -35,7 +35,7 @@ module VagrantPlugins
35
35
  env[:box_volume_name] << '_vagrant_box_image.img'
36
36
 
37
37
  # Don't continue if image already exists in storage pool.
38
- return @app.call(env) if Libvirt::Util::Collection.find_matching(
38
+ return @app.call(env) if ProviderLibvirt::Util::Collection.find_matching(
39
39
  env[:libvirt_compute].volumes.all, env[:box_volume_name])
40
40
 
41
41
  # Box is not available as a storage pool volume. Create and upload
@@ -97,7 +97,7 @@ module VagrantPlugins
97
97
  stream = env[:libvirt_compute].client.stream
98
98
  volume.upload(stream, offset=0, length=image_size)
99
99
 
100
- # Exception Libvirt::RetrieveError can be raised if buffer is
100
+ # Exception ProviderLibvirt::RetrieveError can be raised if buffer is
101
101
  # longer than length accepted by API send function.
102
102
  #
103
103
  # TODO: How to find out if buffer is too large and what is the
@@ -1,10 +1,10 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  class HandleStoragePool
7
- include VagrantPlugins::Libvirt::Util::ErbTemplate
7
+ include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
8
8
 
9
9
  def initialize(app, env)
10
10
  @logger = Log4r::Logger.new("vagrant_libvirt::action::handle_storage_pool")
@@ -16,7 +16,7 @@ module VagrantPlugins
16
16
  config = env[:machine].provider_config
17
17
 
18
18
  # Check for storage pool, where box image should be created
19
- fog_pool = Libvirt::Util::Collection.find_matching(
19
+ fog_pool = ProviderLibvirt::Util::Collection.find_matching(
20
20
  env[:libvirt_compute].pools.all, config.storage_pool_name)
21
21
  return @app.call(env) if fog_pool
22
22
 
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  # This can be used with "Call" built-in to check if the machine
5
5
  # is created and branch in the middleware.
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  # This can be used with "Call" built-in to check if the machine
5
5
  # is running and branch in the middleware.
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  # This can be used with "Call" built-in to check if the machine
5
5
  # is suspended and branch in the middleware.
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  class MessageAlreadyCreated
5
5
  def initialize(app, env)
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  class MessageNotCreated
5
5
  def initialize(app, env)
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  class MessageNotRunning
5
5
  def initialize(app, env)
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
  class MessageNotSuspended
5
5
  def initialize(app, env)
@@ -1,6 +1,6 @@
1
1
  require 'nokogiri'
2
2
  module VagrantPlugins
3
- module Libvirt
3
+ module ProviderLibvirt
4
4
  module Action
5
5
  class PrepareNFSSettings
6
6
  def initialize(app,env)
@@ -1,6 +1,6 @@
1
1
  require 'yaml'
2
2
  module VagrantPlugins
3
- module Libvirt
3
+ module ProviderLibvirt
4
4
  module Action
5
5
  class PruneNFSExports
6
6
 
@@ -1,7 +1,7 @@
1
1
  require "log4r"
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # This action reads the SSH info for the machine and puts it into the
7
7
  # `:machine_ssh_info` key in the environment.
@@ -12,8 +12,8 @@ module VagrantPlugins
12
12
  end
13
13
 
14
14
  def call(env)
15
- env[:machine_ssh_info] = read_ssh_info(
16
- env[:libvirt_compute], env[:machine])
15
+ env[:machine_ssh_info] = read_ssh_info(env[:libvirt_compute],
16
+ env[:machine])
17
17
 
18
18
  @app.call(env)
19
19
  end
@@ -53,7 +53,7 @@ module VagrantPlugins
53
53
  end
54
54
 
55
55
  ssh_info
56
- end
56
+ end
57
57
  end
58
58
  end
59
59
  end
@@ -1,7 +1,7 @@
1
1
  require "log4r"
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # This action reads the state of the machine and puts it in the
7
7
  # `:machine_state_id` key in the environment.
@@ -1,7 +1,7 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # Resume suspended domain.
7
7
  class ResumeDomain
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Action
4
4
 
5
5
  # Setup name for domain and domain volumes.
@@ -14,7 +14,7 @@ module VagrantPlugins
14
14
  env[:domain_name] << "_#{Time.now.to_i}"
15
15
 
16
16
  # Check if the domain name is not already taken
17
- domain = Libvirt::Util::Collection.find_matching(
17
+ domain = ProviderLibvirt::Util::Collection.find_matching(
18
18
  env[:libvirt_compute].servers.all, env[:domain_name])
19
19
  if domain != nil
20
20
  raise Vagrant::Errors::DomainNameExists,
@@ -3,7 +3,7 @@ require "pathname"
3
3
  require "log4r"
4
4
 
5
5
  module VagrantPlugins
6
- module Libvirt
6
+ module ProviderLibvirt
7
7
  module Action
8
8
  class ShareFolders
9
9
  def initialize(app, env)
@@ -1,7 +1,7 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
 
7
7
  # Just start the domain.
@@ -1,7 +1,7 @@
1
1
  require 'log4r'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # Suspend domain.
7
7
  class SuspendDomain
@@ -2,7 +2,7 @@ require "log4r"
2
2
  require "vagrant/util/subprocess"
3
3
 
4
4
  module VagrantPlugins
5
- module Libvirt
5
+ module ProviderLibvirt
6
6
  module Action
7
7
  # This middleware uses `rsync` to sync the folders over to the
8
8
  # libvirt domain.
@@ -1,7 +1,7 @@
1
1
  require "vagrant-libvirt/util/timer"
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Action
6
6
  # This is the same as the builtin provision except it times the
7
7
  # provisioner runs.
@@ -3,7 +3,7 @@ require 'vagrant-libvirt/util/timer'
3
3
  require 'vagrant/util/retryable'
4
4
 
5
5
  module VagrantPlugins
6
- module Libvirt
6
+ module ProviderLibvirt
7
7
  module Action
8
8
 
9
9
  # Wait till domain is started, till it obtains an IP address and is
@@ -1,7 +1,7 @@
1
1
  require 'vagrant'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  class Config < Vagrant.plugin('2', :config)
6
6
  # A hypervisor name to access via Libvirt.
7
7
  attr_accessor :driver
@@ -26,6 +26,7 @@ module VagrantPlugins
26
26
  attr_accessor :memory
27
27
  attr_accessor :cpus
28
28
  attr_accessor :nested
29
+ attr_accessor :volume_cache
29
30
 
30
31
  def initialize
31
32
  @driver = UNSET_VALUE
@@ -39,6 +40,7 @@ module VagrantPlugins
39
40
  @memory = UNSET_VALUE
40
41
  @cpus = UNSET_VALUE
41
42
  @nested = UNSET_VALUE
43
+ @volume_cache = UNSET_VALUE
42
44
  end
43
45
 
44
46
  def finalize!
@@ -53,6 +55,7 @@ module VagrantPlugins
53
55
  @memory = 512 if @memory == UNSET_VALUE
54
56
  @cpus = 1 if @cpus == UNSET_VALUE
55
57
  @nested = false if @nested == UNSET_VALUE
58
+ @volume_cache = 'default' if @volume_cache == UNSET_VALUE
56
59
  end
57
60
 
58
61
  def validate(machine)
@@ -1,7 +1,7 @@
1
1
  require 'vagrant'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Errors
6
6
  class VagrantLibvirtError < Vagrant::Errors::VagrantError
7
7
  error_namespace("vagrant_libvirt.errors")
@@ -12,16 +12,16 @@ if Vagrant::VERSION < '1.1.0'
12
12
  end
13
13
 
14
14
  module VagrantPlugins
15
- module Libvirt
15
+ module ProviderLibvirt
16
16
  class Plugin < Vagrant.plugin('2')
17
- name "libvirt"
17
+ name 'libvirt'
18
18
  description <<-DESC
19
19
  Vagrant plugin to manage VMs in libvirt.
20
20
  DESC
21
21
 
22
22
 
23
- config("libvirt", :provider) do
24
- require_relative "config"
23
+ config('libvirt', :provider) do
24
+ require_relative 'config'
25
25
  Config
26
26
  end
27
27
 
@@ -37,7 +37,7 @@ module VagrantPlugins
37
37
 
38
38
  # This initializes the internationalization strings.
39
39
  def self.setup_i18n
40
- I18n.load_path << File.expand_path("locales/en.yml", Libvirt.source_root)
40
+ I18n.load_path << File.expand_path("locales/en.yml", ProviderLibvirt.source_root)
41
41
  I18n.reload!
42
42
  end
43
43
 
@@ -1,7 +1,7 @@
1
1
  require 'vagrant'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
 
6
6
  # This is the base class for a provider for the V2 API. A provider
7
7
  # is responsible for creating compute resources to match the
@@ -45,7 +45,7 @@ module VagrantPlugins
45
45
  # :username => "mitchellh",
46
46
  # :private_key_path => "/path/to/my/key"
47
47
  #}
48
- env = @machine.action("read_ssh_info")
48
+ env = @machine.action('read_ssh_info')
49
49
  env[:machine_ssh_info]
50
50
  end
51
51
 
@@ -55,7 +55,7 @@ module VagrantPlugins
55
55
  # Run a custom action we define called "read_state" which does
56
56
  # what it says. It puts the state in the `:machine_state_id`
57
57
  # key in the environment.
58
- env = @machine.action("read_state")
58
+ env = @machine.action('read_state')
59
59
 
60
60
  state_id = env[:machine_state_id]
61
61
 
@@ -4,9 +4,10 @@
4
4
  <vcpu><%= @cpus %></vcpu>
5
5
 
6
6
  <% if @nested %>
7
- <cpu match='exact'>
8
- <model>core2duo</model>
9
- <feature policy='require' name='vmx'/>
7
+ <cpu mode='host-passthrough'>
8
+ <model fallback='allow'>qemu64</model>
9
+ <feature policy='optional' name='vmx'/>
10
+ <feature policy='optional' name='svm'/>
10
11
  </cpu>
11
12
  <% end %>
12
13
 
@@ -22,7 +23,7 @@
22
23
  <clock offset='utc'/>
23
24
  <devices>
24
25
  <disk type='file' device='disk'>
25
- <driver name='qemu' type='qcow2'/>
26
+ <driver name='qemu' type='qcow2' cache='<%= @domain_volume_cache %>'/>
26
27
  <source file='<%= @domain_volume_path %>'/>
27
28
  <%# we need to ensure a unique target dev -%>
28
29
  <target dev='vda' bus='virtio'/>
@@ -1,5 +1,8 @@
1
1
  <interface type='network'>
2
2
  <source network='<%= @network_name %>'/>
3
+ <% if @mac %>
4
+ <mac address='<%= @mac %>'/>
5
+ <% end %>
3
6
  <target dev='vnet<%= @iface_number %>'/>
4
7
  <alias name='net<%= @iface_number %>'/>
5
8
  <model type='virtio'/>
@@ -0,0 +1,7 @@
1
+ <interface type='direct'>
2
+ <% if @mac %>
3
+ <mac address='<%= @mac %>'/>
4
+ <% end %>
5
+ <source dev='<%= @device %>' mode='<%= @mode %>'/>
6
+ </interface>
7
+
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Util
4
4
  autoload :ErbTemplate, 'vagrant-libvirt/util/erb_template'
5
5
  autoload :Collection, 'vagrant-libvirt/util/collection'
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Util
4
4
  module Collection
5
5
 
@@ -1,7 +1,7 @@
1
1
  require 'erb'
2
2
 
3
3
  module VagrantPlugins
4
- module Libvirt
4
+ module ProviderLibvirt
5
5
  module Util
6
6
  module ErbTemplate
7
7
 
@@ -2,7 +2,7 @@ require 'nokogiri'
2
2
  require 'vagrant/util/network_ip'
3
3
 
4
4
  module VagrantPlugins
5
- module Libvirt
5
+ module ProviderLibvirt
6
6
  module Util
7
7
  module LibvirtUtil
8
8
  include Vagrant::Util::NetworkIP
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
2
+ module ProviderLibvirt
3
3
  module Util
4
4
  class Timer
5
5
  # A basic utility method that times the execution of the given
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
- module Libvirt
3
- VERSION = "0.0.6"
2
+ module ProviderLibvirt
3
+ VERSION = "0.0.7"
4
4
  end
5
5
  end
@@ -2,8 +2,9 @@
2
2
  require File.expand_path('../lib/vagrant-libvirt/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Lukas Stanek"]
6
- gem.email = ["ls@elostech.cz"]
5
+ gem.authors = ['Lukas Stanek','Dima Vasilets']
6
+ gem.email = ['ls@elostech.cz','pronix.service@gmail.com']
7
+ gem.license = 'MIT'
7
8
  gem.description = %q{Vagrant provider for libvirt.}
8
9
  gem.summary = %q{Vagrant provider for libvirt.}
9
10
  gem.homepage = "https://github.com/pradels/vagrant-libvirt"
@@ -13,9 +14,9 @@ Gem::Specification.new do |gem|
13
14
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
15
  gem.name = "vagrant-libvirt"
15
16
  gem.require_paths = ["lib"]
16
- gem.version = VagrantPlugins::Libvirt::VERSION
17
+ gem.version = VagrantPlugins::ProviderLibvirt::VERSION
17
18
 
18
- gem.add_runtime_dependency "fog", "~> 1.10.0"
19
+ gem.add_runtime_dependency "fog", "1.10.0"
19
20
  gem.add_runtime_dependency "ruby-libvirt", "~> 0.4.0"
20
21
 
21
22
  gem.add_development_dependency "rake"
metadata CHANGED
@@ -1,22 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-libvirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Lukas Stanek
9
+ - Dima Vasilets
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-07-24 00:00:00.000000000 Z
13
+ date: 2013-09-23 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: fog
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
- - - ~>
20
+ - - '='
20
21
  - !ruby/object:Gem::Version
21
22
  version: 1.10.0
22
23
  type: :runtime
@@ -24,7 +25,7 @@ dependencies:
24
25
  version_requirements: !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
- - - ~>
28
+ - - '='
28
29
  - !ruby/object:Gem::Version
29
30
  version: 1.10.0
30
31
  - !ruby/object:Gem::Dependency
@@ -62,6 +63,7 @@ dependencies:
62
63
  description: Vagrant provider for libvirt.
63
64
  email:
64
65
  - ls@elostech.cz
66
+ - pronix.service@gmail.com
65
67
  executables: []
66
68
  extensions: []
67
69
  extra_rdoc_files: []
@@ -114,6 +116,7 @@ files:
114
116
  - lib/vagrant-libvirt/templates/domain.xml.erb
115
117
  - lib/vagrant-libvirt/templates/interface.xml.erb
116
118
  - lib/vagrant-libvirt/templates/private_network.xml.erb
119
+ - lib/vagrant-libvirt/templates/public_interface.xml.erb
117
120
  - lib/vagrant-libvirt/templates/volume_snapshot.xml.erb
118
121
  - lib/vagrant-libvirt/util.rb
119
122
  - lib/vagrant-libvirt/util/collection.rb
@@ -125,7 +128,8 @@ files:
125
128
  - tools/prepare_redhat_for_box.sh
126
129
  - vagrant-libvirt.gemspec
127
130
  homepage: https://github.com/pradels/vagrant-libvirt
128
- licenses: []
131
+ licenses:
132
+ - MIT
129
133
  post_install_message:
130
134
  rdoc_options: []
131
135
  require_paths:
@@ -149,3 +153,4 @@ signing_key:
149
153
  specification_version: 3
150
154
  summary: Vagrant provider for libvirt.
151
155
  test_files: []
156
+ has_rdoc: