Ansibleでバックスラッシュをto_jsonフィルタで出力したい
Problem
Ansibleのtemplateモジュールでvarsに定義したバックスラッシュ\
を含む文字列を出力する場合、varsで'\'
のようにシングルクォートで囲めばバックスラッシュのまま出力されますが、to_json
フィルタでJSONとして出力させようとすると、\\
のように勝手にエスケープされてしまいます。
環境
- Ansible 2.8.5
- jinja2 2.10.1
例
単純な出力
---
vars:
include_backslash_text: '\n'
{{ vars.include_backslash_text }}
\n
to_jsonフィルタによる出力
---
vars:
include_backslash_text: '\n'
{{ vars.include_backslash_text | to_json }}
"\\n"
おそらく、to_json
フィルタによって値がダブルクォートで囲まれるため、フィルタが気を利かせてエスケープするものと思われます。
では、\n
のようなバックスラッシュを含む文字列をそのままJSON形式で出力するにはどうすればいいのでしょうか。
Solution
試行錯誤の結果、以下でうまくいきました。
---
vars:
include_backslash_text: "\n" # ダブルクォートにする
{{ vars.include_backslash_text | to_json | regex_replace("\\\\", "\\\\") }}
"\n"
なぜこれでうまくいくのかよく分かりませんが、もっといい書き方があれば教えてください。
Author And Source
この問題について(Ansibleでバックスラッシュをto_jsonフィルタで出力したい), 我々は、より多くの情報をここで見つけました https://qiita.com/isobecky74/items/faf7cc63ef1f37f0efcf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .