ansibleはどこからtemplateを探すのか?

よく j2 を付け忘れては「templateが見つからない!」と言われます。

どこからtemplate fileを探しているのか?と調べてみたけど、ネット上にあまり落ちてないのでメモ。

こんな構成の Playbook だとして

play_dir
├── hosts
├── roles
│   └── foo
│       ├── defaults
│       │   └── main.yml
│       ├── tasks
│       │   └── main.yml
│       └── templates
│           └── bar.conf.j2
├── site.yml
└── templates
    └── bar.conf.j2

foo role の中で template を配置する task があるとする

- template:
  src: bar.conf.j2
  dest: /path/to/bar.conf
# Play
$ ansible --version
ansible 2.4.3.0

$ cd play_dir
$ ansible-playbook -i hosts site.yml

エラーメッセージに search path が載っているのだけど、この場合は以下から探していた。

play_dir/roles/foo/templates/bar.conf.j2
play_dir/roles/foo/bar.conf.j2
play_dir/roles/foo/tasks/templates/bar.conf.j2
play_dir/roles/foo>/tasks/bar.conf.j2
play_dir/templates/bar.conf.j2
play_dir/bar.conf.j2

なお、Document にのせる提案はされているので、公式化を待つのがよさそう github.com