itelitems上的柱子jinja错误

时间:2018-01-31 14:01:18

标签: python linux devops salt-stack

通过支柱数据和jinja模板进行迭代。我从工作盐/支柱安装中获取了大部分模板,但现在无法在新环境中工作。

我尝试了几种不同的语法来实现迭代但仍然得到相同的错误。

服务器名称:

数据无法编译:

Rendering SLS 'base:pillar_lab_user' failed: Jinja variable 'str object' 

没有属性' iteritems'

Jinja Template

{% set users = salt['pillar.get']('XXXXXXX') %}
{% for user, args in users.iteritems() %}
{{ user }}:
  user.present:
    - fullname: {{ args.fullname }}
    - uid: {{ args.uid }}
    - gid_from_name: True
    - shell: {{ args.shell }}
{% if not args.empty_password == true %}
    - password: {{ args.password }}
{% else %}
    - empty_password: {{ args.empty_password }}
{% endif %}
{% if 'groups' in args %}
    - groups: {{ args['groups'] }}
{% endif %}


{% endfor %}

支柱数据

users:
  user1:
    fullname: User1 Fullname
    uid: 951
    gid: 951
    shell: /bin/bash
    groups:
      - sudo
      - admin
    password: (REMOVED)
    pub_ssh_keys: (REMOVED)

  user2:
    fullname: User2 Fullname
    uid: 955
    gid: 955
    shell: /bin/bash
    groups:
     - sudo
     - admin
    password: (REMOVED)
    pub_ssh_keys: (REMOVED)

{%for user,args in users.iteritems()%}

iteritems的正确语法是什么,并通过jinja模板访问此数据。 我尝试了很多这种语法的变体,但仍然得到了

ServerName:
    Data failed to compile:
----------
     Rendering SLS 'base:pillar_lab_user' failed: Jinja variable 'str object' 

没有属性' iteritems'

修改

这是所有用户错误,支柱配置格式错误。我删除了第一行

"{% set users = salt['pillar.get']('XXXXXXX') %}" 

所以我没有使用pillar.get并且使用了支柱top.sls。它现在正常运作。

1 个答案:

答案 0 :(得分:0)

您的数据应失败:
Rendering SLS 'base:so' failed: Jinja variable 'dict object' has no attribute 'empty_password'

您看到此错误的原因必须是由不存在的支柱数据引起的。

您已粘贴完整的支柱数据,但将XXXXXXX留在状态文件中。 它表明修复可能很简单:

{% set users = salt['pillar.get']('users') %}

或者如果不是这样:检查您是否使用pillarenv,然后记住传递正确的,您只需在命令行中验证:

salt 'your minion' pillar.get users

如果它没有返回您的字典,请尝试:

salt 'your minion' pillar.get users pillarenv=your_pillar_env