Я создаю скрипт, который должен анализировать вывод 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:
и так далее ... Проблема в том, что когда я делаю 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 ...
^
Насколько я знаю, эта часть & id001 поддерживается в yaml.
Есть ли способ обойти это? Могу ли я сказать парсеру yaml игнорировать их?
Мне нужна только пара строк из потока yaml, может быть, regex мой друг здесь?
Кто-нибудь делал какие-либо регулярные выражения для очистки yaml?
Вы можете получить вывод yaml с помощью curl:
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)
Я также нашел информацию об этом в списке рассылки марионеток @ http://www.mail-archive.com/puppet-users@googlegroups.com/msg24143.html. Но я не могу заставить его работать правильно ...