Puppetのaugeasを介してsetenv.sh
ファイルを設定するための次のリソース宣言があります。
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'
文字列で二重引用符を使用して変更を行うにはどうすればよいですか?
ファイルに行を追加するだけの場合は、次のように、augeasの代わりにfile_lineリソースを使用してみてください。
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"',
}
ダブルクォートの問題を回避するには、ファイル行全体をシングルクォートするだけです。ファイル内の特定の場所に行を追加する場合は、「after」プロパティを使用できます。
file_lineは、「puppetlabs/stdlib」モジュールで使用できます。
最後の_CATALINA_OPTS
_変数に影響を与える場合は、次のように指定する必要があります。
_augeas {'test':
lens => 'Properties.lns',
incl => '/tmp/setenv.sh',
changes => "set CATALINA_OPTS[last()] \" $CATALINA_OPTS -XX:PermSize=192m -XX:MaxPermSize=192m \"",
}
_
[last()]
の代わりに_[2]
_を使用することもできますが、少なくとも後者は、ファイル内の変数の最後の出現であることを保証します。