小技巧 - 遇到需要兩個大括號該怎麼辦?
最近在使用 openshift 的指令 - oc,oc 可以使用 template 來輸出所需要的結果,可是 oc 的 template 裡剛巧也是用 {{
,這就導致了 Ansible 以為這是自己要處理的而導致處理錯誤。
那麼該怎麼辦呢?
這時候可以用兩種方式解決:
第一種方式是使用 {% raw %} ... {% endraw %}
舉個例子:
---
- name: Escape double braces - using raw
hosts: localhost
tasks:
- name: Run openshift command
shell: oc get pods -o go-template='Hello, World! {% raw %}{{ {% endraw %}"\n"{% raw %} }}{% endraw %}'
register: shell_result
這樣子就可以讓 oc 能使用 {{ }} 了。
如果覺得在 {{ }} 前後加上 {% raw %}...{% endraw %}
很麻煩的話,可以直接加前後,例如
- name: Run openshift command
shell: "{% raw %}oc get pods -o go-template='Hello, World! {{ \"\n\" }}'{% endraw %}"
register: shell_result
第二種方式是使用 !unsafe
例如:
---
- name: Escape double braces - using unsafe
hosts: localhost
tasks:
- name: Test
vars:
cmd_string: !unsafe docker inspect --format '{{ .NetworkSettings.IPAddress }}' silly_lovelace
shell: "{{ cmd_string }}"
register: shell_result
- debug:
msg: "{{ shell_result.stdout }}"
這裡有點不一樣的是,預先宣告字串在 vars 裡,然後才帶入到 shell
,這是使用 !unsafe
時要注意的地方。
參考資料: