SaltStack - map.jinja文件无法匹配类型字典的粒度,我是否错误地定义了粒子?

时间:2016-05-16 20:41:28

标签: salt-stack

我在一个使用grain.filter_by的状态下使用map.jinja文件,匹配谷物w / id'角色'。这用于动态设置应用程序使用的Java版本。我知道,很奇怪,但这就是我继承的系统今天如何工作,所以我在配置管理中将其设置为第1步,以使事情变得更好。地图文件在主机上没有任何问题,谷物值'role'是单个项目(我认为是yaml中的列表)。

地图文件示例:

{% set java = salt['grains.filter_by']({
    'default': {
        'link_target': '/path/jdk1.7.0_03',
    },
    'appA': {
        'link_target': '/path/jdk1.7.0_75',
    },
    'appB': {
        'link_target': '/path/jdk1.6.0_06',
    },
},
grain='role',
default='default'
)%}

主机的粒度值w /角色值字典,我在这些主机上得到错误:

 role:
    ----------
    appA:
        None
    appC:
        None
    appD:
        ----------
        someBool:
            True
        someVendor:
            microsoft
        someBool2:
            False
        someVendor2:
            apple
        type:
            delayed

没有谷物字典的主机的谷物值,没有错误:

role:
    appB

错误:

    Data failed to compile:
----------
    Rendering SLS 'base:java' failed: Jinja error: unhashable type: 'dict'
/var/cache/salt/minion/files/base/java/map.jinja(1):
---
{% set java = salt['grains.filter_by']({    <======================

现在,我很确定这是因为我的角色值字典的粒度值与我的粒度值解析为yaml不同,粒度值是一个简单的键:值对。

我是SaltStack和YAML的新手,所以我在这里可能会遗漏一些小事。我的粮食价值太复杂了吗?你有更好的方法来修复或推荐吗?

1 个答案:

答案 0 :(得分:1)

也许您应该再次查看salt.modules.grains的文档。

所以这就是我所看到的:

salt.modules.grains.filter_by(lookup_dict, grain='os_family', merge=None, default='default', base=None)
  

lookup_dict - 由谷物键入的字典,包含值或   与匹配该谷物的系统相关的值。例如,一把钥匙   可能是操作系统的粒度,值可能是包的名称   在那个特定的操作系统上。

字典值键似乎必须是一粒。