TL;DR

TL;DR

Вот мой файл списка переменных vars/blah.yml:

---
stuff:
 - stuff1: bill
   stuff2: sue

Я просто пытаюсь получить значения переменных.

Вот мой план действий:

  hosts: all
  become: yes
  vars_files:
    - vars/blah.yml
  tasks:

  - name: test
    debug:
      var: "{{ item.stuff1 }} {{ item.stuff2 }}"
    loop :
      - "{{ stuff }}"

Я получаю эту ошибку.

fatal: [node1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'stuff1'\n\nThe error appears to be in '/home/automation/plays/test1.yml': line 11, 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\n    ^ here\n"}

Может ли кто-нибудь сказать мне, что я делаю не так?

Отредактировал форматирование переменных. Все равно получаю те же результаты.

решение1

TL;DR

  loop: "{{ stuff }}"

Полная история

В отличие от предыдущего и все еще широко используемого по умолчанию варианта with_items:, bare loop:не применяет автоматическое действие flatten(level=1)к переданным аргументам.

Дополнительную информацию об этой функции можно найти здесь:

Если ваш пример использовалwith_items

  with_items: 
    - "{{ stuff }}"

полученный список все равно будет точно таким, какой вы определили в своем файле.

Теперь используется сloop

  loop:
    - "{{ stuff }}"

Вы выполняете цикл по списку списков, который выглядит следующим образом (обратите внимание на одиночное тире в верхней части примера ниже и отступ остального содержимого: это не опечатка).

- 
  - stuff1: bill
    stuff2: sue

Таким образом, первый элемент, который вы получаете в цикле, на самом деле является полным списком в вашем var-файле.

Чтобы это исправить, просто передайте переменную правильно loop, т.е.

  loop: "{{ stuff }}"

решение2

Формат вашего файла переменных неверный. Верхний уровень — это не список, он должен выглядеть так:

---
stuff:
  - stuff1: bill
    stuff2: sue

Кроме того, путь к файлу vars должен начинаться с символа / из корня Ansible:

vars_files:
  - /vars/blah.yml

Связанный контент