add step to remove stale volume on destroy action

This commit is contained in:
Romuald du Song 2015-05-23 21:49:51 +02:00
parent b6babcdade
commit 2e01a54fc3
3 changed files with 61 additions and 1 deletions

View File

@ -156,7 +156,14 @@ module VagrantPlugins
b.use ConfigValidate
b.use Call, IsCreated do |env, b2|
if !env[:result]
b2.use MessageNotCreated
# Try to remove stale volumes anyway
b2.use ConnectLibvirt
b2.use SetNameOfDomain
b2.use RemoveStaleVolume
if !env[:result]
b2.use MessageNotCreated
end
next
end
@ -338,6 +345,8 @@ module VagrantPlugins
autoload :MessageNotRunning, action_root.join('message_not_running')
autoload :MessageNotSuspended, action_root.join('message_not_suspended')
autoload :RemoveStaleVolume, action_root.join('remove_stale_volume')
autoload :PrepareNFSSettings, action_root.join('prepare_nfs_settings')
autoload :PrepareNFSValidIds, action_root.join('prepare_nfs_valid_ids')
autoload :PruneNFSExports, action_root.join('prune_nfs_exports')

View File

@ -0,0 +1,49 @@
require 'log4r'
#require 'log4r/yamlconfigurator'
module VagrantPlugins
module ProviderLibvirt
module Action
class RemoveStaleVolume
def initialize(app, _env)
# log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yaml"))
# log_cfg = Log4r::YamlConfigurator
# log_cfg.decode_yaml( log4r_config['log4r_config'] )
@logger = Log4r::Logger.new('vagrant_libvirt::action::remove_stale_volume')
@app = app
end
def call(env)
# Remove stale server volume
env[:ui].info(I18n.t('vagrant_libvirt.remove_stale_volume'))
config = env[:machine].provider_config
# Check for storage pool, where box image should be created
fog_pool = ProviderLibvirt::Util::Collection.find_matching(
env[:libvirt_compute].pools.all, config.storage_pool_name)
@logger.debug("**** Pool #{fog_pool.name}")
# This is name of newly created image for vm.
name = "#{env[:domain_name]}.img"
@logger.debug("**** Volume name #{name}")
# remove root storage
box_volume = ProviderLibvirt::Util::Collection.find_matching(
env[:libvirt_compute].volumes.all, name)
if box_volume && box_volume.pool_name == fog_pool.name
@logger.info("Deleting volume #{box_volume.key}")
box_volume.destroy
env[:result] = box_volume
else
env[:result] = nil
end
# Continue the middleware chain.
@app.call(env)
end
end
end
end
end

View File

@ -44,6 +44,8 @@ en:
Rsyncing folder: %{hostpath} => %{guestpath}
ready: |-
Machine is booted and ready for use!
remove_stale_volume: |-
Remove stale volume...
errors:
package_not_supported: Not support package for libvirt. Create box manualy.