diff options
-rw-r--r-- | bool2num.rb | 36 | ||||
-rw-r--r-- | load_variables.rb | 14 |
2 files changed, 45 insertions, 5 deletions
diff --git a/bool2num.rb b/bool2num.rb new file mode 100644 index 0000000..c197b17 --- /dev/null +++ b/bool2num.rb @@ -0,0 +1,36 @@ +# +# bool2num.rb +# + +module Puppet::Parser::Functions + newfunction(:bool2num, :type => :rvalue, :doc => <<-EOS + EOS + ) do |arguments| + + raise(Puppet::ParseError, "bool2num(): Wrong number of arguments " + + "given (#{arguments.size} for 1)") if arguments.size < 1 + + boolean = arguments[0] + + result = case boolean + # + # This is how undef looks like in Puppet ... + # We yield 0 (or false if you wish) in this case. + # + when /^$/, '' then '0' + when /^(1|t|true)$/ then '1' + when /^(0|f|false)$/ then '0' + # This is not likely to happen ... + when /^(undef|undefined)$/ then '0' + # We may get real boolean values as well ... + when true then '1' + when false then '0' + else + raise(Puppet::ParseError, 'bool2num(): Unknown type of boolean given') + end + + return result + end +end + +# vim: set ts=2 sw=2 et : diff --git a/load_variables.rb b/load_variables.rb index 95dcc90..a28c64b 100644 --- a/load_variables.rb +++ b/load_variables.rb @@ -43,8 +43,8 @@ This will result in a variable $foo being added and ready for use. EOS ) do |arguments| - raise(Puppet::ParseError, "Wrong number of arguments " + - "given (#{arguments.size} for 2)") if arguments.size < 2 + raise(Puppet::ParseError, "load_variables(): Wrong number of " + + "arguments given (#{arguments.size} for 2)") if arguments.size < 2 data = {} @@ -56,17 +56,21 @@ This will result in a variable $foo being added and ready for use. begin data = YAML.load_file(file) rescue => error - raise(Puppet::ParseError, "Unable to load data " + + raise(Puppet::ParseError, "load_variables(): Unable to load data " + "from the file `%s': %s" % file, error.to_s) end - raise(Puppet::ParseError, "Data in the file `%s' " + + raise(Puppet::ParseError, "load_variables(): Data in the file `%s' " + "is not a hash" % file) unless data.is_a?(Hash) data = ((data[key] and data[key].is_a?(Hash)) ? data[key] : {}) if key end - data.each { |param, value| setvar(param, strinterp(value)) } + data.each do |param, value| + value = strinterp(value) # Evaluate any interpolated variable names ... + + setvar(param, value) + end end end |