web-dev-qa-db-ja.com

puppetを介して実行されるaugeasで同じ変数に追加するにはどうすればよいですか?

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 \"",
}

私は上記でいくつかの問題に遭遇しました。

  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'
    

文字列で二重引用符を使用して変更を行うにはどうすればよいですか?

1
kaizenCoder

ファイルに行を追加するだけの場合は、次のように、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」モジュールで使用できます。

0
Jakov Sosic

最後の_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]_を使用することもできますが、少なくとも後者は、ファイル内の変数の最後の出現であることを保証します。

1
ℝaphink