首页 > 解决方案 > 在 saltstack 中使用 jinja 和柱子.get() // 过滤器的工作方式不如预期

问题描述

我在 bash 命令行和 Pillar.get() 的 SLS 文件中有不同的结果。

在命令行中,我收到了预期的结果。

salt-master:/srv/pillar # salt salt-minion2 pillar.get mqobjdetails
salt-minion2:
    ----------
    QM200@QLOCAL@LQ2:
        ----------
        DEFPSIST:
            NO
        GET:
            ENABLED
        MAXDEPTH:
            5000
        MAXMSGL:
            4194304
        MONQ:
            QMGR
    QM200@QMGR@QM200:
        ----------
        DEADQ:
        MAXMSGL:
            4194304
        MONCHL:
            OFF
        MONQ:
            OFF

并带有过滤器

salt-master:/srv/pillar # salt salt-minion2 pillar.get mqobjdetails:QM200@QLOCAL@LQ2
salt-minion2:
    ----------
    DEFPSIST:
        NO
    GET:
        ENABLED
    MAXDEPTH:
        5000
    MAXMSGL:
        4194304
    MONQ:
        QMGR

当我使用以下 jinja 循环语句在状态文件中尝试相同的事情时

{% for objkey, parameters in pillar.get('mqobjdetails', { } ).items() %}

循环按预期工作。

当我尝试使用附加过滤器时

{% for name, value in pillar.get("mqobjdetails:QM200@QMGR@LQ2", { } ).items() %}

循环永远不会运行。所以在这种情况下,我似乎得到了一个空集。

我错了什么?有人可以帮我吗?

标签: jinja2salt-stack

解决方案


我刚刚在文档中找到了答案。

支柱.get 函数

有一个注释,比较了pillar.get() 与 salt'pillar.get'

好吧,当我使用类似的东西时

{% for name, value in salt['pillar.get']('mqobjdetails:' ~ foo, { } ).items() %}

我得到了预期的结果。

我仍然不喜欢这样的想法,即相同的功能具有不同的行为。


推荐阅读