vagrant-libvirt 0.0.28 → 0.0.29

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.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 82c6474c93d131d101b39a936190bb3d1960677f
4
- data.tar.gz: d0b5838d5d61de80c6b527b777307b8ac69eece0
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MWQxNDI3NzdkZmM1ZTBlNjZjOWQyODk4MmU1Mjk3YzEwOWNjYjhkOQ==
5
+ data.tar.gz: !binary |-
6
+ NGEzYjM1YTYyZjE1ZGUxNDlhYzIzMDZhMDRjN2VhNjFlN2FjZjA5Yg==
5
7
  SHA512:
6
- metadata.gz: 6193dfa786543be1441b66f51bc52a6b2629157c21d13377396e1d9995935f7dd34b57f3df0972112acaa019ad5e233034c5dc0bcccc66dbbed8d013bf68a077
7
- data.tar.gz: 4b4beb87324784af102729adee0ba923746c601b1046ae286b800403f450a862d8a14a528f428eeb5775984465e047c0d8ce6125b6c19e5082f5d102052f4404
8
+ metadata.gz: !binary |-
9
+ Nzc4ZTMyODA1ZmFjNjNiZTU5ODU1MzBlN2FiODQ2YmFmMDRmMTViN2VjY2Vl
10
+ NTNjZDkxYTE0NjdjOGNhMWIxNjUxN2Y5YzQ0MzZmN2I0ZThmMTVkMTNmNTI2
11
+ YzgyOTQ3ZWVkYTNiZjhiYTVlMzVjMjI0NDA2NmZkMWQ5MDQ5MTY=
12
+ data.tar.gz: !binary |-
13
+ NmYzNWExNWI2NjdkNGM4ZjliMTc4YzFmOWU0N2UyYjY0YjkyZGRlN2EzYmMw
14
+ NGI5Yjk4NjY5YTVhYzQ2NjhlYmNhYzhiZmQwMGE5ZDY2ZDc4ODNmOTAyMGQx
15
+ MGFlNjE4ZDgxM2ZlOGIzOWU5ODZiOGI2NjAyOWVmYTJiMTU0ZWI=
data/README.md CHANGED
@@ -10,7 +10,7 @@ welcome and can help a lot :-)
10
10
  ## Features
11
11
 
12
12
  * Control local Libvirt hypervisors.
13
- * Vagrant `up`, `destroy`, `suspend`, `resume`, `halt`, `ssh`, `reload` and `provision` commands.
13
+ * Vagrant `up`, `destroy`, `suspend`, `resume`, `halt`, `ssh`, `reload`, `package` and `provision` commands.
14
14
  * Upload box image (qcow2 format) to Libvirt storage pool.
15
15
  * Create volume as COW diff image for domains.
16
16
  * Create private networks.
@@ -51,7 +51,14 @@ $ sudo apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev
51
51
 
52
52
  In RedHat, Centos, Fedora, ...
53
53
  ```
54
- # yum install libxslt-devel libxml2-devel libvirt-devel
54
+ # yum install libxslt-devel libxml2-devel libvirt-devel libguestfs-tools-c
55
+ ```
56
+
57
+ If have problem with installation - check your linker. It should be ld.gold:
58
+ ```
59
+ sudo alternatives --set ld /usr/bin/ld.gold
60
+ # OR
61
+ sudo ln -fs /usr/bin/ld.gold /usr/bin/ld
55
62
  ```
56
63
 
57
64
  ## Vagrant Project Preparation
@@ -64,7 +71,7 @@ a `config.vm.provider` block. So first, add Libvirt box using any name you
64
71
  want. This is just an example of Libvirt CentOS 6.4 box available:
65
72
 
66
73
  ```
67
- vagrant box add centos64 http://citozin.com/fedora21.box
74
+ vagrant box add fedora21 http://citozin.com/fedora21.box
68
75
  # or
69
76
  vagrant box add centos64 http://citozin.com/centos64.box
70
77
  ```
@@ -162,6 +169,7 @@ end
162
169
  * `keymap` - Set keymap for vm. default: en-us
