小技巧-檢查變數型態

使用模組常遇到的情況是不知道傳回來的變數是什麼型態,後續使用就不知道怎麼用。

在這個時候可以怎麼做呢?

在這個時候可以使用 type_debug 這個 filter 來顯示。

  - debug:
      msg: "{{ item|type_debug }}"
    loop:
    - "Foo"
    - 123
    - []
    - name: foo

結果會是

TASK [debug] ************************************************************************************
ok: [localhost] => (item=Foo) => {
    "msg": "AnsibleUnicode"
}
ok: [localhost] => (item=123) => {
    "msg": "int"
}
ok: [localhost] => (item=[]) => {
    "msg": "list"
}
ok: [localhost] => (item={'name': 'foo'}) => {
    "msg": "dict"
}

額外分享一個技巧,若需要依據變數型態來顯示的話,可以用

  - set_fact:
      case:
        int: "tasks-int"
        AnsibleUnicode: "tasks-str"
        list: "tasks-list"
        dict: "tasks-dict"
        default: "tasks-default"
  - set_fact:
      v: "foo"
  - debug:
      msg: "{{ case[v|type_debug] }}"

參考資料