首页 > 解决方案 > group_names|intersect 使用 intersect 命令

问题描述

- debug:
    msg: "welcome"
  when: group_names|intersect(['PEGAALL', 'MDMALL'])

你能告诉我intersect函数的用法吗?我已经尝试过 group_names|intersect 命令,但我不知道它的用途。

标签: ansible

解决方案


intersect是一个过滤器(参见Intersection):

“获取两个列表中所有项目的唯一列表”

例如库存

[test_jails]
test_01
test_02
test_03

[PEGAALL]
test_02

剧本

- hosts: test_jails
  tasks:
    - debug:
        msg: "{{ group_names|intersect(['PEGAALL', 'MDMALL']) }}"
    - debug:
        msg: "welcome"
      when: group_names|intersect(['PEGAALL', 'MDMALL'])

ok: [test_01] => {
    "msg": []
}
ok: [test_03] => {
    "msg": []
}
ok: [test_02] => {
    "msg": [
        "PEGAALL"
    ]
}


ok: [test_02] => {
    "msg": "welcome"
}

  • 特殊变量 "group_names: List of groups the current host is part of."

  • 对于 hoststest_01test_03没有intersect。结果是一个空列表,Falsewhen条件下计算结果。

  • 对于主机test_02相交是包含一项的列表;在when条件下PEGAALL计算的组的名称。True


推荐阅读