diff options
Diffstat (limited to 'lib/puppet/node')
-rw-r--r-- | lib/puppet/node/environment.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/puppet/node/environment.rb b/lib/puppet/node/environment.rb new file mode 100644 index 000000000..ada7f4eea --- /dev/null +++ b/lib/puppet/node/environment.rb @@ -0,0 +1,45 @@ +# Model the environment that a node can operate in. This class just +# provides a simple wrapper for the functionality around environments. +class Puppet::Node::Environment + # Return the list of valid environments. Just looks them up in + # the settings. + def self.valid + Puppet.settings.value(:environments).split(",").collect { |e| e.to_sym } + end + + # Is the provided environment valid? + def self.valid?(name) + valid.include?(name.to_sym) + end + + @seen = {} + + # Return an existing environment instance, or create a new one, + # validating the environment name. + def self.new(name = nil) + name ||= Puppet.settings.value(:environment) + + raise ArgumentError, "Environment name must be specified" unless name + + raise(ArgumentError, "'%s' is not a valid environment" % name) unless valid?(name) + + symbol = name.to_sym + + return @seen[symbol] if @seen[symbol] + + obj = self.allocate + obj.send :initialize, symbol + @seen[symbol] = obj + end + + attr_reader :name + + # Return an environment-specific setting. + def [](param) + Puppet.settings.value(param, self.name) + end + + def initialize(name) + @name = name + end +end |