Add multi_source_template function
authorJerome Charaoui <jcharaoui@cmaisonneuve.qc.ca>
Fri, 24 Sep 2010 18:41:07 +0000 (14:41 -0400)
committerJerome Charaoui <jcharaoui@cmaisonneuve.qc.ca>
Fri, 24 Sep 2010 18:41:07 +0000 (14:41 -0400)
lib/puppet/parser/functions/multi_source_template.rb [new file with mode: 0644]

diff --git a/lib/puppet/parser/functions/multi_source_template.rb b/lib/puppet/parser/functions/multi_source_template.rb
new file mode 100644 (file)
index 0000000..e075320
--- /dev/null
@@ -0,0 +1,29 @@
+module Puppet::Parser::Functions
+    require 'erb'
+
+    newfunction(:multi_source_template, :type => :rvalue) do |args|
+        contents = nil
+        environment = compiler.environment
+        sources = args
+
+        sources.each do |file|
+            Puppet.debug("Looking for #{file} in #{environment}")
+            if filename = Puppet::Parser::Files.find_template(file, environment.to_s)
+                wrapper = Puppet::Parser::TemplateWrapper.new(self)
+                wrapper.file = file
+
+                begin
+                     contents = wrapper.result
+                rescue => detail
+                     raise Puppet::ParseError, "Failed to parse template %s: %s" % [file, detail]
+                end
+
+                break
+            end
+        end
+
+        raise Puppet::ParseError, "multi_source_template: No match found for files: #{sources.join(', ')}" if contents == nil
+
+        contents
+    end
+end