通过支柱数据和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 回答
您的数据应该失败:
Rendering SLS 'base:so' failed: Jinja variable 'dict object' has no attribute 'empty_password'
您看到此错误的原因必须是由不存在的支柱数据引起的 .
您已粘贴完整的支柱数据,但在状态文件中保留了
XXXXXXX
. 它表明修复可能很简单:或者如果不是这样:检查您是否使用
pillarenv
,然后记住传递正确的,您可以在命令行中验证:如果它没有返回你的字典,那么试试: