I've been working on a project with similar goals and ran into the same thing. The core of the issue is that there are two catalogs, the resource catalog and the RAL catalog. The resource catalog is what the Puppet compiler emits and contains Puppet::Resource instances; this is what's actually sent to the agent and what you'll see if you run `puppet master --compile`. The RAL catalog is generated when the catalog is actually being applied ( https://github.com/puppetlabs/puppet/blob/master/lib/puppet/configurer.rb#L106), and converts Puppet::Resource instances to Puppet::Type instances. Puppet::Resource instances are meant to be serialized, but Puppet::Type instances aren't - I'm pretty sure that the error you're seeing is because Puppet is trying to serialize Puppet::Type instances that don't have the correct method defined.
There is a document in the Puppet source ( https://github.com/puppetlabs/puppet/blob/master/docs/catalogs.md) that contains a bit more information about the different types of catalogs. That being said there's a couple of ways of converting things around to a more easily serializable format. One option is to individually convert Puppet::Type instances to Puppet::Resource instances as you find them; I've been doing them with something like this: Puppet::Type.type(:service).instances.map { |res| res.to_resource } Alternately, if you have an existing catalog and you want to convert and serialize that wholesale, you should be able to use `Puppet::Resource::Catalog#to_resource` ( https://github.com/puppetlabs/puppet/blob/master/lib/puppet/resource/catalog.rb#L490) to do this. I haven't tested this out but it seems like it should work. There are a couple of caveats in this - for instance things get a little bit screwy with some resource types such as files, but if you run into issues with too many parameters being generated/not enough parameters being generated, let me know. If you make progress in this area let me know; since I'm doing some poking around in this area I would be interested in seeing what you find out as well. On Sat, Mar 19, 2016 at 12:04 PM Trevor Vaughan <[email protected]> wrote: > Hi All, > > I'm doing some experiments with extracted catalog snippets but seem to be > having issues on saving the new catalog after the fact. > > I have a Puppet::Resource::Catalog object that has content and > relationships but when I attempt to save it using 'to_pson' I get an > "undefined method `to_pson_data_hash`" for any given resource in the > catalog. > > As an aside, if I just run @resource.catalog.to_pson from within a > provider, I end up with the same error. > > Any help would be appreciated. > > Thanks, > > Trevor > > -- > Trevor Vaughan > Vice President, Onyx Point, Inc > (410) 541-6699 > > -- This account not approved for unencrypted proprietary information -- > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Developers" 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-dev/CANs%2BFoUnc589eJ3nujpF0G38%3D6hAHOMHVShU7xRU9KfzS%2BTjQg%40mail.gmail.com > <https://groups.google.com/d/msgid/puppet-dev/CANs%2BFoUnc589eJ3nujpF0G38%3D6hAHOMHVShU7xRU9KfzS%2BTjQg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Adrien Thebo | Puppet Labs -- You received this message because you are subscribed to the Google Groups "Puppet Developers" 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-dev/CALVJ9SKOK4HyZyOMYT%3DF31m7GxdL0jVvmYvKhzUAPBb5qhn0wg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
