まず事象として
タスクがskipされたときでもregisterにはその旨が格納されてしまう。
- hosts: localhost
tasks:
- debug:
msg: "TRUE"
register: true_register
when: true
- debug:
var: true_register
- debug:
msg: "FALSE"
register: false_register
when: false
- debug:
var: false_register
$ docker compose run ansible ansible-playbook playbook.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] *************************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "TRUE"
}
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"true_register": {
"changed": false,
"failed": false,
"msg": "TRUE"
}
}
TASK [debug] *****************************************************************************************************************************************************************
skipping: [localhost]
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"false_register": {
"changed": false,
"skip_reason": "Conditional result was False",
"skipped": true
}
}
PLAY RECAP *******************************************************************************************************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
対策として
公式ドキュメントにも書いてあるとおり、タグで回避しましょう。
If a task fails or is skipped, Ansible still registers a variable with a failure or skipped status, unless the task is skipped based on tags. See Tags for information on adding and using tags.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables
- hosts: localhost
tasks:
- block:
- debug:
msg: "TRUE"
register: true_register
- debug:
var: true_register
tags:
- true_flag
- block:
- debug:
msg: "FALSE"
register: false_register
- debug:
var: false_register
tags:
- false_flag
$ docker compose run ansible ansible-playbook playbook.yaml --tags=true_flag
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] *************************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "TRUE"
}
TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
"true_register": {
"changed": false,
"failed": false,
"msg": "TRUE"
}
}
PLAY RECAP *******************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0