163
170
  * `video_vram` - Used by some graphics card types to vary the amount of RAM dedicated to video. Defaults to 9216.
164
171
  * `machine` - Sets machine type. Equivalent to qemu `-machine`. Use `qemu-system-x86_64 -machine help` to get a list of supported machines.
172
+ * `machine_arch` - Sets machine architecture. This helps libvirt to determine the correct emulator type. Possible values depend on your version of qemu. For possible values, see which emulator executable `qemu-system-*` your system provides. Common examples are `aarch64`, `alpha`, `arm`, `cris`, `i386`, `lm32`, `m68k`, `microblaze`, `microblazeel`, `mips`, `mips64`, `mips64el`, `mipsel`, `moxie`, `or32`, `ppc`, `ppc64`, `ppcemb`, `s390x`, `sh4`, `sh4eb`, `sparc`, `sparc64`, `tricore`, `unicore32`, `x86_64`, `xtensa`, `xtensaeb`.
165
173
 
166
174
 
167
175
  Specific domain settings can be set for each domain separately in multi-VM
@@ -369,6 +377,13 @@ it an setting the type, e.g.
369
377
 
370
378
  config.vm.synced_folder './', '/vagrant', type: 'rsync'
371
379
 
380
+ or
381
+
382
+ config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "squash", owner: "vagrant"
383
+
384
+ **SECURITY NOTE:** for remote libvirt, nfs synced folders requires a bridged public network interface and you must connect to libvirt via ssh.
385
+
386
+
372
387
  ## Customized Graphics
373
388
 
374
389
  vagrant-libvirt supports customizing the display and video settings of the
@@ -448,4 +463,3 @@ IMPORTANT NOTE: bundle is crucial. You need to use bundled vagrant.
448
463
  3. Commit your changes (`git commit -am 'Add some feature'`).
449
464
  4. Push to the branch (`git push origin my-new-feature`).
450
465
  5. Create new Pull Request.
451
-
@@ -31,23 +31,18 @@ module VagrantPlugins
31
31
  b2.use CreateDomain
32
32
 
33
33
  b2.use Provision
34
- b2.use CreateNetworks
35
- b2.use CreateNetworkInterfaces
36
-
37
34
  b2.use PrepareNFSValidIds
38
35
  b2.use SyncedFolderCleanup
39
36
  b2.use SyncedFolders
40
-
41
- b2.use StartDomain
42
- b2.use WaitTillUp
37
+ b2.use PrepareNFSSettings
38
+ b2.use ShareFolders
39
+ b2.use CreateNetworks
40
+ b2.use CreateNetworkInterfaces
43
41
 
44
42
  b2.use StartDomain
45
43
  b2.use WaitTillUp
46
44
 
47
45
  b2.use ForwardPorts
48
-
49
- b2.use PrepareNFSSettings
50
- b2.use ShareFolders
51
46
  b2.use SetHostname
52
47
  # b2.use SyncFolders
53
48
  else
@@ -147,8 +142,10 @@ module VagrantPlugins
147
142
 
148
143
  # not implemented and looks like not require
149
144
  def self.action_package
150
- lambda do |env|
151
- raise Errors::PackageNotSupported
145
+ Vagrant::Action::Builder.new.tap do |b|
146
+ b.use ConfigValidate
147
+ b.use ConnectLibvirt
148
+ b.use PackageDomain
152
149
  end
153
150
  end
154
151
 
@@ -320,6 +317,7 @@ module VagrantPlugins
320
317
 
321
318
  action_root = Pathname.new(File.expand_path('../action', __FILE__))
322
319
  autoload :ConnectLibvirt, action_root.join('connect_libvirt')
320
+ autoload :PackageDomain, action_root.join('package_domain')
323
321
  autoload :CreateDomain, action_root.join('create_domain')
324
322
  autoload :CreateDomainVolume, action_root.join('create_domain_volume')
325
323
  autoload :CreateNetworkInterfaces, action_root.join('create_network_interfaces')
@@ -34,6 +34,7 @@ module VagrantPlugins
34
34
  @cpus = config.cpus.to_i
35
35
  @cpu_mode = config.cpu_mode
