xeo*_*eor 14 python yaml puppet
我正在创建一个脚本,需要解析puppet输出的yaml输出.
当我再次提出请求示例https:// puppet:8140/production/catalog/my.testserver.no我会得到一些yaml回来看起来像:
--- &id001 !ruby/object:Puppet::Resource::Catalog
aliases: {}
applying: false
classes:
- s_baseconfig
...
edges:
- &id111 !ruby/object:Puppet::Relationship
source: &id047 !ruby/object:Puppet::Resource
catalog: *id001
exported:
Run Code Online (Sandbox Code Playgroud)
等等......问题是当我做一个yaml.load(yamlstream)时,我会得到一个错误:
yaml.constructor.ConstructorError: could not determine a constructor for the tag '!ruby/object:Puppet::Resource::Catalog'
in "<string>", line 1, column 5:
--- &id001 !ruby/object:Puppet::Reso ...
^
Run Code Online (Sandbox Code Playgroud)
据我所知,这个&id001部分在yaml中得到支持.
有没有办法解决?我可以告诉yaml解析器忽略它们吗?我只需要yaml流中的几行,也许正则表达式是我的朋友在这里?以前做过任何yaml清理正则表达式的人吗?
您可以使用curl获取yaml输出,如:
curl --cert /var/lib/puppet/ssl/certs/$(hostname).pem --key /var/lib/puppet/ssl/private_keys/$(hostname).pem --cacert /var/lib/puppet/ssl/certs/ca.pem -H 'Accept: yaml' https://puppet:8140/production/catalog/$(hostname)
Run Code Online (Sandbox Code Playgroud)
我还在puppet mailinglist @ http://www.mail-archive.com/puppet-users@googlegroups.com/msg24143.html中找到了一些相关信息.但我不能让它正常工作......
Sha*_*lan 23
我已经通过电子邮件发送了PyYAML的创建者Kirill Simonov,以获得解析Puppet YAML文件的帮助.
他很乐意帮助完成以下代码.此代码用于解析Puppet日志,但我确信您可以修改它以解析其他Puppet YAML文件.
我们的想法是为Ruby对象创建正确的加载器,然后PyYAML可以读取数据.
开始:
#!/usr/bin/env python
import yaml
def construct_ruby_object(loader, suffix, node):
return loader.construct_yaml_map(node)
def construct_ruby_sym(loader, node):
return loader.construct_yaml_str(node)
yaml.add_multi_constructor(u"!ruby/object:", construct_ruby_object)
yaml.add_constructor(u"!ruby/sym", construct_ruby_sym)
stream = file('201203130939.yaml','r')
mydata = yaml.load(stream)
print mydata
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4450 次 |
| 最近记录: |