Op dinsdag 13 december 2016 11:54:29 UTC+1 schreef Henrik Lindberg: > > On 12/12/16 11:11, Michel Verbraak wrote: > > I have been googling around to find an answer but was not able to find > it. > > > > I have created my own custom type in puppet. According to the > > documentation here Puppet Resource Types manual > > < > https://github.com/puppetlabs/puppet-specifications/blob/master/language/resource_types.md>. > > > > This type creates a config file and in it I would like to add as comment > > lines information from where the resource is called/created. > > > > I want to get the filename, classname, linenumber of the puppet class > > and pp file calling this custom type (resource)? > > > > I know in Ruby I can use the "caller" function/variable/object to get a > > stack trace. But when I do this in my custom type I get a stack trace > > from Ruby and not Puppet. > > > > For example I have the following code: > > > > # File my_module/manifests/my_module.pp > > class my_module{ > > > > my_module_type( {'aname':;} > > } > > > > # File my_module/lib/puppet/type/my_module_type.pp > > Puppet::Type.newtype(:my_module_type) do > > newparam(:trace) do > > defaultto caller.inspect > > end > > end > > > > So "caller.inspect" produces: > > > > > ["/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:136:in > > > `class_eval'", > > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:136:in > > `genthing'", > > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:36:in > > `genclass'", > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/type.rb:459:in > > `newparam'", > > "/vagrant/site/my_module/lib/puppet/type/my_module_type.rb:69:in `block > > in <top (required)>'", > > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:136:in > > `c...] > > > > It nicely shows a stack trace of the different puppet ruby files used. > > But what I would like is something like: > > > > [ my_module/manifests/my_module.pp:3:in "class my_module", .....] > > > > Is this possible? If so how? > > > > The two locations you are trying to tie together are very far apart. > The creation of the resource takes place in a .pp file parsed and > evaluated by the compiler (typically on the master side). Much later the > agent side is acting on a instance of your resource type. That instance > was recreated from the information in the catalog that the compiler > produced. > > The catalog contains file and line information for resources. > (In some versions of puppet this information is missing if the resources > were created with the create_resources function). > > IIRC, you can get them via methods file() and line() on the resource. > > As you already found out, the caller of the actual logic on the agent > side is something completely different. > > - henrik > > > Regards, > > > > Michel. > > > > > > -- > > 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] <javascript:> > > <mailto:[email protected] <javascript:>>. > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/puppet-users/cef67564-c584-4014-b21b-df28308418a5%40googlegroups.com > > > < > https://groups.google.com/d/msgid/puppet-users/cef67564-c584-4014-b21b-df28308418a5%40googlegroups.com?utm_medium=email&utm_source=footer>. > > > > For more options, visit https://groups.google.com/d/optout. > > > -- > > Visit my Blog "Puppet on the Edge" > http://puppet-on-the-edge.blogspot.se/ >
Op dinsdag 13 december 2016 11:54:29 UTC+1 schreef Henrik Lindberg: > > On 12/12/16 11:11, Michel Verbraak wrote: > > I have been googling around to find an answer but was not able to find > it. > > > > I have created my own custom type in puppet. According to the > > documentation here Puppet Resource Types manual > > < > https://github.com/puppetlabs/puppet-specifications/blob/master/language/resource_types.md>. > > > > This type creates a config file and in it I would like to add as comment > > lines information from where the resource is called/created. > > > > I want to get the filename, classname, linenumber of the puppet class > > and pp file calling this custom type (resource)? > > > > I know in Ruby I can use the "caller" function/variable/object to get a > > stack trace. But when I do this in my custom type I get a stack trace > > from Ruby and not Puppet. > > > > For example I have the following code: > > > > # File my_module/manifests/my_module.pp > > class my_module{ > > > > my_module_type( {'aname':;} > > } > > > > # File my_module/lib/puppet/type/my_module_type.pp > > Puppet::Type.newtype(:my_module_type) do > > newparam(:trace) do > > defaultto caller.inspect > > end > > end > > > > So "caller.inspect" produces: > > > > > ["/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:136:in > > > `class_eval'", > > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:136:in > > `genthing'", > > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:36:in > > `genclass'", > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/type.rb:459:in > > `newparam'", > > "/vagrant/site/my_module/lib/puppet/type/my_module_type.rb:69:in `block > > in <top (required)>'", > > > "/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/classgen.rb:136:in > > `c...] > > > > It nicely shows a stack trace of the different puppet ruby files used. > > But what I would like is something like: > > > > [ my_module/manifests/my_module.pp:3:in "class my_module", .....] > > > > Is this possible? If so how? > > > > The two locations you are trying to tie together are very far apart. > The creation of the resource takes place in a .pp file parsed and > evaluated by the compiler (typically on the master side). Much later the > agent side is acting on a instance of your resource type. That instance > was recreated from the information in the catalog that the compiler > produced. > > The catalog contains file and line information for resources. > (In some versions of puppet this information is missing if the resources > were created with the create_resources function). > > IIRC, you can get them via methods file() and line() on the resource. > > As you already found out, the caller of the actual logic on the agent > side is something completely different. > > - henrik > > > Regards, > > > > Michel. > > > > > > -- > > 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] <javascript:> > > <mailto:[email protected] <javascript:>>. > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/puppet-users/cef67564-c584-4014-b21b-df28308418a5%40googlegroups.com > > > < > https://groups.google.com/d/msgid/puppet-users/cef67564-c584-4014-b21b-df28308418a5%40googlegroups.com?utm_medium=email&utm_source=footer>. > > > > For more options, visit https://groups.google.com/d/optout. > > > -- > > Visit my Blog "Puppet on the Edge" > http://puppet-on-the-edge.blogspot.se/ Thank you very much. Exactly what I was looking for. I also experimented with a horrible: begin fail Puppet::ParseError, "dummy" rescue => detail self[:trace] = detail end construction. It worked but the methods you mentioned are much nicer. -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/ec0f6099-6e18-44f8-b434-6c729cb77b6c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