36
36
  @machine_type = config.machine_type
37
+ @machine_arch = config.machine_arch
37
38
  @disk_bus = config.disk_bus
38
39
  @nested = config.nested
39
40
  @memory_size = config.memory.to_i * 1024
@@ -4,7 +4,7 @@ module VagrantPlugins
4
4
  module ProviderLibvirt
5
5
  module Action
6
6
  class DestroyDomain
7
- def initialize(app, env)
7
+ def initialize(app, _env)
8
8
  @logger = Log4r::Logger.new('vagrant_libvirt::action::destroy_domain')
9
9
  @app = app
10
10
  end
@@ -17,7 +17,8 @@ module VagrantPlugins
17
17
  # Fog libvirt currently doesn't support snapshots. Use
18
18
  # ruby-libvirt client directly. Note this is racy, see
19
19
  # http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotListNames
20
- libvirt_domain = env[:libvirt_compute].client.lookup_domain_by_uuid(env[:machine].id)
20
+ libvirt_domain = env[:libvirt_compute].client.lookup_domain_by_uuid(
21
+ env[:machine].id)
21
22
  libvirt_domain.list_snapshots.each do |name|
22
23
  @logger.info("Deleting snapshot '#{name}'")
23
24
  begin
@@ -36,14 +37,30 @@ module VagrantPlugins
36
37
  domain.destroy(destroy_volumes: false)
37
38
 
38
39
  env[:machine].provider_config.disks.each do |disk|
39
- next if disk[:allow_existing] # shared disks remove only manualy or ???
40
- diskname = libvirt_domain.name + "-" + disk[:device] + ".raw"
40
+ # shared disks remove only manualy or ???
41
+ next if disk[:allow_existing]
42
+ diskname = libvirt_domain.name + '-' + disk[:device] + '.' + disk[:type].to_s
41
43
  # diskname is uniq
42
- env[:libvirt_compute].volumes.all.select{|x| x.name == diskname }.first.destroy
44
+ libvirt_disk = domain.volumes.select do |x|
45
+ x.name == diskname
46
+ end.first
47
+ if libvirt_disk
48
+ libvirt_disk.destroy
49
+ elsif disk[:path]
50
+ poolname = env[:machine].provider_config.storage_pool_name
51
+ libvirt_disk = domain.volumes.select do |x|
52
+ # FIXME can remove pool/target.img and pool/123/target.img
53
+ x.path =~ /\/#{disk[:path]}$/ && x.pool_name == poolname
54
+ end.first
55
+ libvirt_disk.destroy if libvirt_disk
56
+ end
43
57
  end
44
58
 
45
- #remove root storage
46
- env[:libvirt_compute].volumes.all.select{|x| x.name == libvirt_domain.name + ".img" }.first.destroy
59
+ # remove root storage
60
+ root_disk = domain.volumes.select do |x|
61
+ x.name == libvirt_domain.name + '.img'
62
+ end.first
63
+ root_disk.destroy if root_disk
47
64
  end
48
65
 
49
66
  @app.call(env)
