Ansible: 'objet dict' n'a pas d'attribut dans la clause 2.3 RC1

Créé le 17 mars 2017  ·  2Commentaires  ·  Source: ansible/ansible

TYPE DE PROBLEME
  • Rapport d'erreur
NOM DU COMPOSANT

coeur

VERSION ANSIBLE
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)]
CONFIGURATION

la norme

OS / ENVIRONNEMENT

RHEL 6.7

SOMMAIRE

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é.

ÉTAPES POUR REPRODUIRE

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
RÉSULTATS ATTENDUS

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
RÉSULTATS ACTUELS
- Que s'est-il réellement passé? Si possible, exécutez avec une verbosité supplémentaire (-vvvv)

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
affects_2.3 bug

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 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!

Tous les 2 commentaires

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 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!

Cette page vous a été utile?
0 / 5 - 0 notes