我有txtfile(textData.txt(,它包含键值对,如:
user1: john
user2: bob
user3: william
值对的数量是动态的,可以是一个、两个、三个或三个以上,但在我的txtFile中至少会有一个值对。
我想在我的yaml文件中读取这个文本文件,这样我就可以得到yaml的输出,比如:
- name: "User Names"
users:
- userid: user1
username: john
something: false
- userid: user2
username: bob
something: false
- userid: user3
username: william
something: false
我希望这个结构是动态的,这取决于我的textFile中有多少值对,但有些东西会保持不变,它不会出现在文件中。请帮我举个例子。
将文件读入字典,并使用dict2items创建列表,例如
- include_vars:
file: textData.txt
name: users_dict
- set_fact:
users: "{{ users_dict|dict2items(key_name='userid', value_name='username') }}"
给出
users:
- userid: user1
username: john
- userid: user2
username: bob
- userid: user3
username: William
,或将其放入文件中,例如
- copy:
content: |
---
- name: "User Names"
users:
{{ users|to_yaml|indent(width=2) }}
...
dest: users.yml
vars:
users: "{{ users_dict|dict2items(key_name='userid', value_name='username') }}"
给出
shell> cat users.yml
---
- name: "User Names"
users:
- {userid: user1, username: john}
- {userid: user2, username: bob}
- {userid: user3, username: william}
...
shell> yamllint users.yml
,或使用Jinja迭代列表,例如
- copy:
content: |
---
- name: "User Names"
users:
{% for k,v in users_dict.items() %}
- userid: {{ k }}
username: {{ v }}
{% endfor %}
...
dest: users.yml
给出
shell> cat users.yml
---
- name: "User Names"
users:
- userid: user1
username: john
- userid: user2
username: bob
- userid: user3
username: william
...
shell> yamllint users.yml