正在读取yaml中的文本文件以获取键值对



我有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

最新更新