Python yaml help

56 views
Skip to first unread message

Mohamed Lrhazi

unread,
Oct 12, 2011, 11:01:28 AM10/12/11
to puppet...@googlegroups.com
Sorry for being off topic. am trying the following and yaml fails to
construct the object:

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.

Jacob Helwig

unread,
Oct 12, 2011, 5:04:05 PM10/12/11
to puppet...@googlegroups.com

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

signature.asc

Mohamed Lrhazi

unread,
Oct 12, 2011, 5:13:36 PM10/12/11
to puppet...@googlegroups.com

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.

Jacob Helwig

unread,
Oct 12, 2011, 5:23:03 PM10/12/11
to puppet...@googlegroups.com

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

signature.asc

Mohamed Lrhazi

unread,
Oct 12, 2011, 11:24:21 PM10/12/11
to puppet...@googlegroups.com
I guessed my way into making this work, by massaging puppet's yaml to
fit my understanding of Python's yaml lib:


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.

Reply all
Reply to author
Forward
0 new messages