I'm having a difficult time with a custom function:

module Puppet::Parser::Functions
  newfunction(:subpaths, :type => :rvalue) do |args|
    result = []
    args.flatten.each do |path|
      temp_path = path
      begin
        result << temp_path
        temp_path = File.dirname(temp_path)
      end while (temp_path != "/" and temp_path != ".")
    end
    return result.uniq
  end
end



If I try calling this in a Puppet manifest:

class testing {

subpaths("/usr/local/bin")
subpaths("/usr/local/bin", "/var/log/foo")
 subpaths(["/usr/local/bin","/var/log/foo"])

}


and I get that to run on a host, with no other classes called, I get an
error

 Error 400 on SERVER: can't convert Array into String

I tried changing my custom function to


module Puppet::Parser::Functions
  newfunction(:subpaths, :type => :rvalue) do |args|
    return ""
  end
end


and it still does the same thing.


I see in the bug tracker that several times in the past the ability to pass
in arrays has been broken through inadvertent changes, but I see no recent
discussion on whether you _should_ be able to pass arrays in; in other
words, it could be an intentional design, in which case I can just try
something else.

However, when I browse the source code in
/usr/lib/ruby/site_ruby/1.8/puppet/parser/functions, I don't see any magic
in the functions that accept arrays, except that many seem to use .flatten
on the args array passed in.

I tried that in my initial attempt, and it seems that it fails before it
even gets to calling the custom function.

I've tried looking in the mailing lists and searching the web, but most
mentions of this seem to be for older pre-2.x versions of Puppet.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to