Does anyone have any idea how to work around the following error? yaml.constructor.ConstructorError: expected a mapping node, but found scalar in "/etc/puppet/reports/albacore/201108292003.yaml", line 3, column 5 i''ve created classes to handle all the mapping node data (99% of the puppet report), but a few lines have this scalar node data that I have no idea how to handle/convert. Here are the classes for the mapping nodes: class PuppetReport(yaml.YAMLObject): yaml_tag = u''!ruby/object:Puppet::Transaction::Report'' def __init__(self, data): self.host = data["host"] self.logs = PuppetLog(data["logs"]) self.metrics = PuppetMetrics(data["metrics"]) self.time = data["time"] self.external_times = ruby_sym(data["external_times"]) self.resource_statuses PuppetResourceStatus(data["resource_statuses"]) def __repr__(self): return "(host=%r, logs=%r, metrics=%r, time=%r)" % (self.host, self.logs, self.metrics, self.time) class ruby_sym(yaml.YAMLObject): yaml_tag = u''!ruby/sym'' def __init__(self): self.attr = attr def __repr__(self): return "(attr=%r)" % (self.attr) class PuppetLog(yaml.YAMLObject): yaml_tag = u''!ruby/object:Puppet::Util::Log'' def __init__(self, log): self.source = log["source"] self.message = log["message"] self.tags = log["tags"] self.time = log["time"] def __repr__(self): return "(source=%r, message=%r, tags=%r, time=%r)" % (self.source, self.message, self.tags, self.time) class PuppetMetrics(yaml.YAMLObject): def __init__(self, metric): self.time = submetric(metric["time"]) self.resources = submetric(metric["resource"]) self.changes = submetric(metric["changes"]) self.events = submetric(metric["events"]) def __repr__(self): return "(time=%r, resource=%r, changes=%r, events=%r)" % (self.time, self.resource, self.changes, self.events) class submetric(yaml.YAMLObject): yaml_tag = u''!ruby/object:Puppet::Util::Metric'' def __init__(self, submetric): self.label = submetric["label"] self.name = submetric["name"] self.values = submetric["values"] def __repr__(self): return "(label=%r, name=%r, values=%r)" % (self.label, self.name, self.values) class PuppetResourceStatus(yaml.YAMLObject): yaml_tag = u''!ruby/object:Puppet::Resource::Status'' def __init__(self, resource_status): self.evaluation_time = resource_status["evaluation_time"] self.events = resource_status["events"] self.file = resource_status["file"] self.line = resource_status["line"] self.resource = resource_status["resource"] self.source_description = resource_status["source_description"] self.tags = resource_status["tags"] self.time = resource_status["time"] self.version = resource_status["version"] def __repr__(self): return "(evaluation=%r, events=%r, file=%r, line=%r, resource=%r, source_description=%r, tags=%r, time=%r, version=%r)" % (self.evaluation, self.events, self.file, self.line, self.resource, self.source_description, self.tags, self.time, self.version) -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Douglas Garstang
2011-Sep-04 20:24 UTC
Re: [Puppet Users] parsing yaml reports with python
I had the same problem. How did you handle the embedded Ruby objects? No solutions. It''s a shame that puppet is so Ruby-centric. :( Doug. On Fri, Sep 2, 2011 at 5:57 AM, nottings <scott.nottingham@gmail.com> wrote:> Does anyone have any idea how to work around the following error? > > yaml.constructor.ConstructorError: expected a mapping node, but found > scalar > in "/etc/puppet/reports/albacore/201108292003.yaml", line 3, column > 5 > > i''ve created classes to handle all the mapping node data (99% of the > puppet report), but a few lines have this scalar node data that I have > no idea how to handle/convert. Here are the classes for the mapping > nodes: > > class PuppetReport(yaml.YAMLObject): > yaml_tag = u''!ruby/object:Puppet::Transaction::Report'' > def __init__(self, data): > self.host = data["host"] > self.logs = PuppetLog(data["logs"]) > self.metrics = PuppetMetrics(data["metrics"]) > self.time = data["time"] > self.external_times = ruby_sym(data["external_times"]) > self.resource_statuses > PuppetResourceStatus(data["resource_statuses"]) > def __repr__(self): > return "(host=%r, logs=%r, metrics=%r, time=%r)" % (self.host, > self.logs, self.metrics, self.time) > > class ruby_sym(yaml.YAMLObject): > yaml_tag = u''!ruby/sym'' > def __init__(self): > self.attr = attr > def __repr__(self): > return "(attr=%r)" % (self.attr) > > class PuppetLog(yaml.YAMLObject): > yaml_tag = u''!ruby/object:Puppet::Util::Log'' > def __init__(self, log): > self.source = log["source"] > self.message = log["message"] > self.tags = log["tags"] > self.time = log["time"] > def __repr__(self): > return "(source=%r, message=%r, tags=%r, time=%r)" % (self.source, > self.message, self.tags, self.time) > > class PuppetMetrics(yaml.YAMLObject): > def __init__(self, metric): > self.time = submetric(metric["time"]) > self.resources = submetric(metric["resource"]) > self.changes = submetric(metric["changes"]) > self.events = submetric(metric["events"]) > def __repr__(self): > return "(time=%r, resource=%r, changes=%r, events=%r)" % > (self.time, self.resource, self.changes, self.events) > > class submetric(yaml.YAMLObject): > yaml_tag = u''!ruby/object:Puppet::Util::Metric'' > def __init__(self, submetric): > self.label = submetric["label"] > self.name = submetric["name"] > self.values = submetric["values"] > def __repr__(self): > return "(label=%r, name=%r, values=%r)" % (self.label, self.name, > self.values) > > class PuppetResourceStatus(yaml.YAMLObject): > yaml_tag = u''!ruby/object:Puppet::Resource::Status'' > def __init__(self, resource_status): > self.evaluation_time = resource_status["evaluation_time"] > self.events = resource_status["events"] > self.file = resource_status["file"] > self.line = resource_status["line"] > self.resource = resource_status["resource"] > self.source_description = resource_status["source_description"] > self.tags = resource_status["tags"] > self.time = resource_status["time"] > self.version = resource_status["version"] > def __repr__(self): > return "(evaluation=%r, events=%r, file=%r, line=%r, resource=%r, > source_description=%r, tags=%r, time=%r, version=%r)" % > (self.evaluation, self.events, self.file, self.line, self.resource, > self.source_description, self.tags, self.time, self.version) > > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. > >-- Regards, Douglas Garstang http://www.linkedin.com/in/garstang Email: doug.garstang@gmail.com Cell: +1-805-340-5627 -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.