Как динамически загружать файлы var и объединять их в одну переменную с помощью ansible - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу динамически включать файлы var в ansible.Динамически означает, что пользователь может предоставить список как лишнюю переменную, этот список будет преобразован в массив и определяет файлы для загрузки.Это возможно до сих пор.Что усложняет то, что эти файлы должны приводить к тому, что один объект содержит информацию.

Это работает и загружает все файлы в папке и создает переменную (проекты) из значений, указанных там:

- name: Load project-specific Configuration
  include_vars:
   name: projects
   dir: "{{project_vars_dir}}"
   extensions:
     - yml

Чтобы достичь своей цели и дать возможность указать, какие файлы загружать, я попытался сделать следующее:

- name: Load project-specific Configuration (requested projects only)
  include_vars:
    name: projects
    file: "{{project_vars_dir}}/{{item}}.yml"    
  with_items: "{{projectlist.split(',') | list}}"

Теперь я могу позвонить в мой playbook и указать --extra-vars примерно так: --extra-vars projectlist = projectA, projectB

Загрузка этих файлов работает, но последний файл всегда перезаписывает переменную проектов.Как я могу это объединить?

Большое спасибо заранее

1 Ответ

1 голос
/ 25 сентября 2019

Это довольно сложный цикл, поэтому вам понадобятся 2 файла и модуль include_tasks:

В tasks.yml вы добавляете:

- include_vars:
    name: file_vars
    file: "{{ item }}"
- set_fact:
    all_vars: "{{ file_vars | combine(all_vars | default({})) }}"

В playbook.yml вы помещаете:

- hosts: all
  tasks:
  - include_tasks: tasks.yaml
    loop: "{{projectlist.split(',') | list}}"

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

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