close #70 undefine machine id should be after all operations

This commit is contained in:
dima 2013-10-20 13:57:47 +02:00
parent d03f50b618
commit 55e31c16df
2 changed files with 19 additions and 13 deletions

View File

@ -5,13 +5,13 @@ module VagrantPlugins
module Action
class DestroyDomain
def initialize(app, env)
@logger = Log4r::Logger.new("vagrant_libvirt::action::destroy_domain")
@logger = Log4r::Logger.new('vagrant_libvirt::action::destroy_domain')
@app = app
end
def call(env)
# Destroy the server, remove the tracking ID
env[:ui].info(I18n.t("vagrant_libvirt.destroy_domain"))
env[:ui].info(I18n.t('vagrant_libvirt.destroy_domain'))
# Must delete any snapshots before domain can be destroyed
# Fog libvirt currently doesn't support snapshots. Use
@ -28,8 +28,7 @@ module VagrantPlugins
end
domain = env[:libvirt_compute].servers.get(env[:machine].id.to_s)
domain.destroy(:destroy_volumes => true)
env[:machine].id = nil
domain.destroy(destroy_volumes: true)
@app.call(env)
end

View File

@ -9,7 +9,7 @@ module VagrantPlugins
class DestroyNetworks
def initialize(app, env)
@logger = Log4r::Logger.new("vagrant_libvirt::action::destroy_networks")
@logger = Log4r::Logger.new('vagrant_libvirt::action::destroy_networks')
@app = app
end
@ -18,45 +18,51 @@ module VagrantPlugins
# data directory, created_networks file holds UUIDs of each network.
created_networks_file = env[:machine].data_dir + 'created_networks'
@logger.info 'Attepmt destroy network'
# If created_networks file doesn't exist, there are no networks we
# need to remove.
return @app.call(env) if not File.exist?(created_networks_file)
unless File.exist?(created_networks_file)
env[:machine].id = nil
return @app.call(env)
end
@logger.info 'file with network exists'
# Iterate over each created network UUID and try to remove it.
created_networks = []
file = File.open(created_networks_file, 'r')
file.readlines.each do |network_uuid|
@logger.info network_uuid
begin
libvirt_network = env[:libvirt_compute].client.lookup_network_by_uuid(
network_uuid)
rescue
raise network_uuid
next
end
# Maybe network doesn't exist anymore.
next if not libvirt_network
next unless libvirt_network
# Skip removing if network has still active connections.
xml = Nokogiri::XML(libvirt_network.xml_desc)
connections = xml.xpath('/network/@connections').first
@logger.info connections
if connections != nil
created_networks << network_uuid
next
end
# Shutdown network first.
begin
libvirt_network.destroy
rescue => e
end
libvirt_network.destroy
# Undefine network.
begin
libvirt_network.undefine
rescue => e
raise Error::DestroyNetworkError,
:network_name => libvirt_network.name,
:error_message => e.message
network_name: libvirt_network.name,
error_message: e.message
end
end
file.close
@ -72,6 +78,7 @@ module VagrantPlugins
File.delete(created_networks_file)
end
env[:machine].id = nil
@app.call(env)
end
end