Thanks... I ended up with this:
> #
> # my_puppet_doc.rb
> #
>
> require 'puppet/util/rdoc'
>
> module Puppet::Parser::Functions
> newfunction(:my_puppet_doc, :type => :rvalue, :doc => <<-EOS
>
> This function returns the 'puppet doc' header from the module
> that called it. Usage:
>
> $doc = my_puppet_doc()
>
> EOS
> ) do |args|
> # Get the filename of the manifest that called us
> f = source.file
>
> # Create a Puppet file parser object
> parser =
> Puppet::Parser::Parser.new(Puppet::Node::Environment.new(Puppet[:environment]))
> parser.file = f
> ast = parser.parse
>
> # Now, for the manifest walk through it line by line and parse it.
> # (taken from Puppet::Util::RDoc.output)
> astobj = []
> ast.instantiate('').each do |resource_type|
> astobj << resource_type if resource_type.file == f
> end
>
> # Now, grab the @doc object and return it
> # TODO: Implement some clean parsing to remove the puppet doc formatting
> return astobj[0].doc
> end
> end
Its not perfect ... there are two big issues.
1. We manually walk through the puppet doc parsing process because the
Puppet::Utils::RDoc class *always* outputs to console or file, rather than
giving you an ability to just return the string.
2. I probably want to run the doc object through a parser to strip out the
various control characters.
Other than that, it allows us to add docs to our node MOTD files like this:
motd::add { $name: content => my_puppet_doc() }
--Matt
On Feb 22, 2013, at 10:15 AM, Ken Barber <[email protected]> wrote:
> I do this kind of thing here:
>
> https://github.com/puppetlabs/puppetlabs-kwalify/blob/master/lib/puppet/parser/functions/validate_resource.rb#L24
>
> ken.
>
> On Fri, Feb 22, 2013 at 6:05 PM, Matt W <[email protected]> wrote:
>> I'm trying to create a function that I can call in a manifest like this:
>>
>> $doc = doc('apache::service')
>>
>> In the function, I want it to actually find the filename for the
>> 'apache::service' class... from there, I'm going to run some code that will
>> generate the puppet-doc in text format, and then return it in a variable.
>> Ultimately this is so that I can have nodes self-document themselves.
>>
>> Right now I'm stuck on figuring out the filename from the classname though.
>> Anyone have any tips on this? Is there a function in the Puppet ruby code
>> somewhere that will translate a class-name into a file path?
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Puppet Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/puppet-users?hl=en.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/puppet-users?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.