2014-01-24 1 views
4

Я хотел бы обновить раздел в файле конфигурации XML или добавить новый, если он еще не используется Augeas.Создайте или обновите раздел в файле XML с помощью Augeas

XML-файл выглядит следующим образом:

<?xml version="1.0"?> 
<security> 
      <users> 
      ... 
      <user> 
       <id>deployment</id> 
       <firstName>Deployment</firstName> 
       <lastName>User</lastName> 
       <password>somepasshere</password> 
       <status>active</status> 
       <email>[email protected]</email> 
      </user> 
      </users> 
</security> 

Я хотел бы обновить фамилию/имя/первое письмо, если ID уже существует, или добавить новый раздел пользователя, если это новый ID.

В AugTool я использую:

augtool> set /augeas/load/Xml/lens Xml.lns 
augtool> set /augeas/load/Xml/incl /security.xml 
augtool> load 

Я все еще учусь Авгий, так что это была моя первая попытка получить узел:

augtool> print /files/security.xml/security/users/user/*[ #text= 'deployment'] 

Что бы команда, чтобы обновить или создать пользователь нового раздела в пользователях?

спасибо!

ответ

6

Во-первых, с недавними версиями Augeas (> = 1.0.0) вы можете использовать --transform для настройки преобразования. Допустим, файл ./users.xml:

$ augtool -r . --noautoload --transform "Xml.lns incl /users.xml" 
augtool> defnode user /files/users.xml/security/users/user[id/#text="deployment"] # Create a new user entry if it doesn't exist yet, assign node to the "user" variable 
augtool> set $user/id/#text "deployment"   # Set id if node was just created 
augtool> set $user/firstName/#text "Deployment" # Set firstName 
augtool> set $user/lastName/#text "User"   # Set lastName 
augtool> set $user/email/#text "[email protected]" # set email 
... 
augtool> save 
Saved 1 file(s) 

Вы даже можете превратить это в сценарий, скажем user.augtool:

#!/usr/bin/augtool -sf 
defnode user /files/users.xml/security/users/user[id/#text="deployment"] 
set $user/id/#text "deployment" 
set $user/firstName/#text "Deployment" 
set $user/lastName/#text "User" 
set $user/email/#text "[email protected]" 

который вы можете запустить:

$ chmod +x user.augtool 
$ ./user.augtool --transform "Xml.lns incl /users.xml" -r . 
Saved 1 file(s) 
+0

Спасибо! одно замечание, хотя я не мог сохранить файл xml, если он был загружен командой: augtool -r. --noautoload --transform "Xml.lns incl /users.xml" Я использую augeas ver 1.0.0 – PapelPincel

+0

Какая ошибка, если таковая имеется? –

+1

no erros, я не печатаю сообщение «Сохранено 1 файл (ы)» в конце и файлы не изменены. У меня есть еще одна проблема, но на этот раз с ресурсом ресурса augeas в Puppet (http://stackoverflow.com/questions/21384569/why-does-augeas-puppet-resource-type-need-3-arguments-for-defnode) , Если у вас есть идея, что было бы здорово :) спасибо – PapelPincel