#44 Handle destroyed machines in update_file
Keep track of machines that have been destroyed (they have a nil id). Do not include them when updating the hosts file. Since it is impossible to match on id, this is accomplished by matching the exact ip / hostname / alias. If any of these have been altered since the entry was created the entry will not be removed from the hosts file. Potentially, this could be relaxed to only match on ip / hostname pairs.
This commit is contained in:
parent
5e785f819d
commit
c53452b927
|
@ -54,6 +54,7 @@ module VagrantPlugins
|
|||
def update_file(file)
|
||||
# build array of host file entries from Vagrant configuration
|
||||
entries = []
|
||||
destroyed_entries = []
|
||||
ids = []
|
||||
get_machines.each do |name, p|
|
||||
if @provider == p
|
||||
|
@ -62,8 +63,12 @@ module VagrantPlugins
|
|||
id = machine.id
|
||||
ip = get_ip_address(machine)
|
||||
aliases = machine.config.hostmanager.aliases.join(' ').chomp
|
||||
entries << "#{ip}\t#{host} #{aliases}\t# VAGRANT ID: #{id}\n"
|
||||
ids << id unless ids.include?(id)
|
||||
if id.nil?
|
||||
destroyed_entries << "#{ip}\t#{host} #{aliases}"
|
||||
else
|
||||
entries << "#{ip}\t#{host} #{aliases}\t# VAGRANT ID: #{id}\n"
|
||||
ids << id unless ids.include?(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -71,6 +76,8 @@ module VagrantPlugins
|
|||
begin
|
||||
# copy each line not managed by Vagrant
|
||||
File.open(file).each_line do |line|
|
||||
# Eliminate lines for machines that have been destroyed
|
||||
next if destroyed_entries.any? { |entry| line =~ /^#{entry}\t# VAGRANT ID: .*/ }
|
||||
tmp_file << line unless ids.any? { |id| line =~ /# VAGRANT ID: #{id}/ }
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue