Provide an option to randomize domain name

This commit lets users enable hostname randomization from their
Vagrantfile. Without this option enabled, domain creation will fail when
multiple VMs are spun up from the same Vagrantfile, due to a domain name
conflict.
This commit is contained in:
Nico Tonozzi
2014-07-31 09:31:30 -06:00
parent f818d482d7
commit 3a2335f37c
4 changed files with 18 additions and 4 deletions

View File

@@ -41,7 +41,6 @@ module VagrantPlugins
# development-centos-6-chef-11_1404488971_3b7a569e2fd7c554b852 # development-centos-6-chef-11_1404488971_3b7a569e2fd7c554b852
# @return [String] libvirt domain name # @return [String] libvirt domain name
def build_domain_name(env) def build_domain_name(env)
postfix = "#{Time.now.utc.to_i}_#{SecureRandom.hex(10)}"
config = env[:machine].provider_config config = env[:machine].provider_config
domain_name = domain_name =
if config.default_prefix.nil? if config.default_prefix.nil?
@@ -49,8 +48,11 @@ module VagrantPlugins
else else
config.default_prefix.to_s config.default_prefix.to_s
end end
domain_name << '_'
domain_name << env[:machine].name.to_s
domain_name.gsub!(/[^-a-z0-9_]/i, '') domain_name.gsub!(/[^-a-z0-9_]/i, '')
domain_name << "_#{postfix}" domain_name << "_#{Time.now.utc.to_i}_#{SecureRandom.hex(10)}" if config.random_hostname
domain_name
end end
end end
@@ -58,4 +60,3 @@ module VagrantPlugins
end end
end end
end end

View File

@@ -40,6 +40,9 @@ module VagrantPlugins
# be stored. # be stored.
attr_accessor :storage_pool_name attr_accessor :storage_pool_name
# Turn on to prevent hostname conflicts
attr_accessor :random_hostname
# Libvirt default network # Libvirt default network
attr_accessor :management_network_name attr_accessor :management_network_name
attr_accessor :management_network_address attr_accessor :management_network_address
@@ -70,6 +73,7 @@ module VagrantPlugins
@password = UNSET_VALUE @password = UNSET_VALUE
@id_ssh_key_file = UNSET_VALUE @id_ssh_key_file = UNSET_VALUE
@storage_pool_name = UNSET_VALUE @storage_pool_name = UNSET_VALUE
@random_hostname = UNSET_VALUE
@management_network_name = UNSET_VALUE @management_network_name = UNSET_VALUE
@management_network_address = UNSET_VALUE @management_network_address = UNSET_VALUE
@@ -182,6 +186,7 @@ module VagrantPlugins
@password = nil if @password == UNSET_VALUE @password = nil if @password == UNSET_VALUE
@id_ssh_key_file = 'id_rsa' if @id_ssh_key_file == UNSET_VALUE @id_ssh_key_file = 'id_rsa' if @id_ssh_key_file == UNSET_VALUE
@storage_pool_name = 'default' if @storage_pool_name == UNSET_VALUE @storage_pool_name = 'default' if @storage_pool_name == UNSET_VALUE
@random_hostname = false if @random_hostname == UNSET_VALUE
@management_network_name = 'vagrant-libvirt' if @management_network_name == UNSET_VALUE @management_network_name = 'vagrant-libvirt' if @management_network_name == UNSET_VALUE
@management_network_address = '192.168.121.0/24' if @management_network_address == UNSET_VALUE @management_network_address = '192.168.121.0/24' if @management_network_address == UNSET_VALUE

View File

@@ -5,6 +5,8 @@ class EnvironmentHelper
attr_writer :default_prefix, :domain_name attr_writer :default_prefix, :domain_name
attr_accessor :random_hostname, :name
def [](value) def [](value)
self.send(value.to_sym) self.send(value.to_sym)
end end

View File

@@ -5,10 +5,16 @@ describe VagrantPlugins::ProviderLibvirt::Action::SetNameOfDomain do
@env = EnvironmentHelper.new @env = EnvironmentHelper.new
end end
it "builds uniqie domain name" do it "builds unique domain name" do
@env.random_hostname = true
dmn = VagrantPlugins::ProviderLibvirt::Action::SetNameOfDomain.new(Object.new, @env) dmn = VagrantPlugins::ProviderLibvirt::Action::SetNameOfDomain.new(Object.new, @env)
first = dmn.build_domain_name(@env) first = dmn.build_domain_name(@env)
second = dmn.build_domain_name(@env) second = dmn.build_domain_name(@env)
first.should_not eq(second) first.should_not eq(second)
end end
it "builds simple domain name" do
dmn = VagrantPlugins::ProviderLibvirt::Action::SetNameOfDomain.new(Object.new, @env)
dmn.build_domain_name(@env).should eq("foo_")
end
end end