The inventory document, from Puppet dashboard inventory service, looks like:
--- !ruby/object:Puppet::Node::Facts
name: pirates.uis.example.com
values:
productname: VMware Virtual Platform
kernelmajversion: "2.6"
My code:
class PuppetFacts(yaml.YAMLObject):
yaml_tag = u'!ruby/object:Puppet::Node::Facts'
def __init__(self, name, values):
self.name = name
self.values = values
The attempt to load the doc results in:
ConstructorError: could not determine a constructor for the tag
'!ruby/object:Puppet::Node::Facts'
in "<byte string>", line 1, column 5
Thanks a lot,
Mohamed.
Hm. Looks like you're doing exactly what was suggested in a couple of
older threads[0][1] about exactly this kind of issue.
Could it be a loading issue where your class isn't actually getting
loaded?
[0] https://groups.google.com/d/topic/puppet-dev/bWMaEHZIBNg/discussion
[1] https://groups.google.com/forum/#!topic/puppet-users/7e2modoyywA
--
Jacob Helwig
It does sound like it... am have not used the python yaml lib before...
Here is an entire script reproducing the issue: http://paste.ubuntu.com/706994/
Thanks a lot,
Mohamed.
With everything in the same file, it shouldn't be the kind of loading
issue I was thinking about.
It's been so long since I've done any Python that I don't think I'll be
much help. Hopefully someone with Python skills sharper than my
extremely rusty ones will chime in.
--
Jacob Helwig
facts_raw2 = facts_raw.replace(
"""--- !ruby/object:Puppet::Node::Facts""",
"""--- !!python/object:__main__.PuppetFacts""")
facts_raw2 = facts_raw2.replace('"--- !ruby/sym _timestamp":',
'timestamp:')
Thanks,
Mohamed.