てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] 整数に変換できない文字列に int フィルターをかけると 0 になる

はじめに

小ネタ中の小ネタです。

Ansible、というより Jinja2 には intという、値を整数に変換するフィルターがあります。

いわゆるキャストと考えると、数字らしきないものにフィルターをかけるとエラーとなりそうですが、このフィルターの場合は 0 が返ってきます。

Jijna2 の公式ドキュメントにも以下の記載があります。

If the conversion doesn’t work it will return 0.

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

  • 動作確認環境
    • Ansible 2.9.6
    • Jinja2 2.11.1

サンプル Playbook

何種類かの値を int フィルターにかけてみます。

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: int test
      debug:
        msg: "{{ item | int }}"
      loop:
        - 123
        - "123"
        - 123.4
        - "hello"

結果

実行結果です。 hello0 になりました。

$ ansible-playbook -i localhost, int.yml 

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

TASK [int test] ****************************************************************************************************
ok: [localhost] => (item=123) => {
    "msg": "123"
}
ok: [localhost] => (item=123) => {
    "msg": "123"
}
ok: [localhost] => (item=123.4) => {
    "msg": "123"
}
ok: [localhost] => (item=hello) => {
    "msg": "0"
}

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

参考

Jinja2 の int フィルターの実装

github.com

@satoru_satoh さん、いつもありございます。

フィルターを手軽に試したいとき

tekunabe.hatenablog.jp