使用ansible事实来过滤具有fact = value的接口

时间:2019-12-18 13:56:01

标签: python variables ansible jinja2 devops

我想使用ansible事实来过滤其模块设置为igb的网络接口。

我知道我可以运行此命令并获取所有接口的网络事实。 (包含每个接口的模块)

ansible -m setup -a 'gather_subset=network' host.so.com

我尝试在下面使用这些变量并对变量进行调试,希望查看该模块的接口名称,但是我只能让它输出与module = ibg的接口的所有事实,而不仅仅是设备名称。

allNetworkModules: "{{ ansible_facts | dict2items | selectattr('value.module', 'defined') | map(attribute='value') | list }}"

ixgbe_module: "{{ ansible_facts | dict2items | selectattr('value.module', 'defined') | selectattr('value.module', 'equalto', 'igb') | list }}"

有人可以告诉我如何过滤以仅获取接口名称吗?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您只想查看使用特定模块的所有接口的名称,则可以执行以下操作:

- hosts: localhost
  gather_facts: true
  vars:
    module_name: e1000e
  tasks:
    - debug:
        msg: >-
          {{
            ansible_facts | dict2items
            | selectattr('value.module', 'defined')
            | selectattr('value.module', 'equalto', module_name)
            | map(attribute='key')
            | list
          }}

在具有单个e1000e网卡的系统上,这将输出:

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "eth0"
    ]
}