Ansible: fetchlistfromdict 过滤器

创建于 2016-03-25  ·  3评论  ·  资料来源: ansible/ansible

问题类型

  • 特色理念
    概括

假设您有一个字典数组,并且您想构建一个包含一些字典属性的数组。 有几种方法可以做到这一点: selectattr、map和新的提取过滤器。

在您决定将某个组的主机用作字典的初始数组之前,这非常有效。 因此,您必须使用过滤器为组中的每个主机获取hostvars 。 我们通常可以通过一些 jinja 迭代来解决这个问题,但这不适用于设置变量。

也就是说有一个解决方案

def fetchlistfromdict(d, l):
    result = []
    for item in l:
        result.append(d[item])

    return result

class FilterModule(object):
    def filters(self):
        return {
            'fetchlistfromdict': fetchlistfromdict,
        }

现在:

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

这种情况似乎非常具体,可能与route53模块有关。

那么我们可以将这个过滤器添加到 ansible 中吗? 我要不要做PR? 取名呢? 我保存了原始的,但list_from_dict对我来说看起来更好。

feature

最有用的评论

此示例应包含在文档中。 在发现这个问题之前,我搜索了很长时间。

所有3条评论

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

这与有什么不同

{{ groups['webservers']|map('extract', hostvars, ['custom_facts','aliases','0','ip'])|list }}

?

@amenonsen好点,我只尝试使用map(attribute=来获得它,看起来新的提取过滤器可以完成这项工作,期待在新版本中使用它!

此示例应包含在文档中。 在发现这个问题之前,我搜索了很长时间。

此页面是否有帮助?
0 / 5 - 0 等级