Variable

Ansible:為什麼在以下情況下跳過任務:var為真

  • March 20, 2022

從下面的範例中,

為什麼當 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

引用自:https://unix.stackexchange.com/questions/696151