Ansible 中的 Jinja 模板将 "dest" 视为目录而不是文件

Jinja template in Ansible treats "dest" as a directory instead of as a file

tl;dr
Ansible 的模板模块将模板目标视为目录而不是文件。我错过了什么?

情况:
我在另一个名为 backups-role 的角色中使用 paulfantom 的 ansible-restic 角色。我正在本地 lxc 环境中使用虚拟剧本测试我的角色,该环境安装数据库服务,然后使用 ansible-restic 创建一个 cron 作业来备份它。为了测试 purposes,备份目的地是本地 restic 仓库:/var/backup/backups-test。我只用了一个名为backups-test的restic_repo错了!该变量被命名为 {{ ansible_hostname }}/{{ ansible_date_time.epoch }},计算结果相当于 myhost.local/1551799877。直接看答案

问题
这个 ansible 任务来自一个稳定的 ansible 角色 (ansible-restic):

- name: Deploy cron script
  template:
    src: 'restic.cron.j2'
    dest: '/etc/cron.d/restic-{{ item.name }}'
    mode: '0640'
  no_log: false
  with_items: '{{ restic_repos }}'
  register: _cronfiles

... 抱怨失败:

Destination directory /etc/cron.d/restic-backups-test does not exist

讨论
ansible-restic 在这里应该做的是基于模板部署一个 cron 脚本,名称为 restic-backups-test,在目录 /etc/cron.d/ 内。然而,看起来 ansible 解释目录应该是 /etc/cron.d/restic-backups-test 而文件名只是像 1551799877 这样的纪元时间戳,这与 ansible docs 本身的建议相反:

# Example from Ansible Playbooks
- template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: 0644

恐怕这与我的环境有关,但我不知道什么可以使 ansible 改变这种行为,而且我的剧本没有黑魔法。

更多细节
我是来自 Debian Stretch 机器的 运行 ansible 版本 2.7.8 和 python 3.5.3,针对带有 guest os Ubuntu Bionic 的 linux 容器 Ubuntu =66=] 2.7.15rc1 和 python 3.6.7 。 python 符号链接指向 python2.7 。我也尝试过使用 python3.6 得到相同的结果。

请愿书
你能帮我理解这个吗?最后我只想让它工作而不必修改上游角色。时间戳文件名可以是您可能理解的提示。

我 self-answer 因为我用 github.com 的@TheLastProject 的提示解决了它。见刚问:

What's the value of your restic_repos variable?

结果是我在问题中提供的信息是错误的。我在名称中间用斜杠 / 设置变量,仍然不知道为什么。因此,当 ansible-restic 试图确保 /etc/cron.d/{{ repo_name }} 存在时,它实际上是在尝试检查 /etc/cron.d/myhost.local/1551799877,它显然不存在,并且没有创建它,因为它只创建文件,而不是中介 parents.

所以 Ansible 中没有魔法,也没有错误!