diff options
-rw-r--r-- | lib/chef/config.rb | 2 | ||||
-rw-r--r-- | lib/chef/knife/bootstrap.rb | 15 | ||||
-rw-r--r-- | spec/unit/knife/bootstrap_spec.rb | 28 |
3 files changed, 36 insertions, 9 deletions
diff --git a/lib/chef/config.rb b/lib/chef/config.rb index dc04026acb..2dca41791f 100644 --- a/lib/chef/config.rb +++ b/lib/chef/config.rb @@ -491,7 +491,7 @@ class Chef default :ssh_gateway, nil default :bootstrap_version, nil default :bootstrap_proxy, nil - default :bootstrap_template, "chef-full" + default :bootstrap_template, nil default :secret, nil default :secret_file, nil default :identity_file, nil diff --git a/lib/chef/knife/bootstrap.rb b/lib/chef/knife/bootstrap.rb index f159c9105b..19a329199d 100644 --- a/lib/chef/knife/bootstrap.rb +++ b/lib/chef/knife/bootstrap.rb @@ -194,13 +194,15 @@ class Chef :description => "Verify the SSL cert for HTTPS requests to the Chef server API.", :boolean => true + def default_bootstrap_template + "chef-full" + end + def bootstrap_template - # For some reason knife.merge_configs doesn't pick up the default values from - # Chef::Config[:knife][:bootstrap_template] unless Chef::Config[:knife][:bootstrap_template] - # is forced to pick up the values before calling merge_configs. - # We therefore have Chef::Config[:knife][:bootstrap_template] to pick up the defaults - # if no option is specified. - config[:bootstrap_template] || config[:distro] || config[:template_file] || Chef::Config[:knife][:bootstrap_template] + # The order here is important. We want to check if we have the new Chef 12 option is set first. + # Knife cloud plugins unfortunately all set a default option for the :distro so it should be at + # the end. + config[:bootstrap_template] || config[:template_file] || config[:distro] || default_bootstrap_template end def find_template @@ -210,7 +212,6 @@ class Chef if File.exists?(template) Chef::Log.debug("Using the specified bootstrap template: #{File.dirname(template)}") return template - end # Otherwise search the template directories until we find the right one diff --git a/spec/unit/knife/bootstrap_spec.rb b/spec/unit/knife/bootstrap_spec.rb index 2599e44a56..9769be5b8a 100644 --- a/spec/unit/knife/bootstrap_spec.rb +++ b/spec/unit/knife/bootstrap_spec.rb @@ -29,7 +29,7 @@ describe Chef::Knife::Bootstrap do Chef::Log.logger = Logger.new(StringIO.new) Chef::Config[:knife][:bootstrap_template] = bootstrap_template unless bootstrap_template.nil? - k = Chef::Knife::Bootstrap.new + k = Chef::Knife::Bootstrap.new(bootstrap_cli_options) k.merge_configs k.ui.stub(:stderr).and_return(stderr) @@ -41,11 +41,37 @@ describe Chef::Knife::Bootstrap do let(:bootstrap_template) { nil } + let(:bootstrap_cli_options) { [ ] } + it "should use chef-full as default template" do knife.bootstrap_template.should be_a_kind_of(String) File.basename(knife.bootstrap_template).should eq("chef-full") end + context "with :distro and :bootstrap_template cli options" do + let(:bootstrap_cli_options) { [ "--bootstrap-template", "my-template", "--distro", "other-template" ] } + + it "should select bootstrap template" do + expect(File.basename(knife.bootstrap_template)).to eq("my-template") + end + end + + context "with :distro and :template_file cli options" do + let(:bootstrap_cli_options) { [ "--distro", "my-template", "--template-file", "other-template" ] } + + it "should select bootstrap template" do + expect(File.basename(knife.bootstrap_template)).to eq("other-template") + end + end + + context "with :bootstrap_template and :template_file cli options" do + let(:bootstrap_cli_options) { [ "--bootstrap-template", "my-template", "--template-file", "other-template" ] } + + it "should select bootstrap template" do + expect(File.basename(knife.bootstrap_template)).to eq("my-template") + end + end + context "when finding templates" do context "when :bootstrap_template config is set to a file" do context "that doesn't exist" do |