@@ -0,0 +1,83 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module ProviderLibvirt
5
+ module Action
6
+ # Action for create new box for libvirt provider
7
+ class PackageDomain
8
+ def initialize(app, env)
9
+ @logger = Log4r::Logger.new('vagrant_libvirt::action::package_domain')
10
+ @app = app
11
+ env['package.files'] ||= {}
12
+ env['package.output'] ||= 'package.box'
13
+ end
14
+
15
+ def call(env)
16
+ env[:ui].info(I18n.t('vagrant_libvirt.package_domain'))
17
+ libvirt_domain = env[:libvirt_compute].client.lookup_domain_by_uuid(
18
+ env[:machine].id)
19
+ domain = env[:libvirt_compute].servers.get(env[:machine].id.to_s)
20
+ root_disk = domain.volumes.select do |x|
21
+ x.name == libvirt_domain.name + '.img'
22
+ end.first
23
+ boxname = env['package.output']
24
+ raise "#{boxname}: Already exists" if File.exists?(boxname)
25
+ @tmp_dir = Dir.pwd + '/_tmp_package'
26
+ @tmp_img = @tmp_dir + '/box.img'
27
+ Dir.mkdir(@tmp_dir)
28
+ if File.readable?(root_disk.path)
29
+ backing = `qemu-img info "#{root_disk.path}" | grep 'backing file:' | cut -d ':' -f2`.chomp
30
+ else
31
+ env[:ui].error("Require set read access to #{root_disk.path}. sudo chmod a+r #{root_disk.path}")
32
+ FileUtils.rm_rf(@tmp_dir)
33
+ raise 'Have no access'
34
+ end
35
+ env[:ui].info('Image has backing image, copying image and rebasing ...')
36
+ FileUtils.cp(root_disk.path, @tmp_img)
37
+ `qemu-img rebase -p -b "" #{@tmp_img}`
38
+ # remove hw association with interface
39
+ # working for centos with lvs default disks
40
+ `virt-sysprep --no-logfile -a #{@tmp_img} `
41
+ Dir.chdir(@tmp_dir)
42
+ img_size = `qemu-img info #{@tmp_img} | grep 'virtual size' | awk '{print $3;}' | tr -d 'G'`.chomp
43
+ File.write(@tmp_dir + '/metadata.json', metadata_content(img_size))
44
+ File.write(@tmp_dir + '/Vagrantfile',vagrantfile_content)
45
+ assebmle_box(boxname)
46
+ FileUtils.mv(@tmp_dir + '/' + boxname, '../' + boxname)
47
+ FileUtils.rm_rf(@tmp_dir)
48
+ env[:ui].info('Box created')
49
+ env[:ui].info('You can now add the box:')
50
+ env[:ui].info("vagrant box add #{boxname} --name any_comfortable_name")
51
+ @app.call(env)
52
+ end
53
+
54
+ def assebmle_box(boxname)
55
+ `tar cvzf "#{boxname}" --totals ./metadata.json ./Vagrantfile ./box.img`
56
+ end
57
+
58
+ def vagrantfile_content
59
+ <<-EOF
60
+ Vagrant.configure("2") do |config|
61
+ config.vm.provider :libvirt do |libvirt|
62
+ libvirt.driver = "kvm"
63
+ libvirt.host = ""
64
+ libvirt.connect_via_ssh = false
65
+ libvirt.storage_pool_name = "default"
66
+ end
67
+ end
68
+ EOF
69
+ end
70
+
71
+ def metadata_content(filesize)
72
+ <<-EOF
73
+ {
74
+ "provider": "libvirt",
75
+ "format": "qcow2",
76
+ "virtual_size": #{filesize}
77
+ }
78
+ EOF
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,10 +1,13 @@
1
1
  require 'nokogiri'
2
+ require 'socket'
3
+ require 'timeout'
4
+
2
5
  module VagrantPlugins
3
6
  module ProviderLibvirt
4
7
  module Action
5
8
  class PrepareNFSSettings
6
9
  include Vagrant::Action::Builtin::MixinSyncedFolders
7
-
10
+
8
11
  def initialize(app,env)
9
12
  @app = app
10
13
  @logger = Log4r::Logger.new("vagrant::action::vm::nfs")
@@ -16,8 +19,8 @@ module VagrantPlugins
16
19
 
17
20
  if using_nfs?
18
21
  @logger.info("Using NFS, preparing NFS settings by reading host IP and machine IP")
19
- env[:nfs_host_ip] = read_host_ip(env[:machine],env)
20
- env[:nfs_machine_ip] = env[:machine].ssh_info[:host]
22
+ env[:nfs_host_ip] = read_host_ip(env[:machine])
23
+ env[:nfs_machine_ip] = read_machine_ip(env[:machine])
21
24
 
22
25
  @logger.info("host IP: #{env[:nfs_host_ip]} machine IP: #{env[:nfs_machine_ip]}")
23
26
 
@@ -32,37 +35,54 @@ module VagrantPlugins
32
35
  !!synced_folders(@machine)[:nfs]
33
36
  end
34
37
 
35
- # Returns the IP address of the first host only network adapter
38
+ # Returns the IP address of the host
36
39
  #
