【问题标题】:Unable to access ansible dictionary item in jinja template无法访问 jinja 模板中的 ansible 字典项
【发布时间】: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 }}。我想我需要第一部分。

标签: python ansible jinja2


【解决方案1】:

正如 elyas 和 Vladmir Botka 所说,{{ user.gr_name }} 是正确答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多