如何比较jinja2中if语句中的嵌套列密钥值为saltstack

时间:2015-10-29 19:27:50

标签: python-2.7 jinja2 salt-stack

我正在使用jinja2包裹盐的盐栈状态。

当我尝试使用jinja2比较支柱中的值时,似乎参数评估为空。

如果我使用salt cli查询该值,则返回预期值。

我希望我在使用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命令的输出,返回minion salt-dev的支柱内容:

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

这是我在if语句中使用的值的输出,其中值与jinja2没有返回任何内容,但是在此返回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')没有返回任何内容,但是如上所示,它会返回一些内容。

此外,如果我添加一个默认值,该值在此arg返回的内容中使用,它也可以。

添加默认值的示例是:

{% 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 %}

我现在很新鲜盐和jinja2,所以这是101件事,但我会感谢一些帮助,我已经找不到几个小时了。

我试图回应这个,似乎我得到一个空白

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

支柱文件$w = 0 While($w = 0) If(WinActive("ERROR WINDOW"))Then Send("{ENTER}") $w = 1 ElseIf(ControlGetText("YOUR WINDOW", "", "[CLASS:Static; INSTANCE:2]") <> "SOME TEXT") Then $w = 1 ;and something else EndIf Sleep(1000) WEnd 形成为列表而非地图。

我把它更改为:

/srv/pillar/docker-daemon/docker-daemon.sls