首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较value堆栈的jinja2中if语句中嵌套的支柱键值

如何比较value堆栈的jinja2中if语句中嵌套的支柱键值
EN

Stack Overflow用户
提问于 2015-10-29 19:27:50
回答 1查看 2.3K关注 0票数 0

我正在处理一种盐栈状态,并在jinja2中封装了一些盐。

当我试图使用jinja2比较来自一个柱状物的值时,它的参数似乎是空值。

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

我希望我在if语句中引用的值与jinja2不正确。

以下是理解和研究这个问题所需的所有信息:

盐母id是Salt。

Salt Minion id在同一个实例上,是same。

下面是柱顶文件:

代码语言:javascript
复制
base:
  'salt-dev':
    - docker-daemon.docker-daemon

下面是位于/srv/pillar/docker-daemon/docker-daemon.sls的嵌套柱状文件

代码语言:javascript
复制
docker-daemon:
  - action: start
  - runlevel: enabled

下面是salt命令的输出,该命令返回minion salt柱的内容:

代码语言:javascript
复制
# salt 'salt-dev' pillar.items
salt-dev:
    ----------
    docker-daemon:
        |_
          ----------
          action:
              start
        |_
          ----------
          runlevel:
              enabled

下面是我在if语句中使用的值的输出,其中jinja2中的值不返回任何内容,但是在cli中返回的值与这里预期的一样:

代码语言:javascript
复制
# salt 'salt-dev' pillar.get docker-daemon:action
salt-dev:
    start

不正确的jinja2行是:

代码语言:javascript
复制
{% if salt['pillar.get']('docker-daemon:action') == 'start' %}

看起来:salt['pillar.get']('docker-daemon:action')什么也不返回,但是从cli (如上面所示)返回一些内容。

另外,如果我添加了一个默认值,这个值在这个arg没有返回任何东西的情况下使用,那么它也能工作。

添加默认值的一个示例是:

代码语言:javascript
复制
{% if salt['pillar.get']('docker-daemon:action', 'def_value') == 'start' %}

我在下面的背景中说明了这一点:

下面是状态文件,其中if语句有相同的问题:

代码语言:javascript
复制
{% 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个东西,但是我很感谢你的帮助,我已经有几个小时没有发现任何东西了。

我试着重复这句话,好像我只是得到了一个空白行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-30 13:29:49

我找到了解决办法。

柱状文件/srv/pillar/docker-daemon/docker-daemon.sls是作为一个列表而不是地图形成的。

我把它改成了这个

代码语言:javascript
复制
docker-daemon:
  action: restart
  runlevel: disabled
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33423009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档