Как перебрать похожие файлы vars в Ansible playbook

Мне нужно создать единую доступную книгу воспроизведения, которая будет перебирать несколько файлов vars в одном каталоге и использовать каждую конфигурацию по отдельности в POST API для отдыха.

В идеале со следующими файлами vars...

/my/vars/dir
  - my_pen.yml
      pen:
        color: "blue"

  - her_pen.yml
      pen:
        color: "red"

  - his_pen.yml
      pen:
        color: "green"

... моя пьеса будет выполнять POST для каждого пера. К сожалению, все файлы содержат конфигурацию для одного и того же типа объекта, поэтому задача include_vars сохранит только конфигурацию для «his_pen».

Мне удалось получить список всех файлов в каталоге с помощью find:

- name: "find config files"
  find:
    paths: /path/to/config/files
    patterns: '*.yml'
  register: config_files

У меня есть задача, которая может выполнить POST:

- name: Do post
  uri:
    url: "{{ rest_api_endpoint }}"
    method: POST
    user: "{{ username }}"
    password: "{{ password }}"
    body: "{{ pen }}"
    body_format: json
    return_content: yes
    status_code: 200
  register: post_result

Теперь мне просто нужно сплавить их. Это возможно? Я не могу изменить структуру файлов, поэтому я должен использовать то, что есть.

Мысли?

Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
0
0
500
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Давайте сначала создадим список ручки, а затем зациклим список. Игра ниже

- set_fact:
    pens: "{{ pens|default([]) + [ lookup('file', item)|from_yaml ] }}"
  loop: "{{ lookup('fileglob', 'vars/*.yml', wantlist=True) }}"
- debug:
    msg: "{{ item }}"
  loop: "{{ pens }}"

дает (сокращенно):

ok: [localhost] => (item = {'pen': {'color': u'blue'}}) => {
    "msg": {
        "pen": {
            "color": "blue"
        }
    }
}
ok: [localhost] => (item = {'pen': {'color': u'green'}}) => {
    "msg": {
        "pen": {
            "color": "green"
        }
    }
}
ok: [localhost] => (item = {'pen': {'color': u'red'}}) => {
    "msg": {
        "pen": {
            "color": "red"
        }
    }
}

Другие вопросы по теме