【发布时间】:2021-04-21 20:11:34
【问题描述】:
我是 ansible/Jinja 模板的新手,并试图在 Jinja 模板中使用已注册的变量,但我得到:"AnsibleUndefinedVariable: list object has no element"
这是注册变量的 ansible 任务:
- name: get list of system users
find:
paths: /home
recurse: no
file_type: directory
register: user_list
然后在 jinja 模板中,我尝试执行以下操作来访问该变量:
#Realtime scanning of downloads folder
{% for user in user_list.files %}
OnAccessIncludePath /home/{{ user_list.files[user]['gr_name'] }}/Downloads
{% endfor %}
OnAccessIncludePath /media
手动运行 ansible 时,它注册的变量似乎是每个目录列表的字典列表:
localhost | SUCCESS => {
"changed": false,
"examined": 2,
"files": [
{
"atime": 1619032541.630475,
"ctime": 1619032541.630475,
"dev": 66309,
"gid": 1000,
"gr_name": "username1",
"inode": 10094125,
"isblk": false,
"ischr": false,
"isdir": true,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": false,
"issock": false,
"isuid": false,
"mode": "0775",
"mtime": 1619032541.630475,
"nlink": 2,
"path": "/home/username1",
"pw_name": "username1",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 4096,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": true,
"xoth": true,
"xusr": true
},
{
"atime": 1619032541.630475,
"ctime": 1619032541.630475,
"dev": 66309,
"gid": 1000,
"gr_name": "username2",
"inode": 10094131,
"isblk": false,
"ischr": false,
"isdir": true,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": false,
"issock": false,
"isuid": false,
"mode": "0775",
"mtime": 1619032541.630475,
"nlink": 2,
"path": "/home/username2",
"pw_name": "username2",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 4096,
"uid": 1000,
"wgrp": true,
"woth": false,
"wusr": true,
"xgrp": true,
"xoth": true,
"xusr": true
}
],
"matched": 2,
"msg": ""
}
我做错了什么?如何将 gr_name 放入配置文件?
谢谢!
【问题讨论】:
-
这
{{ user_list.files[user]['gr_name'] }}不应该是{{ user.gr_name }}吗? -
我得到了同样的错误。
-
{{ user.gr_name }}是正确答案。 -
哎呀 {{ user.gr_name }} 确实有效。我正在尝试 {{ user_list.files.user.gr_name }}。我想我需要第一部分。