vagrant-libvirt 0.0.40 → 0.0.41
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- metadata +13 -103
- data/.coveralls.yml +0 -1
- data/.github/issue_template.md +0 -37
- data/.gitignore +0 -21
- data/.travis.yml +0 -28
- data/CHANGELOG.md +0 -99
- data/Gemfile +0 -27
- data/LICENSE +0 -22
- data/README.md +0 -1311
- data/Rakefile +0 -8
- data/example_box/README.md +0 -29
- data/example_box/Vagrantfile +0 -60
- data/example_box/metadata.json +0 -5
- data/lib/vagrant-libvirt.rb +0 -29
- data/lib/vagrant-libvirt/action.rb +0 -362
- data/lib/vagrant-libvirt/action/create_domain.rb +0 -313
- data/lib/vagrant-libvirt/action/create_domain_volume.rb +0 -87
- data/lib/vagrant-libvirt/action/create_network_interfaces.rb +0 -294
- data/lib/vagrant-libvirt/action/create_networks.rb +0 -353
- data/lib/vagrant-libvirt/action/destroy_domain.rb +0 -83
- data/lib/vagrant-libvirt/action/destroy_networks.rb +0 -95
- data/lib/vagrant-libvirt/action/forward_ports.rb +0 -221
- data/lib/vagrant-libvirt/action/halt_domain.rb +0 -35
- data/lib/vagrant-libvirt/action/handle_box_image.rb +0 -156
- data/lib/vagrant-libvirt/action/handle_storage_pool.rb +0 -57
- data/lib/vagrant-libvirt/action/is_created.rb +0 -18
- data/lib/vagrant-libvirt/action/is_running.rb +0 -21
- data/lib/vagrant-libvirt/action/is_suspended.rb +0 -42
- data/lib/vagrant-libvirt/action/message_already_created.rb +0 -16
- data/lib/vagrant-libvirt/action/message_not_created.rb +0 -16
- data/lib/vagrant-libvirt/action/message_not_running.rb +0 -16
- data/lib/vagrant-libvirt/action/message_not_suspended.rb +0 -16
- data/lib/vagrant-libvirt/action/package_domain.rb +0 -105
- data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +0 -94
- data/lib/vagrant-libvirt/action/prepare_nfs_valid_ids.rb +0 -17
- data/lib/vagrant-libvirt/action/prune_nfs_exports.rb +0 -27
- data/lib/vagrant-libvirt/action/read_mac_addresses.rb +0 -40
- data/lib/vagrant-libvirt/action/remove_libvirt_image.rb +0 -20
- data/lib/vagrant-libvirt/action/remove_stale_volume.rb +0 -50
- data/lib/vagrant-libvirt/action/resume_domain.rb +0 -34
- data/lib/vagrant-libvirt/action/set_boot_order.rb +0 -109
- data/lib/vagrant-libvirt/action/set_name_of_domain.rb +0 -64
- data/lib/vagrant-libvirt/action/share_folders.rb +0 -71
- data/lib/vagrant-libvirt/action/start_domain.rb +0 -303
- data/lib/vagrant-libvirt/action/suspend_domain.rb +0 -40
- data/lib/vagrant-libvirt/action/wait_till_up.rb +0 -102
- data/lib/vagrant-libvirt/cap/mount_p9.rb +0 -42
- data/lib/vagrant-libvirt/cap/nic_mac_addresses.rb +0 -17
- data/lib/vagrant-libvirt/cap/synced_folder.rb +0 -113
- data/lib/vagrant-libvirt/config.rb +0 -698
- data/lib/vagrant-libvirt/driver.rb +0 -118
- data/lib/vagrant-libvirt/errors.rb +0 -149
- data/lib/vagrant-libvirt/plugin.rb +0 -92
- data/lib/vagrant-libvirt/provider.rb +0 -130
- data/lib/vagrant-libvirt/templates/default_storage_pool.xml.erb +0 -13
- data/lib/vagrant-libvirt/templates/domain.xml.erb +0 -229
- data/lib/vagrant-libvirt/templates/private_network.xml.erb +0 -34
- data/lib/vagrant-libvirt/templates/public_interface.xml.erb +0 -23
- data/lib/vagrant-libvirt/util.rb +0 -11
- data/lib/vagrant-libvirt/util/collection.rb +0 -19
- data/lib/vagrant-libvirt/util/erb_template.rb +0 -22
- data/lib/vagrant-libvirt/util/error_codes.rb +0 -100
- data/lib/vagrant-libvirt/util/network_util.rb +0 -138
- data/lib/vagrant-libvirt/util/timer.rb +0 -17
- data/lib/vagrant-libvirt/version.rb +0 -5
- data/locales/en.yml +0 -159
- data/spec/spec_helper.rb +0 -9
- data/spec/support/environment_helper.rb +0 -46
- data/spec/support/libvirt_context.rb +0 -30
- data/spec/support/sharedcontext.rb +0 -34
- data/spec/unit/action/destroy_domain_spec.rb +0 -97
- data/spec/unit/action/set_name_of_domain_spec.rb +0 -21
- data/spec/unit/action/wait_till_up_spec.rb +0 -127
- data/spec/unit/config_spec.rb +0 -106
- data/spec/unit/templates/domain_all_settings.xml +0 -133
- data/spec/unit/templates/domain_defaults.xml +0 -46
- data/spec/unit/templates/domain_spec.rb +0 -75
- data/tools/create_box.sh +0 -130
- data/tools/prepare_redhat_for_box.sh +0 -119
- data/vagrant-libvirt.gemspec +0 -28
@@ -1,18 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
# This can be used with "Call" built-in to check if the machine
|
5
|
-
# is created and branch in the middleware.
|
6
|
-
class IsCreated
|
7
|
-
def initialize(app, _env)
|
8
|
-
@app = app
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
env[:result] = env[:machine].state.id != :not_created
|
13
|
-
@app.call(env)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
# This can be used with "Call" built-in to check if the machine
|
5
|
-
# is running and branch in the middleware.
|
6
|
-
class IsRunning
|
7
|
-
def initialize(app, _env)
|
8
|
-
@app = app
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
domain = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s)
|
13
|
-
raise Errors::NoDomainError if domain.nil?
|
14
|
-
env[:result] = domain.state.to_s == 'running'
|
15
|
-
|
16
|
-
@app.call(env)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
# This can be used with "Call" built-in to check if the machine
|
5
|
-
# is suspended and branch in the middleware.
|
6
|
-
class IsSuspended
|
7
|
-
def initialize(app, _env)
|
8
|
-
@app = app
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
domain = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s)
|
13
|
-
raise Errors::NoDomainError if domain.nil?
|
14
|
-
|
15
|
-
config = env[:machine].provider_config
|
16
|
-
libvirt_domain = env[:machine].provider.driver.connection.client.lookup_domain_by_uuid(env[:machine].id)
|
17
|
-
if config.suspend_mode == 'managedsave'
|
18
|
-
if libvirt_domain.has_managed_save?
|
19
|
-
env[:result] = libvirt_domain.has_managed_save?
|
20
|
-
else
|
21
|
-
env[:result] = domain.state.to_s == 'paused'
|
22
|
-
if env[:result]
|
23
|
-
env[:ui].warn('One time switching to pause suspend mode, found a paused VM.')
|
24
|
-
config.suspend_mode = 'pause'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
else
|
28
|
-
if libvirt_domain.has_managed_save?
|
29
|
-
env[:ui].warn('One time switching to managedsave suspend mode, state found.')
|
30
|
-
env[:result] = true
|
31
|
-
config.suspend_mode = 'managedsave'
|
32
|
-
else
|
33
|
-
env[:result] = domain.state.to_s == 'paused'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
@app.call(env)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
class MessageAlreadyCreated
|
5
|
-
def initialize(app, _env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
env[:ui].info(I18n.t('vagrant_libvirt.already_created'))
|
11
|
-
@app.call(env)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
class MessageNotCreated
|
5
|
-
def initialize(app, _env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
env[:ui].info(I18n.t('vagrant_libvirt.not_created'))
|
11
|
-
@app.call(env)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
class MessageNotRunning
|
5
|
-
def initialize(app, _env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
env[:ui].info(I18n.t('vagrant_libvirt.not_running'))
|
11
|
-
@app.call(env)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
class MessageNotSuspended
|
5
|
-
def initialize(app, _env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
env[:ui].info(I18n.t('vagrant_libvirt.not_suspended'))
|
11
|
-
@app.call(env)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,105 +0,0 @@
|
|
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[:machine].provider.driver.connection.client.lookup_domain_by_uuid(
|
18
|
-
env[:machine].id
|
19
|
-
)
|
20
|
-
domain = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s)
|
21
|
-
root_disk = domain.volumes.select do |x|
|
22
|
-
x.name == libvirt_domain.name + '.img'
|
23
|
-
end.first
|
24
|
-
boxname = env['package.output']
|
25
|
-
raise "#{boxname}: Already exists" if File.exist?(boxname)
|
26
|
-
@tmp_dir = Dir.pwd + '/_tmp_package'
|
27
|
-
@tmp_img = @tmp_dir + '/box.img'
|
28
|
-
Dir.mkdir(@tmp_dir)
|
29
|
-
if File.readable?(root_disk.path)
|
30
|
-
backing = `qemu-img info "#{root_disk.path}" | grep 'backing file:' | cut -d ':' -f2`.chomp
|
31
|
-
else
|
32
|
-
env[:ui].error("Require set read access to #{root_disk.path}. sudo chmod a+r #{root_disk.path}")
|
33
|
-
FileUtils.rm_rf(@tmp_dir)
|
34
|
-
raise 'Have no access'
|
35
|
-
end
|
36
|
-
env[:ui].info('Image has backing image, copying image and rebasing ...')
|
37
|
-
FileUtils.cp(root_disk.path, @tmp_img)
|
38
|
-
`qemu-img rebase -p -b "" #{@tmp_img}`
|
39
|
-
# remove hw association with interface
|
40
|
-
# working for centos with lvs default disks
|
41
|
-
`virt-sysprep --no-logfile --operations defaults,-ssh-userdir -a #{@tmp_img}`
|
42
|
-
# add any user provided file
|
43
|
-
extra = ''
|
44
|
-
@tmp_include = @tmp_dir + '/_include'
|
45
|
-
if env['package.include']
|
46
|
-
extra = './_include'
|
47
|
-
Dir.mkdir(@tmp_include)
|
48
|
-
env['package.include'].each do |f|
|
49
|
-
env[:ui].info("Including user file: #{f}")
|
50
|
-
FileUtils.cp(f, @tmp_include)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
if env['package.vagrantfile']
|
54
|
-
extra = './_include'
|
55
|
-
Dir.mkdir(@tmp_include) unless File.directory?(@tmp_include)
|
56
|
-
env[:ui].info('Including user Vagrantfile')
|
57
|
-
FileUtils.cp(env['package.vagrantfile'], @tmp_include + '/Vagrantfile')
|
58
|
-
end
|
59
|
-
Dir.chdir(@tmp_dir)
|
60
|
-
info = JSON.parse(`qemu-img info --output=json #{@tmp_img}`)
|
61
|
-
img_size = (Float(info['virtual-size'])/(1024**3)).ceil
|
62
|
-
File.write(@tmp_dir + '/metadata.json', metadata_content(img_size))
|
63
|
-
File.write(@tmp_dir + '/Vagrantfile', vagrantfile_content)
|
64
|
-
assemble_box(boxname, extra)
|
65
|
-
FileUtils.mv(@tmp_dir + '/' + boxname, '../' + boxname)
|
66
|
-
FileUtils.rm_rf(@tmp_dir)
|
67
|
-
env[:ui].info('Box created')
|
68
|
-
env[:ui].info('You can now add the box:')
|
69
|
-
env[:ui].info("vagrant box add #{boxname} --name any_comfortable_name")
|
70
|
-
@app.call(env)
|
71
|
-
end
|
72
|
-
|
73
|
-
def assemble_box(boxname, extra)
|
74
|
-
`tar cvzf "#{boxname}" --totals ./metadata.json ./Vagrantfile ./box.img #{extra}`
|
75
|
-
end
|
76
|
-
|
77
|
-
def vagrantfile_content
|
78
|
-
<<-EOF
|
79
|
-
Vagrant.configure("2") do |config|
|
80
|
-
config.vm.provider :libvirt do |libvirt|
|
81
|
-
libvirt.driver = "kvm"
|
82
|
-
libvirt.host = ""
|
83
|
-
libvirt.connect_via_ssh = false
|
84
|
-
libvirt.storage_pool_name = "default"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
user_vagrantfile = File.expand_path('../_include/Vagrantfile', __FILE__)
|
89
|
-
load user_vagrantfile if File.exists?(user_vagrantfile)
|
90
|
-
EOF
|
91
|
-
end
|
92
|
-
|
93
|
-
def metadata_content(filesize)
|
94
|
-
<<-EOF
|
95
|
-
{
|
96
|
-
"provider": "libvirt",
|
97
|
-
"format": "qcow2",
|
98
|
-
"virtual_size": #{filesize}
|
99
|
-
}
|
100
|
-
EOF
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
require 'socket'
|
3
|
-
require 'timeout'
|
4
|
-
|
5
|
-
module VagrantPlugins
|
6
|
-
module ProviderLibvirt
|
7
|
-
module Action
|
8
|
-
class PrepareNFSSettings
|
9
|
-
include Vagrant::Action::Builtin::MixinSyncedFolders
|
10
|
-
|
11
|
-
def initialize(app, _env)
|
12
|
-
@app = app
|
13
|
-
@logger = Log4r::Logger.new('vagrant::action::vm::nfs')
|
14
|
-
end
|
15
|
-
|
16
|
-
def call(env)
|
17
|
-
@machine = env[:machine]
|
18
|
-
@app.call(env)
|
19
|
-
|
20
|
-
if using_nfs?
|
21
|
-
@logger.info('Using NFS, preparing NFS settings by reading host IP and machine IP')
|
22
|
-
env[:nfs_machine_ip] = read_machine_ip(env[:machine])
|
23
|
-
env[:nfs_host_ip] = read_host_ip(env[:nfs_machine_ip])
|
24
|
-
|
25
|
-
@logger.info("host IP: #{env[:nfs_host_ip]} machine IP: #{env[:nfs_machine_ip]}")
|
26
|
-
|
27
|
-
raise Vagrant::Errors::NFSNoHostonlyNetwork if !env[:nfs_machine_ip] || !env[:nfs_host_ip]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# We're using NFS if we have any synced folder with NFS configured. If
|
32
|
-
# we are not using NFS we don't need to do the extra work to
|
33
|
-
# populate these fields in the environment.
|
34
|
-
def using_nfs?
|
35
|
-
!!synced_folders(@machine)[:nfs]
|
36
|
-
end
|
37
|
-
|
38
|
-
# Returns the IP address of the host
|
39
|
-
#
|
40
|
-
# @param [Machine] machine
|
41
|
-
# @return [String]
|
42
|
-
def read_host_ip(ip)
|
43
|
-
UDPSocket.open do |s|
|
44
|
-
if ip.is_a?(Array)
|
45
|
-
s.connect(ip.last, 1)
|
46
|
-
else
|
47
|
-
s.connect(ip, 1)
|
48
|
-
end
|
49
|
-
s.addr.last
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# Returns the IP address of the guest
|
54
|
-
#
|
55
|
-
# @param [Machine] machine
|
56
|
-
# @return [String]
|
57
|
-
def read_machine_ip(machine)
|
58
|
-
# check host only ip
|
59
|
-
ssh_host = machine.ssh_info[:host]
|
60
|
-
return ssh_host if ping(ssh_host)
|
61
|
-
|
62
|
-
# check other ips
|
63
|
-
command = "ip=$(which ip); ${ip:-/sbin/ip} addr show | grep -i 'inet ' | grep -v '127.0.0.1' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1"
|
64
|
-
result = ''
|
65
|
-
machine.communicate.execute(command) do |type, data|
|
66
|
-
result << data if type == :stdout
|
67
|
-
end
|
68
|
-
|
69
|
-
ips = result.chomp.split("\n").uniq
|
70
|
-
@logger.info("guest IPs: #{ips.join(', ')}")
|
71
|
-
ips.each do |ip|
|
72
|
-
next if ip == ssh_host
|
73
|
-
return ip if ping(ip)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
# Check if we can open a connection to the host
|
80
|
-
def ping(host, timeout = 3)
|
81
|
-
::Timeout.timeout(timeout) do
|
82
|
-
s = TCPSocket.new(host, 'echo')
|
83
|
-
s.close
|
84
|
-
end
|
85
|
-
true
|
86
|
-
rescue Errno::ECONNREFUSED
|
87
|
-
true
|
88
|
-
rescue Timeout::Error, StandardError
|
89
|
-
false
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module VagrantPlugins
|
2
|
-
module ProviderLibvirt
|
3
|
-
module Action
|
4
|
-
class PrepareNFSValidIds
|
5
|
-
def initialize(app, _env)
|
6
|
-
@app = app
|
7
|
-
@logger = Log4r::Logger.new('vagrant::action::vm::nfs')
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(env)
|
11
|
-
env[:nfs_valid_ids] = env[:machine].provider.driver.connection.servers.all.map(&:id)
|
12
|
-
@app.call(env)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
module VagrantPlugins
|
3
|
-
module ProviderLibvirt
|
4
|
-
module Action
|
5
|
-
class PruneNFSExports
|
6
|
-
def initialize(app, _env)
|
7
|
-
@app = app
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(env)
|
11
|
-
if env[:host]
|
12
|
-
uuid = env[:machine].id
|
13
|
-
# get all uuids
|
14
|
-
uuids = env[:machine].provider.driver.connection.servers.all.map(&:id)
|
15
|
-
# not exiisted in array will removed from nfs
|
16
|
-
uuids.delete(uuid)
|
17
|
-
env[:host].capability(
|
18
|
-
:nfs_prune, env[:machine].ui, uuids
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
@app.call(env)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'log4r'
|
2
|
-
|
3
|
-
module VagrantPlugins
|
4
|
-
module ProviderLibvirt
|
5
|
-
module Action
|
6
|
-
class ReadMacAddresses
|
7
|
-
def initialize(app, _env)
|
8
|
-
@app = app
|
9
|
-
@logger = Log4r::Logger.new('vagrant_libvirt::action::read_mac_addresses')
|
10
|
-
end
|
11
|
-
|
12
|
-
def call(env)
|
13
|
-
env[:machine_mac_addresses] = read_mac_addresses(env[:machine].provider.driver.connection, env[:machine])
|
14
|
-
end
|
15
|
-
|
16
|
-
def read_mac_addresses(libvirt, machine)
|
17
|
-
return nil if machine.id.nil?
|
18
|
-
|
19
|
-
domain = libvirt.client.lookup_domain_by_uuid(machine.id)
|
20
|
-
|
21
|
-
if domain.nil?
|
22
|
-
@logger.info('Machine could not be found, assuming it got destroyed')
|
23
|
-
machine.id = nil
|
24
|
-
return nil
|
25
|
-
end
|
26
|
-
|
27
|
-
xml = Nokogiri::XML(domain.xml_desc)
|
28
|
-
mac = xml.xpath('/domain/devices/interface/mac/@address')
|
29
|
-
|
30
|
-
return {} if mac.empty?
|
31
|
-
|
32
|
-
Hash[mac.each_with_index.map do |x, i|
|
33
|
-
@logger.debug("interface[#{i}] = #{x.value}")
|
34
|
-
[i, x.value]
|
35
|
-
end]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'log4r'
|
2
|
-
|
3
|
-
module VagrantPlugins
|
4
|
-
module ProviderLibvirt
|
5
|
-
module Action
|
6
|
-
class RemoveLibvirtImage
|
7
|
-
def initialize(app, _env)
|
8
|
-
@logger = Log4r::Logger.new('vagrant_libvirt::action::remove_libvirt_image')
|
9
|
-
@app = app
|
10
|
-
end
|
11
|
-
|
12
|
-
def call(env)
|
13
|
-
env[:ui].info('Vagrant-libvirt plugin removed box only from you LOCAL ~/.vagrant/boxes directory')
|
14
|
-
env[:ui].info('From libvirt storage pool you have to delete image manually(virsh, virt-manager or by any other tool)')
|
15
|
-
@app.call(env)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|