Variable
Ansible:為什麼在以下情況下跳過任務:var為真
從下面的範例中,
為什麼當 db.x86_64.alpine.update 為真時跳過了 DEBUG 2
我也一直在嘗試“何時:db.x86_64.alpine.update|bool 為真”,但這也失敗了
變數文件 db.yml
shell> cat db.yml x86_64: alpine: update: true version_current: 3.14.0 version_new: 3.15. aarch64: alpine: update: true version_current: 3.14.0 version_new: 3.15.0
劇本
--- - name: Playbook test hosts: localhost tasks: - ansible.builtin.include_vars: file: db.yml name: db - name: DEBUG 1 debug: var: db.x86_64.alpine.update |type_debug - name: DEBUG 2 debug: msg: - "MESSAGE" when: db.x86_64.alpine.update is true
執行時輸出
PLAY [Playbook test] ****************************************************************************************************************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************************************************************************************************************************** ok: [localhost] TASK [ansible.builtin.include_vars] *************************************************************************************************************************************************************************************************************************************** ok: [localhost] TASK [debug] ************************************************************************************************************************************************************************************************************************************************************** ok: [localhost] => { "db.x86_64.alpine.update |type_debug": "builtin_function_or_method" } TASK [debug] ************************************************************************************************************************************************************************************************************************************************************** skipping: [localhost] PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************** localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
問題:
當 db.x86_64.alpine.update 為 true 時如何顯示消息
沒有必要明確地測試一個布爾值。只需使用條件中的值
- debug: msg: "MESSAGE" when: db.x86_64.alpine['update']
將列印消息
msg: MESSAGE
問題是屬性更新與Python字典的方法衝突。請參閱引用鍵:值字典變數。
- debug: var: db.x86_64.alpine['update'] - debug: var: db.x86_64.alpine['update']|type_debug
給
db.x86_64.alpine['update']: true db.x86_64.alpine['update']|type_debug: bool
因為文件中的變數正在返回 DICT …
那麼您可以通過這種方式進行驗證:
when: db.x86_64.alpine['update'] is true
調試:
db.yml是<dict對象的內置方法更新…>
我的環境:
- Python 3.6.8
- Centos Stream 8
- 從 pip 安裝的 Ansible