Augeas - создать новый раздел ini
У меня есть файл конфигурации в augeas, используя пользовательский объектив, который выводит данные следующим образом.
/files/opt/../server.conf/target[1] = "general"
/files/opt/../server.conf/target[1]/serverName = "XXX"
/files/opt/../server.conf/target[1]/guid = "XXX0XXX"
/files/opt/../server.conf/target[2] = "sslConfig"
/files/opt/../server.conf/target[2]/sslKeysfilePassword = "$1$XXXXX"
Это хорошо работает - некоторые целевые имена содержат двоеточия и т. Д., Поэтому мне нужно использовать формат target[x].
Каков правильный синтаксис ins для создания нового раздела в моем INI с использованием этого синтаксиса?
1 ответ
Ты можешь использовать:
set /files/opt/.../server.conf/target[. = 'newsection'] 'newsection'
Если раздел еще не существует, он создаст его. Затем вы можете использовать его для добавления ключей в этом разделе. Этот код идемпотентен, поэтому его можно использовать для каждого раздела, для которого вам нужны ключи, так как он создаст раздел, только если он еще не существует.
Для записи, вы можете использовать ins
если вы действительно хотите, чтобы ваш новый раздел появился перед существующим, например:
# Add a new target node before the sslConfig target
ins target before /files/opt/.../server.conf/target[. = 'sslConfig']
# Set the target name to "newsection" by matching the node right before the "sslConfig" target
set /files/opt/.../server.conf/target[following-sibling::*[1][label() = 'target'][. = 'sslConfig']] 'newsection'
Обратите внимание, что приведенный выше код не идемпотентен, в отличие от первого кода, который я вставил. Если вы используете Augeas с Puppet, вы, вероятно, захотите добавить onlyif
Заявление применить такие изменения идемпотентным способом.