てくなべ (tekunabe)

ansible / network / automation

[Ansible] 記号類をURLエンコードする urlencode()

はじめに

@ などをURLエンコード%40%20)したいと思い、Ansible の Filter のページ を参照しましたが、それらしいフィルターはありませでした。 ならばと思って、Jinja2 のドキュメントを見ると urlencode() というフィルターがありました。

この記事では簡単なサンプルで紹介します。

  • 検証環境
    • Ansible 2.9.9
    • Jinja2 2.11.2

サンプル

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: debug 
      debug:
        msg: "{{ item | urlencode() }}"
      loop:
        - kingyo@example.com
        - Hello World

実行

$ ansible-playbook -i locahost, urlencode.yml 

PLAY [localhost] ****************************************************************************************************

TASK [debug] ********************************************************************************************************
ok: [localhost] => (item=kingyo@example.com) => {
    "msg": "kingyo%40example.com"
}
ok: [localhost] => (item=Hello World) => {
    "msg": "Hello%20World"
}

PLAY RECAP **********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

@%40 に、$20 にURLエンコードされて表示されました。

おわりに

Ansible ドキュメントで目的のフィルターが見つからないときは、Jinja2のドキュメントを確認するのが吉です。