#!/usr/bin/ruby module Puppet::Parser::Functions newfunction(:concatenate, :type => :rvalue) do |args| directory = args[0] # optional argument to add include messages # comment = args[1] # concatenation directory concatenatedir = "/var/lib/puppet/concatenate" # initialize content content = "" Dir[ "#{concatenatedir}/#{directory}/*" ].each do |filepath| if filepath =~ /\d\d_\S+/ # get class name file_class = filepath.sub(/.*\d\d_(\S+)/,'\1') # check if class is defined #method = Puppet::Parser::Functions.function(:defined) #if send(method,file_class) system("grep '^#{file_class}$' /etc/puppet/classes.txt") if $?==0 # include file begin file = File.new(filepath, "r") while (line = file.gets) content << "#{line}" end file.close rescue => err raise Puppet::ParseError, err err end else puts "I: Class #{file_class} is not defined. Not including #{filepath}" end else puts "W: #{filepath} does not have a correct name and will not be included." end end return content end end