我正在尝试序列化/反序列化并遍历驻留在 Ansible 配置期间发送的 YAML 结构中的对象。
我有以下字符串(下面是dynamic_data.elastic_setup_userenv.spaces):
spaces:
admins:
description: "..."
color: "..."
initials: "..."
team1:
description: "..."
color: "..."
initials: "..."
team2:
description: "..."
color: "..."
initials: "..."
team3:
description: "..."
color: "..."
initials: "..."
team4:
description: "..."
color: "..."
initials: "..."
已序列化并传输。在接收机器上我执行以下操作:
- name:
ansible.builtin.debug:
msg: "Space {{ item.key }} is {{ item.value.description }} ({{ item.value.color }})"
loop: "{{ lookup( 'ansible.builtin.dict', dynamic_data.elastic_setup_userenv.spaces_yaml | ansible.builtin.from_yaml) }}"
这又会导致以下异常:
FAILED! => {"msg": "Invalid data passed to 'loop', it requires a list, got this instead: {'key': 'spaces',
我在这里做错了什么?
需要进行两项更改:
query
而不是 lookup
来确保您获得列表。请参阅确保循环的列表输入:使用查询而不是查找spaces
键下的字典。你也需要解决这个问题所有这一切给出:
- name: Get info from yaml
ansible.builtin.debug:
msg: "Space {{ item.key }} is {{ item.value.description }} ({{ item.value.color }})"
loop: "{{ query( 'ansible.builtin.dict', (dynamic_data.elastic_setup_userenv.spaces_yaml | ansible.builtin.from_yaml).spaces) }}"