coeur
ansible 2.3.0.0 (stable-2.3 923c9ef17c) last updated 2017/03/17 09:12:40 (GMT +1000)
config file = /apps/dev/playbook/jordan/mr-ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.12 (default, Sep 23 2016, 14:23:49) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
la norme
RHEL 6.7
Ce n'est peut-être pas un bogue, mais juste quelque chose avec lequel je me suis débrouillé sur les anciennes versions, mais avec Ansible 2.3 RC1 si je vérifie si une variable enregistrée par un module (avec une clause when) est définie et que j'obtiens ensuite une valeur de sous-dict. échouer dans 2.3 alors que dans 2.2 et ci-dessous cela fonctionne bien. Cela se produit spécifiquement lorsque le module qui enregistre la variable est ignoré pour une raison quelconque, puis une tâche ultérieure vérifie si la variable est définie, puis obtient la sous-clé.
Exemple de playbook
---
- name: test
hosts: localhost
connection: local
tasks:
- name: module that won't run
stat:
path: /apps/tmp
register: test
when: False
- name: debug of var
debug:
var: test
- name: test with conditional
debug:
msg: A
when: test is defined and test.stat.exists
Lors de l'utilisation d'Ansible 2.2.1.0
ansible 2.2.1.0
config file = /cygdrive/d/dev/jordan/ansible.cfg
configured module search path = Default w/o overrides
PLAY [test] ********************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [module that won't run] ***************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:7
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
TASK [debug of var] ************************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:13
ok: [localhost] => {
"test": {
"changed": false,
"skip_reason": "Conditional check failed",
"skipped": true
}
}
TASK [test with conditional] ***************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:17
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
PLAY [test] ************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************
Friday 17 March 2017 15:20:42 +1000 (0:00:00.039) 0:00:00.039 **********
ok: [localhost]
META: ran handlers
TASK [module that won't run] *******************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:7
Friday 17 March 2017 15:20:44 +1000 (0:00:01.093) 0:00:01.133 **********
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False", "skipped": true}
TASK [debug of var] ****************************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:13
Friday 17 March 2017 15:20:44 +1000 (0:00:00.012) 0:00:01.145 **********
ok: [localhost] => {
"changed": false,
"test": {
"changed": false,
"skip_reason": "Conditional result was False",
"skipped": true
}
}
TASK [test with conditional] *******************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:17
Friday 17 March 2017 15:20:44 +1000 (0:00:00.034) 0:00:01.180 **********
fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check 'test is defined and test.stat.exists' failed. The error was: error while evaluating conditional (test is defined and test.stat.exists): 'dict object' has no attribute 'stat'\n\nThe error appears to have been in '/apps/dev/playbook/jordan/mr-ansible/test.yml': line 17, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: test with conditional\n ^ here\n"}
PLAY RECAP *************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=1
Salut!
Merci beaucoup pour votre soumission à Ansible. Cela signifie sincèrement beaucoup pour nous.
Nous pensons que le ticket que vous avez déposé est quelque peu mal compris, car une chose fonctionne un peu différemment de ce qui est indiqué.
À l'avenir, cela pourrait être un sujet plus adapté à la liste des utilisateurs, que vous pouvez également publier ici si vous souhaitez plus d'aide sur ce qui précède.
Puisque vous sautez la tâche 'stat', vous obtenez toujours test
comme dictionnaire défini, mais il n'a pas stat
clé
when: test is defined and 'stat' in test and test.stat.exists
Merci encore pour cela et votre intérêt pour Ansible!
Commit séparé qui a changé ce comportement https://github.com/ansible/ansible/commit/81aa12eb1b5a2b50ac9234ca0b05c015af88a845
Problème lié https://github.com/ansible/ansible/issues/18514
Commentaire le plus utile
Incompréhension possible
Salut!
Merci beaucoup pour votre soumission à Ansible. Cela signifie sincèrement beaucoup pour nous.
Nous pensons que le ticket que vous avez déposé est quelque peu mal compris, car une chose fonctionne un peu différemment de ce qui est indiqué.
À l'avenir, cela pourrait être un sujet plus adapté à la liste des utilisateurs, que vous pouvez également publier ici si vous souhaitez plus d'aide sur ce qui précède.
Puisque vous sautez la tâche 'stat', vous obtenez toujours
test
comme dictionnaire défini, mais il n'a passtat
cléMerci encore pour cela et votre intérêt pour Ansible!