Automatically generate a node_name for Chef
This is required because the Chef Server almost always needs a node name to interact. This will default to the hostname, but that's always going to be `vagrant.vm`, which will collide easily. This generates a random hostname with `vagrant-` as the prefix and stores the result in the machine's data directory.
This commit is contained in:
parent
fd3e1ff592
commit
9559fc549c
|
@ -19,6 +19,22 @@ module VagrantPlugins
|
||||||
super
|
super
|
||||||
|
|
||||||
@logger = Log4r::Logger.new("vagrant::provisioners::chef")
|
@logger = Log4r::Logger.new("vagrant::provisioners::chef")
|
||||||
|
|
||||||
|
if @config.node_name.to_s.empty?
|
||||||
|
cache = @machine.data_dir.join("chef_node_name")
|
||||||
|
|
||||||
|
if !cache.exist?
|
||||||
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.generating_node_name")
|
||||||
|
cache.open("w+") do |f|
|
||||||
|
f.write("vagrant-#{SecureRandom.hex(4)}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if cache.file?
|
||||||
|
@logger.info("Loading cached node_name...")
|
||||||
|
@config.node_name = cache.read.strip
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_chef
|
def install_chef
|
||||||
|
@ -123,7 +139,7 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup_json
|
def setup_json
|
||||||
@machine.env.ui.info I18n.t("vagrant.provisioners.chef.json")
|
@machine.ui.info I18n.t("vagrant.provisioners.chef.json")
|
||||||
|
|
||||||
# Get the JSON that we're going to expose to Chef
|
# Get the JSON that we're going to expose to Chef
|
||||||
json = @config.json
|
json = @config.json
|
||||||
|
@ -154,7 +170,7 @@ module VagrantPlugins
|
||||||
remote_file = guest_encrypted_data_bag_secret_key_path
|
remote_file = guest_encrypted_data_bag_secret_key_path
|
||||||
return if !remote_file
|
return if !remote_file
|
||||||
|
|
||||||
@machine.env.ui.info I18n.t(
|
@machine.ui.info I18n.t(
|
||||||
"vagrant.provisioners.chef.upload_encrypted_data_bag_secret_key")
|
"vagrant.provisioners.chef.upload_encrypted_data_bag_secret_key")
|
||||||
|
|
||||||
@machine.communicate.tap do |comm|
|
@machine.communicate.tap do |comm|
|
||||||
|
|
|
@ -31,8 +31,13 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
def cleanup
|
def cleanup
|
||||||
delete_from_chef_server('node') if @config.delete_node
|
if @config.delete_node
|
||||||
delete_from_chef_server('client') if @config.delete_client
|
delete_from_chef_server("node")
|
||||||
|
end
|
||||||
|
|
||||||
|
if @config.delete_client
|
||||||
|
delete_from_chef_server("client")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_client_key_folder
|
def create_client_key_folder
|
||||||
|
|
|
@ -1931,6 +1931,8 @@ en:
|
||||||
"The cookbook path '%{path}' doesn't exist. Ignoring..."
|
"The cookbook path '%{path}' doesn't exist. Ignoring..."
|
||||||
json: "Generating chef JSON and uploading..."
|
json: "Generating chef JSON and uploading..."
|
||||||
client_key_folder: "Creating folder to hold client key..."
|
client_key_folder: "Creating folder to hold client key..."
|
||||||
|
generating_node_name: |-
|
||||||
|
Auto-generating node name for Chef...
|
||||||
install_failed: |-
|
install_failed: |-
|
||||||
Vagrant could not detect Chef on the guest! Even after Vagrant
|
Vagrant could not detect Chef on the guest! Even after Vagrant
|
||||||
attempted to install Chef, it could still not find Chef on the system.
|
attempted to install Chef, it could still not find Chef on the system.
|
||||||
|
|
|
@ -5,11 +5,23 @@ require Vagrant.source_root.join("plugins/provisioners/chef/provisioner/base")
|
||||||
describe VagrantPlugins::Chef::Provisioner::Base do
|
describe VagrantPlugins::Chef::Provisioner::Base do
|
||||||
include_context "unit"
|
include_context "unit"
|
||||||
|
|
||||||
let(:machine) { double("machine") }
|
let(:iso_env) do
|
||||||
|
# We have to create a Vagrantfile so there is a root path
|
||||||
|
env = isolated_environment
|
||||||
|
env.vagrantfile("")
|
||||||
|
env.create_vagrant_env
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:machine) { iso_env.machine(iso_env.machine_names[0], :dummy) }
|
||||||
let(:config) { double("config") }
|
let(:config) { double("config") }
|
||||||
|
|
||||||
subject { described_class.new(machine, config) }
|
subject { described_class.new(machine, config) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(config).to receive(:node_name)
|
||||||
|
allow(config).to receive(:node_name=)
|
||||||
|
end
|
||||||
|
|
||||||
describe "#encrypted_data_bag_secret_key_path" do
|
describe "#encrypted_data_bag_secret_key_path" do
|
||||||
let(:env) { double("env") }
|
let(:env) { double("env") }
|
||||||
let(:root_path) { "/my/root" }
|
let(:root_path) { "/my/root" }
|
||||||
|
|
Loading…
Reference in New Issue