如何比较 saltstack 的 jinja2 if 语句中的嵌套支柱键值

How to compared a nested pillar key value in an if statement in jinja2 for saltstack

我正在用 jinja2 包裹一些盐来处理 saltstack 状态。

当我尝试使用 jinja2 比较来自柱子的值时,参数似乎没有计算结果。

如果我使用 salt cli 查询该值,它 return 是预期值。

我想我在 jinja2 的 if 语句中错误地引用了值。

以下是理解和查看此问题所需的全部信息:

Salt Master id 是 salt-dev

Salt Minion id 在同一实例上并且是 salt-dev

这里是柱顶文件:

base:
  'salt-dev':
    - docker-daemon.docker-daemon

这是位于 /srv/pillar/docker-daemon/docker-daemon.sls

的嵌套支柱文件
docker-daemon:
  - action: start
  - runlevel: enabled

这是 salt cli 命令的输出 returning minion salt-dev 的支柱内容:

# salt 'salt-dev' pillar.items
salt-dev:
    ----------
    docker-daemon:
        |_
          ----------
          action:
              start
        |_
          ----------
          runlevel:
              enabled

这是我在 if 语句中使用的值的输出,其中值 returns 与 jinja2 无关,但 returns 与 cli 的预期一样:

# salt 'salt-dev' pillar.get docker-daemon:action
salt-dev:
    start

不正确的jinja2行是:

{% if salt['pillar.get']('docker-daemon:action') == 'start' %}

看起来:salt['pillar.get']('docker-daemon:action') return没什么,但是从上面显示的 cli 中它做了 return 一些事情。

另外,如果我添加一个默认值,在这个 arg return 什么都不做的情况下使用,它也有效。

添加默认值的例子是:

{% if salt['pillar.get']('docker-daemon:action', 'def_value') == 'start' %}

我已经在下面的上下文中展示了它:

这是 if 语句有相同问题的状态文件:

{% if ( (grains['osfinger'] == 'Oracle Linux Server-6') and (grains['osarch'] == 'x86_64')) %}
sync_docker-init:
  file.managed:
    - name: /etc/init.d/docker
    - source: salt://docker-daemon/templates/docker-init
    - user: root
    - group: root
    - mode: 755

action_docker-init:
  {% if salt['pillar.get']('docker-daemon:action') == 'start' %}
  service.running:
  {% endif %}

  {% if salt['pillar.get']('docker-daemon:action') == 'stop' %}
  service.dead:
  {% endif %}

    - name: docker
    - require: 
      - pkg: install_docker-engine
    - watch: 
      - file: sync_docker-init

  {% if salt['pillar.get']('docker-daemon:runlevel') == 'enabled' %}
    -- enable: True
  {% endif %}

  {% if salt['pillar.get']('docker-daemon:runlevel') == 'disabled' %}
    -- enable: False
  {% endif %}

  {% else %}
  event.send:
    - tag: 'salt/custom/docker-init/failure'
    - data: "Management of docker init failed, OS not permitted."
{% endif %}

我目前对 salt 和 jinja2 还很陌生,所以这是 101 个东西,但我希望能得到一些帮助,几个小时以来我什么也没找到。

我试图回应这一点,但似乎我只是得到了一个空白行

我找到了解决方案。

支柱文件 /srv/pillar/docker-daemon/docker-daemon.sls 形成为列表而不是地图。

我改成了这样:

docker-daemon:
  action: restart
  runlevel: disabled