Назад | Перейти на главную страницу

Как добавить к той же переменной с помощью augeas, запущенного через марионетку?

У меня есть следующее объявление ресурса, чтобы установить setenv.sh файл через augeas в марионетке.

augeas {'test':
    lens    => 'Properties.lns',
    incl    => '/tmp/setenv.sh',
    changes => "set CATALINA_OPTS \" $CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m \"",
}

У меня возникло несколько проблем с вышеизложенным.

  1. Файл в основном добавляет конфигурации в CATALINA_OPTS переменная, что означает, что когда я запускаю augeas, он удаляет все экземпляры этой переменной и заменяет ее моим изменением. Как я могу добиться следующего?

    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/appdynamics/appagent/javaagent.jar"
    CATALINA_OPTS="$CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m"
    
  2. Попытка выполнить указанное выше не удается из-за кавычек. Вывод отладки показывает:

    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.