'dict object' не имеет атрибута 'stdout' в Ansible Playbook

Моя книга:

- name: JBoss KeyStore and Truststore passwords will be stored in the          password vault
    #shell: less "{{ vault }}"
     shell: cat "{{ vault }}"
    register: vault_contents
    tags:
      - BW.6.1.1.10
    with_items:
      - "{{ vault }}"
  - debug:
       msg: "JBoss config filedoes not contains the word vault"
    when: vault_contents.stdout.find('$VAULT') == -1

Я пытаюсь прочитать несколько файлов через ansible, используя шаблон Jinga2, проанализировать вывод как стандартный вывод, найти ключевое слово и сообщить об этом.

Это не удается с ошибкой ниже:

TASK [testing_roles : debug]   **************************************************************************.   *****************************************************************
fatal: [d84e4fe137f4]: FAILED! => {"failed": true, "msg": "The conditional check 'vault_contents.stdout.find('$VAULT') == -1' failed. 
The error was: error while evaluating conditional (vault_contents.stdout.find('$VAULT') == -1): 'dict object' has no attribute 'stdout'\n\nThe error appears to have been in '/Ansible/Ansible/Relearn/testing_roles/roles/testing_roles/tasks/main.yml': line 49, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n      - \"{{ vault }}\"\n  - debug:\n    ^ here\n"}
to retry, use: --limit @/Ansible/Ansible/Relearn/testing_roles/playbook.retry

Когда я добавляю его с одной записью файла, он работает так, как ожидалось, но когда он изменяется в серии файлов, он не работает.

Правильный ли это подход для сканирования нескольких файлов в Ansible или следует использовать какой-либо другой модуль или метод.

Любая помощь приветствуется.

В файле vars он имеет следующее содержимое:

vault:
  - /jboss-as-7.1.1.Final/standalone/configuration/standalone-full-ha.xml

Спасибо


person anish anil    schedule 24.12.2018    source источник


Ответы (1)


Проверка - debug: var=vault_contents покажет вам, что при использовании с такой конструкцией цикла, как with_items:, регистровая переменная имеет list, называемый results, содержащий результаты для каждой итерации цикла. Это также описано в прекрасном руководстве.

Итак, то, что вы хотите, вероятно:

- debug:
    msg: "JBoss config {{ item.item }} does not contain the word vault"
  when: item.stdout.find('$VAULT') == -1
  with_items: '{{ vault_contents.results }}'
person mdaniel    schedule 24.12.2018
comment
Спасибо, Н да, я полностью пропустил прочтение документации - person anish anil; 25.12.2018
comment
Руководство предназначено для других людей. - person Chris Godwin; 25.01.2021