Как определить неназванный список элементов внешне - PullRequest
0 голосов
/ 25 октября 2019

Вот структура переменных, с которыми я хотел бы работать из packages.yml файла:

---
- name: Some description 1,
  package: package1

- name: Some description 1,
  package: package2

Я ожидал, что я импортирую файл и сохраню список в переменной packages:

- name: Import packages vars
  include_vars:
    file: packages.yml
    name: packages

Тогда я хочу напечатать только имена:

- name: iteration
  debug:
    msg: "name: {{ item.name }}"
  with_items: "{{ packages }}"

Но получаю ошибку:

TASK [Импорт пакетов переменных] **************************************************** фатально: [по умолчанию]: НЕ УДАЛОСЬ! => {"ansible_facts": {"packages": {}}, "ansible_included_var_files": [], «change»: false, «message»: «/vagrant/packages.yml должен храниться в виде словаря / хэша»}

Исходные цели, которые я пытаюсь получить:

1st. Упростите определение свойств, объявив список элементов без названия этого списка. Я имею в виду, я не хочу определять их во внешнем файле как:

---
- packages:
    - name: Some description 1,
      package: package1

    - name: Some description 1,
      package: package1

Хотя это можно легко решить без include_vars, но с помощью директивы vars_files:

  vars_files:
    - packages.yml

2nd. Имея неназванный список элементов в yml-файле, я хочу в самом playbook дать ему имя. Это то, что я пытаюсь сделать в задаче «Импорт пакетов в» с помощью «packages» в playbook

- name: Import packages vars
  include_vars:
    file: packages.yml
    name: packages    

Таким образом, я возлагаю ответственность за присвоение имени списку его потребителю. Сам список не должен беспокоиться о том, как его клиенты называют.

Если это возможно, как я могу это сделать?

1 Ответ

0 голосов
/ 25 октября 2019

Как говорится в сообщении об ошибке, содержимое packages.yml должно быть словарем или хэшем, а не списком на верхнем уровне.

Вы можете присвоить список переменной-заполнителю в файле, а затемприсвойте это значение другой переменной в вашей игровой книге, используя модуль set_fact.

packages.yml:

list:
  - name: Some description 1,
    package: package1

  - name: Some description 1,
    package: package2

Playbook:

- include_vars:
    file: packages.yml
    name: included_vars

- set_fact:
    packages: "{{ include_vars.list }}"

Хотя, учитывая, чтофайл с именем packages.yml, packages будет иметь смысл в качестве имени переменной верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...