employees:
    sarav:
      city: Coimbatore
      email: sarav@gritfy.com
      mobile: '985643210'
  tasks:
    - name: gathering_complete_data
      ansible.builtin.debug:
         msg={{ ['sarav'] | map('extract', employees , 'email' ) }}

输出:

ok: [CS1] => {
    "msg": [
        "sarav@gritfy.com"
    ]
}

上述脚本成功运行。当我创建数据结构时:

  employees:
    sarav:
    - city: Coimbatore
      email: sarav@gritfy.com
      mobile: '985643210'

使用 Ansible 地图过滤器,我无法收集信息(sarav 的电子邮件 ID)。

有人可以分享获取 sarav 电子邮件 ID 的代码吗?

1

  • 请花一点时间来修复此问题的格式;编辑器中可以提供帮助。


    – 


最佳答案
1

您不需要映射过滤器提取。您可以直接处理属性

    - debug:
        msg: "{{ employees.sarav.email }}"

给出

  msg: sarav@gritfy.com

在第二种情况下,你可以映射属性

    - debug:
        msg: "{{ employees.sarav | map(attribute='email') }}"

给出

  msg:
  - sarav@gritfy.com

完整测试剧本的示例

- hosts: localhost

  vars:

    employees:
      sarav:
        city: Coimbatore
        email: sarav@gritfy.com
        mobile: '985643210'

    employee2:
      sarav:
      - city: Coimbatore
        email: sarav@gritfy.com
        mobile: '985643210'

  tasks:

    - debug:
        msg: "{{ employees.sarav.email }}"

    - debug:
        msg: "{{ employee2.sarav | map(attribute='email') }}"