Мне нужно создать единую доступную книгу воспроизведения, которая будет перебирать несколько файлов 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
Теперь мне просто нужно сплавить их. Это возможно? Я не могу изменить структуру файлов, поэтому я должен использовать то, что есть.
Мысли?
Давайте сначала создадим список ручки, а затем зациклим список. Игра ниже
- 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"
}
}
}