summaryrefslogtreecommitdiffstats
path: root/lib/puppet/network/handler/node.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/network/handler/node.rb')
-rw-r--r--lib/puppet/network/handler/node.rb242
1 files changed, 0 insertions, 242 deletions
diff --git a/lib/puppet/network/handler/node.rb b/lib/puppet/network/handler/node.rb
deleted file mode 100644
index c6ccc2eb6..000000000
--- a/lib/puppet/network/handler/node.rb
+++ /dev/null
@@ -1,242 +0,0 @@
-# Created by Luke A. Kanies on 2007-08-13.
-# 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
- desc "Retrieve information about nodes."
-
- # Create a singleton node handler
- def self.create
- unless @handler
- @handler = new
- end
- @handler
- end
-
- # Add a new node source.
- def self.newnode_source(name, options = {}, &block)
- name = symbolize(name)
-
- fact_merge = options[:fact_merge]
- mod = genmodule(name, :extend => SourceBase, :hash => instance_hash(:node_source), :block => block)
- mod.send(:define_method, :fact_merge?) do
- fact_merge
- end
- mod
- end
-
- # Collect the docs for all of our node sources.
- def self.node_source_docs
- docs = ""
-
- # Use this method so they all get loaded
- instance_loader(:node_source).loadall
- loaded_instances(:node_source).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
- mod = self.node_source(name)
- docs += "%s\n%s\n" % [name, "-" * name.to_s.length]
-
- docs += Puppet::Util::Docs.scrub(mod.doc) + "\n\n"
- end
-
- docs
- end
-
- # List each of the node sources.
- def self.node_sources
- instance_loader(:node_source).loadall
- loaded_instances(:node_source)
- end
-
- # Remove a defined node source; basically only used for testing.
- def self.rm_node_source(name)
- 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.
- instance_load :node_source, 'puppet/node_source'
-
- attr_reader :source
-
- # Return a given node's classes.
- def classes(key)
- if node = details(key)
- node.classes
- else
- nil
- end
- end
-
- # Return an entire node configuration. This uses the 'nodesearch' method
- # defined in the node_source to look for the node.
- def details(key, client = nil, clientip = nil)
- return nil unless key
- if node = cached?(key)
- return node
- end
- facts = node_facts(key)
- node = nil
- names = node_names(key, facts)
- names.each do |name|
- name = name.to_s if name.is_a?(Symbol)
- if node = nodesearch(name) and @source != "none"
- Puppet.info "Found %s in %s" % [name, @source]
- break
- end
- end
-
- # If they made it this far, we haven't found anything, so look for a
- # default node.
- unless node or names.include?("default")
- if node = nodesearch("default")
- Puppet.notice "Using default node for %s" % key
- end
- end
-
- if node
- node.source = @source
- node.names = names
-
- # Merge the facts into the parameters.
- if fact_merge?
- node.fact_merge(facts)
- end
-
- cache(node)
-
- return node
- else
- return nil
- end
- end
-
- # Return a given node's environment.
- def environment(key, client = nil, clientip = nil)
- if node = details(key)
- node.environment
- else
- nil
- end
- end
-
- # Create our node lookup tool.
- def initialize(hash = {})
- @source = hash[:Source] || Puppet[:node_source]
-
- unless mod = self.class.node_source(@source)
- raise ArgumentError, "Unknown node source '%s'" % @source
- end
-
- extend(mod)
-
- super
-
- # We cache node info for speed
- @node_cache = {}
- end
-
- # Try to retrieve a given node's parameters.
- def parameters(key, client = nil, clientip = nil)
- if node = details(key)
- node.parameters
- else
- nil
- end
- end
-
- private
-
- # Store the node to make things a bit faster.
- def cache(node)
- @node_cache[node.name] = node
- end
-
- # If the node is cached, return it.
- def cached?(name)
- # Don't use cache when the filetimeout is set to 0
- return false if [0, "0"].include?(Puppet[:filetimeout])
-
- if node = @node_cache[name] and Time.now - node.time < Puppet[:filetimeout]
- return node
- else
- return false
- end
- end
-
- # Create/cache a fact handler.
- def fact_handler
- unless defined?(@fact_handler)
- @fact_handler = Puppet::Network::Handler.handler(:facts).new
- end
- @fact_handler
- end
-
- # Short-hand for creating a new node, so the node sources don't need to
- # specify the constant.
- def newnode(options)
- Puppet::Node.new(options)
- end
-
- # Look up the node facts from our fact handler.
- def node_facts(key)
- if facts = fact_handler.get(key)
- facts
- else
- {}
- end
- end
-
- # Calculate the list of node names we should use for looking
- # up our node.
- def node_names(key, facts = nil)
- facts ||= node_facts(key)
- names = []
-
- if hostname = facts["hostname"]
- unless hostname == key
- names << hostname
- end
- else
- hostname = key
- end
-
- if fqdn = facts["fqdn"]
- hostname = fqdn
- names << fqdn
- end
-
- # Make sure both the fqdn and the short name of the
- # host can be used in the manifest
- if hostname =~ /\./
- names << hostname.sub(/\..+/,'')
- elsif domain = facts['domain']
- names << hostname + "." + domain
- end
-
- # Sort the names inversely by name length.
- names.sort! { |a,b| b.length <=> a.length }
-
- # And make sure the key is first, since that's the most
- # likely usage.
- ([key] + names).uniq
- end
-end