]> git.donarmstrong.com Git - dsa-puppet.git/commitdiff
Restore extractnodeinfo support for extracing 2nd and higher level hash keys, as...
authorPeter Palfrader <peter@palfrader.org>
Wed, 2 Mar 2011 17:54:37 +0000 (18:54 +0100)
committerPeter Palfrader <peter@palfrader.org>
Wed, 2 Mar 2011 17:54:37 +0000 (18:54 +0100)
modules/puppetmaster/lib/puppet/parser/functions/getfromhash.rb

index e948929d6a010add34e71cd9f129160848a2d173..6e50ba14e6d5b624894d7329f48ccc23c461238f 100644 (file)
@@ -1,16 +1,21 @@
 module Puppet::Parser::Functions
   newfunction(:getfromhash, :type => :rvalue) do |args|
-    h = args.shift
-    key = args.shift
+    x = args.shift
+    keys = args
+    keys_done = []
 
-    raise Puppet::ParseError, "argument is not a hash" unless h.kind_of?(Hash)
-    if h.has_key?(key)
-      ans = h[key]
-    else
-      ans = false
+    # allows getting of hash[key] or even hash[key1][key2] etc.
+    keys.each do |key|
+      raise Puppet::ParseError, "argument[#{keys_done.join('][')}] is not a hash." unless x.kind_of?(Hash)
+      unless h.has_key?(key)
+        x = false
+        break
+      end
+      x = x[key]
+      keys_done << key
     end
 
-    return ans
+    return x
   end
 end
 # vim:set et: