diff options
| author | Luke Kanies <luke@madstop.com> | 2007-08-22 17:57:28 -0500 |
|---|---|---|
| committer | Luke Kanies <luke@madstop.com> | 2007-08-22 17:57:28 -0500 |
| commit | 8b3361afae35cfb65754d7bd9aff5b820ed714f0 (patch) | |
| tree | 0a6fe8ce4029a8ea8bb82ab80dfb57cb5b6c20cc | |
| parent | f1727f18ab933df9ecbecc2da8fad72eb441e0d5 (diff) | |
| download | puppet-8b3361afae35cfb65754d7bd9aff5b820ed714f0.tar.gz puppet-8b3361afae35cfb65754d7bd9aff5b820ed714f0.tar.xz puppet-8b3361afae35cfb65754d7bd9aff5b820ed714f0.zip | |
The last commits before I actually start on the multi-environment support. There are still failing tests, but apparently only those that are also failing in trunk.
| -rw-r--r-- | lib/puppet/dsl.rb | 2 | ||||
| -rw-r--r-- | lib/puppet/network/handler/configuration.rb | 2 | ||||
| -rw-r--r-- | lib/puppet/network/handler/node.rb | 84 | ||||
| -rw-r--r-- | lib/puppet/node.rb | 40 | ||||
| -rw-r--r-- | lib/puppet/parser/configuration.rb | 1 | ||||
| -rwxr-xr-x | test/language/configuration.rb | 2 | ||||
| -rwxr-xr-x | test/network/handler/node.rb | 68 | ||||
| -rwxr-xr-x | test/network/xmlrpc/processor.rb | 2 | ||||
| -rwxr-xr-x | test/other/node.rb | 75 |
9 files changed, 143 insertions, 133 deletions
diff --git a/lib/puppet/dsl.rb b/lib/puppet/dsl.rb index 3a7a7f059..bd0fcbf96 100644 --- a/lib/puppet/dsl.rb +++ b/lib/puppet/dsl.rb @@ -257,7 +257,7 @@ module Puppet @interp = Puppet::Parser::Interpreter.new :Code => "" # Load the class, so the node object class is available. require 'puppet/network/handler/node' - @node = Puppet::Network::Handler::Node::SimpleNode.new(Facter.value(:hostname)) + @node = Puppet::Node.new(Facter.value(:hostname)) @node.parameters = Facter.to_hash @interp = Puppet::Parser::Interpreter.new :Code => "" @config = Puppet::Parser::Configuration.new(@node, @interp.parser) diff --git a/lib/puppet/network/handler/configuration.rb b/lib/puppet/network/handler/configuration.rb index 3539ab9a4..7e91d74d6 100644 --- a/lib/puppet/network/handler/configuration.rb +++ b/lib/puppet/network/handler/configuration.rb @@ -193,7 +193,7 @@ class Puppet::Network::Handler end # Mark that the node has checked in. FIXME this needs to be moved into - # the SimpleNode class, or somewhere that's got abstract backends. + # the Node class, or somewhere that's got abstract backends. def update_node_check(node) if Puppet.features.rails? and Puppet[:storeconfigs] Puppet::Rails.connect diff --git a/lib/puppet/network/handler/node.rb b/lib/puppet/network/handler/node.rb index a21d571b0..2c4d3e1b5 100644 --- a/lib/puppet/network/handler/node.rb +++ b/lib/puppet/network/handler/node.rb @@ -2,74 +2,14 @@ # Copyright (c) 2007. All rights reserved. require 'puppet/util' +require 'puppet/node' require 'puppet/util/classgen' require 'puppet/util/instance_loader' # Look up a node, along with all the details about it. class Puppet::Network::Handler::Node < Puppet::Network::Handler - # A simplistic class for managing the node information itself. - class SimpleNode - attr_accessor :name, :classes, :parameters, :environment, :source, :ipaddress, :names - attr_reader :time - - def initialize(name, options = {}) - @name = name - - # Provide a default value. - @names = [name] - - if classes = options[:classes] - if classes.is_a?(String) - @classes = [classes] - else - @classes = classes - end - else - @classes = [] - end - - @parameters = options[:parameters] || {} - - unless @environment = options[:environment] - if env = Puppet[:environment] and env != "" - @environment = env - end - end - - @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 - desc "Retrieve information about nodes." - extend Puppet::Util::ClassGen - extend Puppet::Util::InstanceLoader - - # A simple base module we can use for modifying how our node sources work. - module SourceBase - include Puppet::Util::Docs - end - - @interface = XMLRPC::Service::Interface.new("nodes") { |iface| - iface.add_method("string details(key)") - iface.add_method("string parameters(key)") - iface.add_method("string environment(key)") - iface.add_method("string classes(key)") - } - - # Set up autoloading and retrieving of reports. - autoload :node_source, 'puppet/node_source' - - attr_reader :source - # Add a new node source. def self.newnode_source(name, options = {}, &block) name = symbolize(name) @@ -109,6 +49,26 @@ class Puppet::Network::Handler::Node < Puppet::Network::Handler rmclass(name, :hash => instance_hash(:node_source)) end + extend Puppet::Util::ClassGen + extend Puppet::Util::InstanceLoader + + # A simple base module we can use for modifying how our node sources work. + module SourceBase + include Puppet::Util::Docs + end + + @interface = XMLRPC::Service::Interface.new("nodes") { |iface| + iface.add_method("string details(key)") + iface.add_method("string parameters(key)") + iface.add_method("string environment(key)") + iface.add_method("string classes(key)") + } + + # Set up autoloading and retrieving of reports. + autoload :node_source, 'puppet/node_source' + + attr_reader :source + # Return a given node's classes. def classes(key) if node = details(key) @@ -218,7 +178,7 @@ class Puppet::Network::Handler::Node < Puppet::Network::Handler # Short-hand for creating a new node, so the node sources don't need to # specify the constant. def newnode(options) - SimpleNode.new(options) + Puppet::Node.new(options) end # Look up the node facts from our fact handler. diff --git a/lib/puppet/node.rb b/lib/puppet/node.rb new file mode 100644 index 000000000..3bbbe5979 --- /dev/null +++ b/lib/puppet/node.rb @@ -0,0 +1,40 @@ +# A simplistic class for managing the node information itself. +class Puppet::Node + attr_accessor :name, :classes, :parameters, :environment, :source, :ipaddress, :names + attr_reader :time + + def initialize(name, options = {}) + @name = name + + # Provide a default value. + @names = [name] + + if classes = options[:classes] + if classes.is_a?(String) + @classes = [classes] + else + @classes = classes + end + else + @classes = [] + end + + @parameters = options[:parameters] || {} + + unless @environment = options[:environment] + if env = Puppet[:environment] and env != "" + @environment = env + end + end + + @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/lib/puppet/parser/configuration.rb b/lib/puppet/parser/configuration.rb index ea784da05..44fb8c476 100644 --- a/lib/puppet/parser/configuration.rb +++ b/lib/puppet/parser/configuration.rb @@ -5,6 +5,7 @@ require 'puppet/external/gratr/digraph' require 'puppet/external/gratr/import' require 'puppet/external/gratr/dot' +require 'puppet/node' require 'puppet/util/errors' # Maintain a graph of scopes, along with a bunch of data diff --git a/test/language/configuration.rb b/test/language/configuration.rb index fbdf68e73..a17b5a7ae 100755 --- a/test/language/configuration.rb +++ b/test/language/configuration.rb @@ -15,7 +15,7 @@ class TestConfiguration < Test::Unit::TestCase Config = Puppet::Parser::Configuration Scope = Puppet::Parser::Scope Node = Puppet::Network::Handler.handler(:node) - SimpleNode = Node::SimpleNode + SimpleNode = Puppet::Node def mknode(name = "foo") @node = SimpleNode.new(name) diff --git a/test/network/handler/node.rb b/test/network/handler/node.rb index 745c7470e..d5c98fec6 100755 --- a/test/network/handler/node.rb +++ b/test/network/handler/node.rb @@ -12,7 +12,7 @@ require 'puppet/network/handler/node' module NodeTesting include PuppetTest Node = Puppet::Network::Handler::Node - SimpleNode = Puppet::Network::Handler::Node::SimpleNode + SimpleNode = Puppet::Node def mk_node_mapper # First, make sure our nodesearch command works as we expect @@ -342,72 +342,6 @@ class TestNodeHandler < Test::Unit::TestCase end end -class TestSimpleNode < Test::Unit::TestCase - include NodeTesting - - # Make sure we get all the defaults correctly. - def test_simplenode_initialize - node = nil - assert_nothing_raised("could not create a node without classes or parameters") do - node = SimpleNode.new("testing") - end - assert_equal("testing", node.name, "Did not set name correctly") - assert_equal({}, node.parameters, "Node parameters did not default correctly") - assert_equal([], node.classes, "Node classes did not default correctly") - assert_instance_of(Time, node.time, "Did not set the creation time") - - # Now test it with values for both - params = {"a" => "b"} - classes = %w{one two} - assert_nothing_raised("could not create a node with classes and parameters") do - node = SimpleNode.new("testing", :parameters => params, :classes => classes) - end - assert_equal("testing", node.name, "Did not set name correctly") - assert_equal(params, node.parameters, "Node parameters did not get set correctly") - assert_equal(classes, node.classes, "Node classes did not get set correctly") - - # And make sure a single class gets turned into an array - assert_nothing_raised("could not create a node with a class as a string") do - node = SimpleNode.new("testing", :classes => "test") - end - assert_equal(%w{test}, node.classes, "A node class string was not converted to an array") - - # Make sure we get environments - assert_nothing_raised("could not create a node with an environment") do - node = SimpleNode.new("testing", :environment => "test") - end - assert_equal("test", node.environment, "Environment was not set") - - # Now make sure we get the default env - Puppet[:environment] = "prod" - assert_nothing_raised("could not create a node with no environment") do - node = SimpleNode.new("testing") - end - assert_equal("prod", node.environment, "Did not get default environment") - - # But that it stays nil if there's no default env set - Puppet[:environment] = "" - assert_nothing_raised("could not create a node with no environment and no default env") do - node = SimpleNode.new("testing") - end - assert_nil(node.environment, "Got a default env when none was set") - - end - - # Verify that the node source wins over facter. - def test_fact_merge - node = SimpleNode.new("yay", :parameters => {"a" => "one", "b" => "two"}) - - assert_nothing_raised("Could not merge parameters") do - node.fact_merge("b" => "three", "c" => "yay") - end - params = node.parameters - assert_equal("one", params["a"], "Lost nodesource parameters in parameter merge") - assert_equal("two", params["b"], "Overrode nodesource parameters in parameter merge") - assert_equal("yay", params["c"], "Did not get facts in parameter merge") - end -end - # Test our configuration object. class TestNodeSources < Test::Unit::TestCase include NodeTesting diff --git a/test/network/xmlrpc/processor.rb b/test/network/xmlrpc/processor.rb index 101d268b2..6808d0100 100755 --- a/test/network/xmlrpc/processor.rb +++ b/test/network/xmlrpc/processor.rb @@ -64,7 +64,7 @@ class TestXMLRPCProcessor < Test::Unit::TestCase request.expects(:handler=).with("myhandler") request.expects(:method=).with("mymethod") - @processor.expects(:verify).times(2) + @processor.stubs(:verify) @processor.expects(:handle).with(request.call, "params", request.name, request.ip) diff --git a/test/other/node.rb b/test/other/node.rb new file mode 100755 index 000000000..b3f12d11d --- /dev/null +++ b/test/other/node.rb @@ -0,0 +1,75 @@ +#!/usr/bin/env ruby + +$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/ + +require 'mocha' +require 'puppettest' +require 'puppet/node' + +class TestNode < Test::Unit::TestCase + include PuppetTest + Node = Puppet::Node + + # Make sure we get all the defaults correctly. + def test_initialize + node = nil + assert_nothing_raised("could not create a node without classes or parameters") do + node = Node.new("testing") + end + assert_equal("testing", node.name, "Did not set name correctly") + assert_equal({}, node.parameters, "Node parameters did not default correctly") + assert_equal([], node.classes, "Node classes did not default correctly") + assert_instance_of(Time, node.time, "Did not set the creation time") + + # Now test it with values for both + params = {"a" => "b"} + classes = %w{one two} + assert_nothing_raised("could not create a node with classes and parameters") do + node = Node.new("testing", :parameters => params, :classes => classes) + end + assert_equal("testing", node.name, "Did not set name correctly") + assert_equal(params, node.parameters, "Node parameters did not get set correctly") + assert_equal(classes, node.classes, "Node classes did not get set correctly") + + # And make sure a single class gets turned into an array + assert_nothing_raised("could not create a node with a class as a string") do + node = Node.new("testing", :classes => "test") + end + assert_equal(%w{test}, node.classes, "A node class string was not converted to an array") + + # Make sure we get environments + assert_nothing_raised("could not create a node with an environment") do + node = Node.new("testing", :environment => "test") + end + assert_equal("test", node.environment, "Environment was not set") + + # Now make sure we get the default env + Puppet[:environment] = "prod" + assert_nothing_raised("could not create a node with no environment") do + node = Node.new("testing") + end + assert_equal("prod", node.environment, "Did not get default environment") + + # But that it stays nil if there's no default env set + Puppet[:environment] = "" + assert_nothing_raised("could not create a node with no environment and no default env") do + node = Node.new("testing") + end + assert_nil(node.environment, "Got a default env when none was set") + + end + + # Verify that the node source wins over facter. + def test_fact_merge + node = Node.new("yay", :parameters => {"a" => "one", "b" => "two"}) + + assert_nothing_raised("Could not merge parameters") do + node.fact_merge("b" => "three", "c" => "yay") + end + params = node.parameters + assert_equal("one", params["a"], "Lost nodesource parameters in parameter merge") + assert_equal("two", params["b"], "Overrode nodesource parameters in parameter merge") + assert_equal("yay", params["c"], "Did not get facts in parameter merge") + end +end + |
