У меня есть следующее объявление ресурса, чтобы установить setenv.sh
файл через augeas в марионетке.
augeas {'test':
lens => 'Properties.lns',
incl => '/tmp/setenv.sh',
changes => "set CATALINA_OPTS \" $CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m \"",
}
У меня возникло несколько проблем с вышеизложенным.
Файл в основном добавляет конфигурации в CATALINA_OPTS
переменная, что означает, что когда я запускаю augeas, он удаляет все экземпляры этой переменной и заменяет ее моим изменением. Как я могу добиться следующего?
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/appdynamics/appagent/javaagent.jar"
CATALINA_OPTS="$CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m"
Попытка выполнить указанное выше не удается из-за кавычек. Вывод отладки показывает:
Debug: Augeas[test](provider=augeas): sending command 'set' with params ["/files/tmp/setenv.sh/CATALINA_OPTS", " -XX:PermSize=192m -XX:MaxPermSize=192m "]
Debug: Augeas[test](provider=augeas): Put failed on one or more files, output from /augeas//error:
Debug: Augeas[test](provider=augeas): /augeas/files/tmp/setenv.sh/error = put_failed
Debug: Augeas[test](provider=augeas): /augeas/files/tmp/setenv.sh/error/path = /files/tmp/setenv.sh
Debug: Augeas[test](provider=augeas): /augeas/files/tmp/setenv.sh/error/lens = /usr/share/augeas/lenses/dist/properties.aug:50.25-.100:
Debug: Augeas[test](provider=augeas): /augeas/files/tmp/setenv.sh/error/message = Malformed child node 'CATALINA_OPTS'
Как можно использовать двойные кавычки в строке при изменении?
Если вы хотите повлиять на последнее CATALINA_OPTS
переменная, ее нужно указать:
augeas {'test':
lens => 'Properties.lns',
incl => '/tmp/setenv.sh',
changes => "set CATALINA_OPTS[last()] \" $CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m \"",
}
Вы могли бы использовать [2]
вместо того [last()]
, но, по крайней мере, последний гарантирует, что это последнее вхождение переменной в файле.
Если вы просто хотите добавить строки в файл, попробуйте использовать ресурс file_line вместо augeas, например:
file_line { 'line1':
path => '/tmp/setenv.sh',
line => 'CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/appdynamics/appagent/javaagent.jar"',
}
file_line { 'line2':
path => '/tmp/setenv.sh',
line => 'CATALINA_OPTS="$CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m"',
}
Чтобы избежать проблем с двойными кавычками, просто заключайте в одинарные кавычки всю строку файла. Если вы хотите добавить строку в определенное место в файле, вы можете использовать свойство «после».
file_line доступен в модуле puppetlabs / stdlib.