无法在 Ansible 中序列化/反序列化和遍历对象

问题描述 投票:0回答:1

我正在尝试序列化/反序列化并遍历驻留在 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', 

我在这里做错了什么?

ansible yaml
1个回答
0
投票

需要进行两项更改:

  1. 您必须使用
    query
    而不是
    lookup
    来确保您获得列表。请参阅确保循环的列表输入:使用查询而不是查找
  2. 您的表达式返回 yaml 字符串的顶部内容,而您想要处理
    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) }}"    
© www.soinside.com 2019 - 2024. All rights reserved.