先来看一段ansible代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
- name: test hosts: localhost gather_facts: no vars: test_name: 'real_name' flag: false tasks: - name: retrieve node's hostname shell: "hostname" register: test_name when: flag | bool - debug: var: test_name |
正常来说,我们认为会输出结果会是’real_name’,因为第一个任务因为when的条件判断并没有执行
但是,结果是什么呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
ansible-playbook 1.yaml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [test] ************************************************************************************************************************************************************************* TASK [retrieve node's hostname] ***************************************************************************************************************************************************** skipping: [localhost] TASK [debug] ************************************************************************************************************************************************************************ ok: [localhost] => { "test_name": { "changed": false, "skip_reason": "Conditional result was False", "skipped": true } } PLAY RECAP ************************************************************************************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 |
并没有,难道是skip了?其实并没有skip, 而是第一个task的register讲test_name的值赋值成了如下三行:
“changed”: false,
“skip_reason”: “Conditional result was False”,
“skipped”: true
也就是说,尽快when的条件没有判断成功,但是register还会工作
具体的变通办法参见
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021