37
40
  # @param [Machine] machine
38
41
  # @return [String]
39
- def read_host_ip(machine,env)
40
- nets = env[:libvirt_compute].list_networks
41
- if nets.size == 1
42
- net = nets.first
43
- else
44
- domain = env[:libvirt_compute].servers.get(machine.id.to_s)
45
- xml=Nokogiri::XML(domain.to_xml)
46
- networkname = xml.xpath('/domain/devices/interface/source').first.attributes['network'].value.to_s
47
- @logger.info("Using network named #{networkname}")
48
- net = env[:libvirt_compute].list_networks.find {|netw| netw[:name] == networkname}
42
+ def read_host_ip(machine)
43
+ UDPSocket.open do |s|
44
+ s.connect(machine.ssh_info[:host], 1)
45
+ s.addr.last
49
46
  end
50
- # FIXME better implement by libvirt xml parsing
51
- `ip addr show | grep -A 2 #{net[:bridge_name]} | grep -i 'inet ' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1`.chomp
52
47
  end
53
48
 
54
- # Returns the IP address of the guest by looking at the first
55
- # enabled host only network.
49
+ # Returns the IP address of the guest
56
50
  #
51
+ # @param [Machine] machine
57
52
  # @return [String]
58
53
  def read_machine_ip(machine)
59
- machine.config.vm.networks.each do |type, options|
60
- if type == :private_network && options[:ip].is_a?(String)
61
- return options[:ip]
62
- end
54
+ # check host only ip
55
+ ssh_host = machine.ssh_info[:host]
56
+ return ssh_host if ping(ssh_host)
57
+
58
+ # check other ips
59
+ command = "ip addr show | grep -i 'inet ' | grep -v '127.0.0.1' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1"
60
+ result = ""
61
+ machine.communicate.execute(command) do |type, data|
62
+ result << data if type == :stdout
63
63
  end
64
64
 
65
- nil
65
+ ips = result.chomp.split("\n")
66
+ @logger.info("guest IPs: #{ips.join(', ')}")
67
+ ips.each do |ip|
68
+ next if ip == ssh_host
69
+ return ip if ping(ip)
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ # Check if we can open a connection to the host
76
+ def ping(host, timeout = 3)
77
+ timeout(timeout) do
78
+ s = TCPSocket.new(host, 'echo')
79
+ s.close
80
+ end
81
+ true
82
+ rescue Errno::ECONNREFUSED
83
+ true
84
+ rescue Timeout::Error, StandardError
85
+ false
66
86
  end
67
87
  end
68
88
  end
@@ -48,8 +48,8 @@ module VagrantPlugins
48
48
  :forward_agent => machine.config.ssh.forward_agent,
49
49
  :forward_x11 => machine.config.ssh.forward_x11,
50
50
  }
51
-
52
- ssh_info[:proxy_command] = "ssh '#{machine.provider_config.host}' -l '#{machine.provider_config.username}' nc %h %p" if machine.provider_config.connect_via_ssh
51
+
52
+ ssh_info[:proxy_command] = "ssh '#{machine.provider_config.host}' -l '#{machine.provider_config.username}' -i '#{machine.provider_config.id_ssh_key_file}' nc %h %p" if machine.provider_config.connect_via_ssh
53
53
 
54
54
  ssh_info
55
55
  end
@@ -1,74 +1,65 @@
1
- require "log4r"
1
+ require 'log4r'
2
2
  require 'ostruct'
3
3
  require 'nokogiri'
4
4
 
5
-
6
- require "vagrant/util/subprocess"
7
- require "vagrant/errors"
8
- require "vagrant-libvirt/errors"
5
+ require 'vagrant/util/subprocess'
6
+ require 'vagrant/errors'
7
+ require 'vagrant-libvirt/errors'
9
8
  # require_relative "helper"
10
9
 
11
10
  module VagrantPlugins
12
11
  module SyncedFolder9p
13
- class SyncedFolder < Vagrant.plugin("2", :synced_folder)
12
+ class SyncedFolder < Vagrant.plugin('2', :synced_folder)
14
13
  include Vagrant::Util
