2013-11-06 1 views
3

Я пытаюсь использовать марионетку для редактирования jenkins config.xml. Я решил, что augeas имеет наибольший смысл по разным причинам, и у меня почти есть то, что мне нужно, но форматирование довольно грубо.Как создать красиво отформатированный xml с помощью augeas в марионетке?

Это мой кукольный файл:

augeas { 'jenkins_config.xml' : 
    incl => '/tmp/config.xml', 
    lens => 'Xml.lns', 
    context => '/files/tmp/config.xml/hudson', 
    changes => [ 
    "set securityRealm/#attribute/class hudson.security.PAMSecurityRealm", 
    "set securityRealm/#attribute/plugin [email protected]", 
    "set securityRealm/serviceName/#text sshd", 
    ], 
} 

Что я ищу:

<hudson> 
    <securityRealm class="hudson.security.PAMSecurityRealm" plugin="[email protected]"> 
    <serviceName>sshd</serviceName> 
    </securityRealm> 
</hudson> 

Что я получаю:

<hudson> 
<securityRealm class="hudson.security.PAMSecurityRealm" plugin="[email protected]"><serviceName>sshd</serviceName> 
</securityRealm> 
</hudson> 

Содержание штрафа (который так классно, но это не забавно читать. Может ли augeas обрабатывать отступы и переводы строк? Если я должен сделать это сам, может ли кто-нибудь дать советы по отступу? Мои попытки все провалились.

+0

Похожее: [Создание XML с «множеством» в Puppet Augeas] (http://stackoverflow.com/q/18603757/55075) – kenorb

ответ

5

Короткий ответ: нет.

Augeas не позволяет (в настоящее время) управлять этим, он позволяет редактировать файл только в том виде, в котором он используется, и использует значения по умолчанию для добавления новых параметров. Кроме того, он не может обнаружить текущую идентификацию для повторного использования.

Один из способов для вас, чтобы достичь того, чего вы хотите, будет использовать команду довольно-принтер и включите его после изменения Авгий, что-то вроде:

augeas { 'manage your file': 
    changes => [ 'blah'], 
} ~> 
exec { 'pretty print file': 
    command  => '/bin/pretty-print-cmd file', 
    refreshonly => true, 
} 

Это вызовет команду довольно печати, когда Авгии применяются изменения. Для красивой печати вы можете пойти, например, с xmlstarlet.

+0

Это облом, что нет идеального «О, просто установите этот параметр. " но использование довольно-печатных звуков вполне осуществимо. И по крайней мере важная часть - jenkins, видя правильные значения конфигурации - работает. –

+0

Патчи приветствуются :-) Тем не менее, цель Augeas - редактировать файлы конфигурации, а не форматировать их. –

+0

xmltidy довольно прост в использовании для отступа. Его использование: xmltidy FileName.xml