通过支柱数据和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。它现在正常运作。
答案 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