Ansibleで特殊文字を使う # : { } エスケープ

Ansibleで特殊文字(テンプレート変数を示す{}とか、コメントの#やYAMLの:等)を通す場合のメモ

 Playbookでテンプレ変数にパスワードが設定されていればそれをパスワードにして、それ以外の時はurandomからmd5でパスワード生成するという処理を書くときにはまって調べた。
 色々試行錯誤した結果、

{{ ‘特殊文字’ }}
と言う形式で記述するのが一番確実らしい。

 この場合は、bashの文字列取得処理で${#PASS}を取りたかったんだけど、#がコメントアウト文字として認識されて切れちゃうので、まず#をエスケープする必要が出た。
 だけど、{の次に#の{{ ‘#’ }}を入れると、{{{になってここも構文問題になったので{自体も更にくくって{{ ‘{‘ }}{{ ‘#’ }}{{ ‘}’ }}と言う超回りくどい表現になった。

デフォルトのhttpd.confのnamevirtualを有効化する場合とかは

こんな感じで、*はバックスラッシュエスケープして、:の方は{{}}くくりをする。

 この辺はAnsible自体と言うより、Pythonとテンプレートエンジンを通して食べるために、各レイヤーをセーフに通れる表記をしないといけないのがちょい注意だね。

(1616)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP]   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です