15
14
  include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
16
15
 
17
16
  def initialize(*args)
18
17
  super
19
-
20
- @logger = Log4r::Logger.new("vagrant_libvirt::synced_folders::9p")
18
+ @logger = Log4r::Logger.new('vagrant_libvirt::synced_folders::9p')
21
19
  end
22
20
 
23
- def usable?(machine, raise_error=false)
21
+ def usable?(machine, raise_error = false)
24
22
  # bail now if not using libvirt since checking version would throw error
25
23
  return false unless machine.provider_name == :libvirt
26
24
 
27
25
  # <filesystem/> support in device attach/detach introduced in 1.2.2
28
26
  # version number format is major * 1,000,000 + minor * 1,000 + release
29
27
  libvirt_version = ProviderLibvirt.libvirt_connection.client.libversion
30
- if libvirt_version >= 1002002
31
- return true
32
- else
33
- return false
34
- end
28
+ libvirt_version >= 1_002_002
35
29
  end
36
30
 
37
- def prepare(machine, folders, opts)
38
-
39
- raise Vagrant::Errors::Error("No libvirt connection") if ProviderLibvirt.libvirt_connection.nil?
40
-
31
+ def prepare(machine, folders, _opts)
32
+ raise Vagrant::Errors::Error('No libvirt connection') if ProviderLibvirt.libvirt_connection.nil?
41
33
  @conn = ProviderLibvirt.libvirt_connection.client
42
34
 
43
35
  begin
44
36
  # loop through folders
45
37
  folders.each do |id, folder_opts|
46
- folder_opts.merge!({ :accessmode => "passthrough",
47
- :readonly => nil }) { |_k, ov, _nv| ov }
38
+ folder_opts.merge!({ target: id,
39
+ accessmode: 'passthrough',
40
+ readonly: nil }) { |_k, ov, _nv| ov }
48
41
  machine.ui.info "================\nMachine id: #{machine.id}\nShould be mounting folders\n #{id}, opts: #{folder_opts}"
49
-
50
- xml = to_xml('filesystem', folder_opts )
42
+ xml = to_xml('filesystem', folder_opts)
51
43
  # puts "<<<<< XML:\n #{xml}\n >>>>>"
52
44
  @conn.lookup_domain_by_uuid(machine.id).attach_device(xml, 0)
53
-
54
- end
45
+ end
55
46
  rescue => e
56
47
  machine.ui.error("could not attach device because: #{e}")
57
- raise VagrantPlugins::ProviderLibvirt::Errors::AttachDeviceError,:error_message => e.message
48
+ raise VagrantPlugins::ProviderLibvirt::Errors::AttachDeviceError,
49
+ error_message: e.message
58
50
  end
59
51
  end
60
52
 
61
-
62
53
  # TODO once up, mount folders
63
54
  def enable(machine, folders, _opts)
64
55
  # Go through each folder and mount
65
- machine.ui.info("mounting p9 share in guest")
56
+ machine.ui.info('mounting p9 share in guest')
66
57
  # Only mount folders that have a guest path specified.
67
58
  mount_folders = {}
68
59
  folders.each do |id, opts|
69
60
  mount_folders[id] = opts.dup if opts[:guestpath]
70
61
  # merge common options if not given
71
- mount_folders[id].merge!(:version => '9p2000.L') { |_k, ov, _nv| ov }
62
+ mount_folders[id].merge!(version: '9p2000.L') { |_k, ov, _nv| ov }
72
63
  end
73
64
  # Mount the actual folder
