У меня есть файл конфигурации в 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 с использованием этого синтаксиса?
Ты можешь использовать:
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
заявление о применении таких изменений идемпотентным образом.