首页 文章

itelitems上的柱子jinja错误

提问于
浏览
1

通过支柱数据和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

    您的数据应该失败:
    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
    

相关问题