74
65
  machine.guest.capability(
@@ -76,27 +67,25 @@ module VagrantPlugins
76
67
  end
77
68
 
78
69
  def cleanup(machine, _opts)
79
-
80
- raise Vagrant::Errors::Error("No libvirt connection") if ProviderLibvirt.libvirt_connection.nil?
81
-
70
+ if ProviderLibvirt.libvirt_connection.nil?
71
+ raise Vagrant::Errors::Error('No libvirt connection')
72
+ end
82
73
  @conn = ProviderLibvirt.libvirt_connection.client
83
-
84
74
  begin
85
- if machine.id && machine.id != ""
75
+ if machine.id && machine.id != ''
86
76
  dom = @conn.lookup_domain_by_uuid(machine.id)
87
- Nokogiri::XML(dom.xml_desc).xpath('/domain/devices/filesystem').each do |xml|
77
+ Nokogiri::XML(dom.xml_desc).xpath(
78
+ '/domain/devices/filesystem').each do |xml|
88
79
  dom.detach_device(xml.to_s)
89
-
90
- machine.ui.info "Cleaned up shared folders"
80
+ machine.ui.info 'Cleaned up shared folders'
91
81
  end
92
82
  end
93
83
  rescue => e
94
84
  machine.ui.error("could not detach device because: #{e}")
95
- raise VagrantPlugins::ProviderLibvirt::Errors::DetachDeviceError,:error_message => e.message
85
+ raise VagrantPlugins::ProviderLibvirt::Errors::DetachDeviceError,
86
+ error_message: e.message
96
87
  end
97
-
98
88
  end
99
-
100
89
  end
101
90
  end
102
91
  end
@@ -56,6 +56,7 @@ module VagrantPlugins
56
56
  attr_accessor :cpus
57
57
  attr_accessor :cpu_mode
58
58
  attr_accessor :machine_type
59
+ attr_accessor :machine_arch
59
60
  attr_accessor :disk_bus
60
61
  attr_accessor :nic_model_type
61
62
  attr_accessor :nested
@@ -95,6 +96,7 @@ module VagrantPlugins
95
96
  @cpus = UNSET_VALUE
96
97
  @cpu_mode = UNSET_VALUE
97
98
  @machine_type = UNSET_VALUE
99
+ @machine_arch = UNSET_VALUE
98
100
  @disk_bus = UNSET_VALUE
99
101
  @nic_model_type = UNSET_VALUE
100
102
  @nested = UNSET_VALUE
@@ -248,7 +250,7 @@ module VagrantPlugins
248
250
  # set ssh key for access to libvirt host
249
251
  uri << "\&keyfile="
250
252
  # if no slash, prepend $HOME/.ssh/
251
- uri << "#{`echo ${HOME}`.chomp}/.ssh/" if @id_ssh_key_file !~ /\A\//
253
+ @id_ssh_key_file.prepend("#{`echo ${HOME}`.chomp}/.ssh/") if @id_ssh_key_file !~ /\A\//
252
254
  uri << @id_ssh_key_file
253
255
  end
254
256
  # set path to libvirt socket
@@ -277,6 +279,7 @@ module VagrantPlugins
277
279
  @cpus = 1 if @cpus == UNSET_VALUE
278
280
  @cpu_mode = 'host-model' if @cpu_mode == UNSET_VALUE
279
281
  @machine_type = nil if @machine_type == UNSET_VALUE
282
+ @machine_arch = nil if @machine_arch == UNSET_VALUE
280
283
  @disk_bus = 'virtio' if @disk_bus == UNSET_VALUE
281
284
  @nic_model_type = 'virtio' if @nic_model_type == UNSET_VALUE
282
285
  @nested = false if @nested == UNSET_VALUE
@@ -14,11 +14,19 @@
14
14
  <% end %>
15
15
 
16
16
  <os>
17
- <% if @machine_type %>
18
- <type machine='<%= @machine_type %>'>hvm</type>
19
- <% else %>
20
- <type>hvm</type>
21
- <% end %>
17
+ <% if @machine_type %>
18
+ <% if @machine_arch %>
19
+ <type arch='<%= @machine_arch %>' machine='<%= @machine_type %>'>hvm</type>
20
+ <% else %>
21
+ <type machine='<%= @machine_type %>'>hvm</type>
22
+ <% end %>
23
+ <% else %>
24
+ <% if @machine_arch %>
25
+ <type arch='<%= @machine_arch %>'>hvm</type>
26
+ <% else %>
27
+ <type>hvm</type>
28
+ <% end %>
29
+ <% end %>
22
30
  <boot dev='hd'/>
23
31
  <kernel><%= @kernel %></kernel>
24
32
  <initrd><%= @initrd %></initrd>
@@ -1,8 +1,8 @@
1
1
  <filesystem type='mount' accessmode='<%= accessmode %>'>
2
2
  <driver type='path' wrpolicy='immediate'/>
3
3
  <source dir='<%= hostpath %>'/>
4
- <target dir='<%= guestpath %>'/>
4
+ <target dir='<%= target %>'/>
5
5
  <% unless readonly.nil? %>
6
6
  <readonly />
7
7
  <% end %>
8
- </filesystem>
8
+ </filesystem>
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module ProviderLibvirt
3
- VERSION = '0.0.28'
3
+ VERSION = '0.0.29'
4
4
  end
5
5
  end
data/tools/create_box.sh CHANGED
@@ -60,7 +60,7 @@ TMP_IMG="$TMP_DIR/box.img"
60
60
 
61
61
  mkdir -p "$TMP_DIR"
62
62
 
63
- [[ ! -w "$IMG" ]] && error "'$IMG': Permission denied"
63
+ [[ ! -r "$IMG" ]] && error "'$IMG': Permission denied"
64
64
 
65
65
  # We move / copy (when the image has master) the image to the tempdir
66
66
  # ensure that it's moved back / removed again
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-libvirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.28
4
+ version: 0.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Stanek
@@ -10,90 +10,90 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-05-11 00:00:00.000000000 Z
13
+ date: 2015-05-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec-core
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
21
  version: 2.12.2
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - "~>"
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
28
  version: 2.12.2
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rspec-expectations
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - "~>"
33
+ - - ~>
34
34
  - !ruby/object:Gem::Version
35
35
  version: 2.12.1
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ~>
41
41
  - !ruby/object:Gem::Version
42
42
  version: 2.12.1
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rspec-mocks
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ~>
48
48
  - !ruby/object:Gem::Version
49
49
  version: 2.12.1
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ~>
55
55
  - !ruby/object:Gem::Version
56
56
  version: 2.12.1
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: fog-libvirt
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - "~>"
61
+ - - ~>
62
62
  - !ruby/object:Gem::Version
63
63
  version: 0.0.1
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - "~>"
68
+ - - ~>
69
69
  - !ruby/object:Gem::Version
70
70
  version: 0.0.1
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: nokogiri
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - "~>"
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: 1.6.0
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - "~>"
82
+ - - ~>
83
83
  - !ruby/object:Gem::Version
84
84
  version: 1.6.0
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: rake
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ">="
89
+ - - ! '>='
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ">="
96
+ - - ! '>='
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  description: libvirt provider for Vagrant.
@@ -105,7 +105,7 @@ executables: []
105
105
  extensions: []
106
106
  extra_rdoc_files: []
107
107
  files:
108
- - ".gitignore"
108
+ - .gitignore
109
109
  - CHANGELOG.md
110
110
  - Gemfile
111
111
  - LICENSE
@@ -134,6 +134,7 @@ files:
134
134
  - lib/vagrant-libvirt/action/message_not_created.rb
135
135
  - lib/vagrant-libvirt/action/message_not_running.rb
136
136
  - lib/vagrant-libvirt/action/message_not_suspended.rb
137
+ - lib/vagrant-libvirt/action/package_domain.rb
137
138
  - lib/vagrant-libvirt/action/prepare_nfs_settings.rb
138
139
  - lib/vagrant-libvirt/action/prepare_nfs_valid_ids.rb
139
140
  - lib/vagrant-libvirt/action/prune_nfs_exports.rb
@@ -185,12 +186,12 @@ require_paths:
185
186
  - lib
186
187
  required_ruby_version: !ruby/object:Gem::Requirement
187
188
  requirements:
188
- - - ">="
189
+ - - ! '>='
189
190
  - !ruby/object:Gem::Version
190
191
  version: '0'
191
192
  required_rubygems_version: !ruby/object:Gem::Requirement
192
193
  requirements:
193
- - - ">="
194
+ - - ! '>='
194
195
  - !ruby/object:Gem::Version
195
196
  version: '0'
196
197
  requirements: []