Парсинг puppet-api yaml с помощью python

Я создаю скрипт, который должен анализировать вывод yaml, который выводит puppet.

Когда я делаю запрос по примеру 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 "", 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)

Я также нашел некоторую информацию об этом в списке рассылки puppet @ http://www.mail-archive.com/puppet-users@googlegroups.com/msg24143.html. Но я не могу заставить его работать правильно...

14
задан xeor 2 December 2011 в 14:15
поделиться