Try to make extractnodeinfo accept more than one level of hash keys
[mirror/dsa-puppet.git] / files / etc / puppet / lib / puppet / parser / functions / extractnodeinfo.rb
index d12386f..74999dc 100644 (file)
@@ -1,13 +1,17 @@
 module Puppet::Parser::Functions
   newfunction(:extractnodeinfo, :type => :rvalue) do |args|
 
-    nodeinfo = args[0]
-    key      = args[1]
+    nodeinfo = args.shift
 
-    if nodeinfo.has_key?(key)
-      return nodeinfo[key]
-    else
-      return "false"
+    ni = nodeinfo
+    keys_done = []
+
+    args.each do |key|
+      raise Puppet::ParseError, "nodeinfo is not a hash at #{keys_done.join('->')}" unless ni.kind_of?(Hash)
+      return false unless ni.has_key?(key)
+      ni = ni[key]
+      keys_done << key
     end
+    return ni
   end
 end