我需要创建一个单一的剧本,它将在单个目录中循环访问多个vars文件,并在其余的API POST中单独使用每个配置。
理想情况下,具有以下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
现在我只需要融合两者。这可能吗?我无法更改文件结构,因此必须使用适当的文件。
有想法吗?
答案 0 :(得分:0)
首先创建笔的列表,然后循环该列表。下面的游戏
- 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"
}
}
}