diff --git a/lib/puppet/node.rb b/lib/puppet/node.rb index e23472ebf..2d3ac712e 100644 --- a/lib/puppet/node.rb +++ b/lib/puppet/node.rb @@ -1,53 +1,61 @@ # A simplistic class for managing the node information itself. class Puppet::Node attr_accessor :name, :classes, :parameters, :source, :ipaddress, :names attr_reader :time attr_writer :environment # Do not return environments tha are empty string, and use # explicitly set environments, then facts, then a central env # value. def environment unless @environment and @environment != "" if env = parameters["environment"] and env != "" @environment = env elsif env = Puppet[:environment] and env != "" @environment = env else @environment = nil end end @environment end def initialize(name, options = {}) @name = name # Provide a default value. - @names = [name] + if names = options[:names] + if names.is_a?(String) + @names = [names] + else + @names = names + end + else + @names = [name] + end if classes = options[:classes] if classes.is_a?(String) @classes = [classes] else @classes = classes end else @classes = [] end @parameters = options[:parameters] || {} @environment = options[:environment] @time = Time.now end # Merge the node facts with parameters from the node source. # This is only called if the node source has 'fact_merge' set to true. def fact_merge(facts) facts.each do |name, value| @parameters[name] = value unless @parameters.include?(name) end end end diff --git a/spec/unit/other/node.rb b/spec/unit/other/node.rb index a29fb23cf..66d5ba9d7 100755 --- a/spec/unit/other/node.rb +++ b/spec/unit/other/node.rb @@ -1,96 +1,101 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../../spec_helper' describe Puppet::Node, " when initializing" do before do @node = Puppet::Node.new("testnode") end it "should set the node name" do @node.name.should == "testnode" end it "should default to an empty parameter hash" do @node.parameters.should == {} end it "should default to an empty class array" do @node.classes.should == [] end it "should note its creation time" do @node.time.should be_instance_of(Time) end it "should accept parameters passed in during initialization" do params = {"a" => "b"} @node = Puppet::Node.new("testing", :parameters => params) @node.parameters.should == params end it "should accept classes passed in during initialization" do classes = %w{one two} @node = Puppet::Node.new("testing", :classes => classes) @node.classes.should == classes end it "should always return classes as an array" do @node = Puppet::Node.new("testing", :classes => "myclass") @node.classes.should == ["myclass"] end it "should accept the environment during initialization" do @node = Puppet::Node.new("testing", :environment => "myenv") @node.environment.should == "myenv" end + + it "should accept names passed in" do + @node = Puppet::Node.new("testing", :names => ["myenv"]) + @node.names.should == ["myenv"] + end end describe Puppet::Node, " when returning the environment" do before do @node = Puppet::Node.new("testnode") end it "should return the 'environment' fact if present and there is no explicit environment" do @node.parameters = {"environment" => "myenv"} @node.environment.should == "myenv" end it "should return the central environment if there is no environment fact nor explicit environment" do Puppet.config.expects(:[]).with(:environment).returns(:centralenv) @node.environment.should == :centralenv end it "should not use an explicit environment that is an empty string" do @node.environment == "" @node.environment.should be_nil end it "should not use an environment fact that is an empty string" do @node.parameters = {"environment" => ""} @node.environment.should be_nil end it "should not use an explicit environment that is an empty string" do Puppet.config.expects(:[]).with(:environment).returns(nil) @node.environment.should be_nil end end describe Puppet::Node, " when merging facts" do before do @node = Puppet::Node.new("testnode") end it "should prefer parameters already set on the node over facts from the node" do @node.parameters = {"one" => "a"} @node.fact_merge("one" => "c") @node.parameters["one"].should == "a" end it "should add passed parameters to the parameter list" do @node.parameters = {"one" => "a"} @node.fact_merge("two" => "b") @node.parameters["two"].should == "b" end end