SaltStack - grains.filter_by,指定粒度键并按子键过滤

SaltStack - grains.filter_by, specify grain key and filter by sub key

我不确定我的措辞是否正确,但我希望我能得到一个通过匹配粒度键然后按值(或子 key:values)进行过滤的示例。我担心的是,将来某个时候可能会添加另一种谷物,并被 filter_by 错误地拾取。下面的示例...

grains 示例列表:

Host1
    role: 
        webserver
    secondary:
        none
Host2 
    role: 
        appserver1
    secondary:
        appserver2
Host3
    role: 
        appserver1
        appserver2
    secondary:
        none

示例地图文件:

{% set java = salt['grains.filter_by']({
    'default': {
        'target': '/some/default/file/path',
    },
    'appserver1': {
        'target': '/app/server1/path',
    },
    'appserver2': {
        'target': '/app/server2/path',
    },
},
default='default'
)%}

在这个例子中,假设次级是在未来添加的额外谷物。添加此辅助谷物后,映射文件将为 Host2 获取什么?我知道这不是最好的例子,但是当代码审查我写的一些状态时出现了这个问题,关于我们如何定位 grain 键我没有一个好的答案。在这种情况下,我想以粒度 'role' 为目标并过滤该粒度中的值。我该怎么做?

我在文档中完全错过了这一点,直到我多次阅读它们...

解决方案是像这样添加 grain 值进行过滤:

{% set java = salt['grains.filter_by']({
    'default': {
        'target': '/some/default/file/path',
    },
    'appserver1': {
        'target': '/app/server1/path',
    },
    'appserver2': {
        'target': '/app/server2/path',
    },
},
grain='role',
default='default'
)%}