ansible(2.5.0)字典(散列)生成器表达式的搜索列表

时间:2018-04-19 16:24:42

标签: ansible ansible-2.x

我有一个字典列表,我想要一个特定的值。 queue-port的node_port。

[
        {
            "name": "queue-port",
            "node_port": 32614,
            "port": 5672,
            "protocol": "TCP",
            "target_port": 5672
        },
        {
            "name": "cluster-port",
            "node_port": 31018,
            "port": 4369,
            "protocol": "TCP",
            "target_port": 4369
        },
        {
            "name": "dist-port",
            "node_port": 30732,
            "port": 25672,
            "protocol": "TCP",
            "target_port": 25672
        }
    ]

我知道如何在python中使用lambda或生成器表达式执行此操作,当遇到ansible完成相同的结果时,我会陷入困境。它是一个从openshift_raw模块生成的对象,所以我可能对python / ansible太过无聊,并且在必要时使这更复杂。

register: opnshft_raw

{{ opnshft_raw.results[0]['result']['spec']['ports'] }}是我要搜索的列表。

>>> (item for item in results if item["name"] == "queue-port").next()['node_port']
32614

1 个答案:

答案 0 :(得分:1)

您需要使用set_fact模块在循环中解析列表变量,并在满足条件时将新变量设置为该值。

示例:

open