diff options
author | Thom May <thom@may.lt> | 2015-09-02 13:40:06 +0100 |
---|---|---|
committer | Thom May <thom@may.lt> | 2015-09-02 13:40:06 +0100 |
commit | b86ba5b0858676da98e0456d340ac2f1a031a0d1 (patch) | |
tree | 2764c4238aa13f872c029ef9b71facf14d9f3574 | |
parent | e42eaec8f13babcc5553db631ee9cdadade89294 (diff) | |
parent | f6835a4f5af4a380d7e35e32ddd8c3a0fe7f2ac3 (diff) | |
download | chef-b86ba5b0858676da98e0456d340ac2f1a031a0d1.tar.gz |
Merge pull request #3190 from swalberg/tag_nodes_on_bootstrap
Allow tags to be set on a node during bootstrap
-rw-r--r-- | lib/chef/knife/bootstrap.rb | 6 | ||||
-rw-r--r-- | lib/chef/knife/bootstrap/client_builder.rb | 3 | ||||
-rw-r--r-- | lib/chef/knife/core/bootstrap_context.rb | 7 | ||||
-rw-r--r-- | spec/unit/knife/bootstrap/client_builder_spec.rb | 16 | ||||
-rw-r--r-- | spec/unit/knife/core/bootstrap_context_spec.rb | 7 |
5 files changed, 37 insertions, 2 deletions
diff --git a/lib/chef/knife/bootstrap.rb b/lib/chef/knife/bootstrap.rb index 5b29591fcc..f173b6b909 100644 --- a/lib/chef/knife/bootstrap.rb +++ b/lib/chef/knife/bootstrap.rb @@ -143,6 +143,12 @@ class Chef :proc => lambda { |o| o.split(/[\s,]+/) }, :default => [] + option :tags, + :long => "--tags TAGS", + :description => "Comma separated list of tags to apply to the node", + :proc => lambda { |o| o.split(/[\s,]+/) }, + :default => [] + option :first_boot_attributes, :short => "-j JSON_ATTRIBS", :long => "--json-attributes", diff --git a/lib/chef/knife/bootstrap/client_builder.rb b/lib/chef/knife/bootstrap/client_builder.rb index 304b06b8b7..59b0cabd49 100644 --- a/lib/chef/knife/bootstrap/client_builder.rb +++ b/lib/chef/knife/bootstrap/client_builder.rb @@ -141,6 +141,9 @@ class Chef node.run_list(normalized_run_list) node.normal_attrs = first_boot_attributes if first_boot_attributes node.environment(environment) if environment + (knife_config[:tags] || []).each do |tag| + node.tags << tag + end node end end diff --git a/lib/chef/knife/core/bootstrap_context.rb b/lib/chef/knife/core/bootstrap_context.rb index 7197653489..867b6fe366 100644 --- a/lib/chef/knife/core/bootstrap_context.rb +++ b/lib/chef/knife/core/bootstrap_context.rb @@ -163,11 +163,14 @@ CONFIG end def first_boot - (@config[:first_boot_attributes] || {}).merge(:run_list => @run_list) + (@config[:first_boot_attributes] || {}).tap do |attributes| + attributes.merge!(:run_list => @run_list) + attributes.merge!(:tags => @config[:tags]) if @config[:tags] && !@config[:tags].empty? + end end private - + # Returns a string for copying the trusted certificates on the workstation to the system being bootstrapped # This string should contain both the commands necessary to both create the files, as well as their content def trusted_certs_content diff --git a/spec/unit/knife/bootstrap/client_builder_spec.rb b/spec/unit/knife/bootstrap/client_builder_spec.rb index e6aa307c7e..930ae8c9d3 100644 --- a/spec/unit/knife/bootstrap/client_builder_spec.rb +++ b/spec/unit/knife/bootstrap/client_builder_spec.rb @@ -149,6 +149,22 @@ describe Chef::Knife::Bootstrap::ClientBuilder do client_builder.run end + it "does not add tags by default" do + allow(node).to receive(:run_list).with([]) + expect(node).to_not receive(:tags) + client_builder.run + end + + it "adds tags to the node when given" do + tag_receiver = [] + + knife_config[:tags] = %w[foo bar] + allow(node).to receive(:run_list).with([]) + allow(node).to receive(:tags).and_return(tag_receiver) + client_builder.run + expect(tag_receiver).to eq %w[foo bar] + end + it "builds a node when the run_list is a string" do knife_config[:run_list] = "role[base],role[app]" expect(node).to receive(:run_list).with(["role[base]", "role[app]"]) diff --git a/spec/unit/knife/core/bootstrap_context_spec.rb b/spec/unit/knife/core/bootstrap_context_spec.rb index 3718cb228c..268b61c756 100644 --- a/spec/unit/knife/core/bootstrap_context_spec.rb +++ b/spec/unit/knife/core/bootstrap_context_spec.rb @@ -97,6 +97,13 @@ EXPECTED end end + describe "when tags are given" do + let(:config) { {:tags => [ "unicorn" ] } } + it "adds the attributes to first_boot" do + expect(Chef::JSONCompat.to_json(bootstrap_context.first_boot)).to eq(Chef::JSONCompat.to_json({:run_list => run_list, :tags => ["unicorn"]})) + end + end + describe "when JSON attributes are given" do let(:config) { {:first_boot_attributes => {:baz => :quux}} } it "adds the attributes to first_boot" do |