为什么Ansible不会在相对路径中读取模板?

Rob*_*ert 12 ansible

我正在使用Ansible,我在模板路径上遇到了一些问题.这是我执行时的错误输出:

$ ansible-playbook -i hosts site.yml 

PLAY [users] ****************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [10.0.3.240]

TASK: [templates] ************************************************************* 
fatal: [10.0.3.240] => {'msg': 'unable to read /home/robe/Desktop/ansible_demo/fig.conf.j2', 'failed': True}
fatal: [10.0.3.240] => {'msg': 'unable to read /home/robe/Desktop/ansible_demo/fig.conf.j2', 'failed': True}

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/robe/site.retry

10.0.3.240                 : ok=1    changed=0    unreachable=1    failed=0 
Run Code Online (Sandbox Code Playgroud)

这是我的项目结构:

$ tree
.
??? ansible.cfg
??? hosts
??? roles
?   ??? users
?       ??? files
?       ??? handlers
?       ?   ??? main.yml
?       ??? tasks
?       ?   ??? main.yml
?       ??? templates
?       ?   ??? fig.conf.j2
?       ??? vars
?           ??? main.yml
??? site.yml
??? Vagrantfile
Run Code Online (Sandbox Code Playgroud)

这是我的site.yml代码:

---
- hosts: users
  remote_user: root
  sudo: True
  tasks:
  - name: templates
    template: src="fig.conf.j2" dest="/home/vagrant/fig.conf"
Run Code Online (Sandbox Code Playgroud)

然后,为什么Ansible不会查看模板目录,它只查看根目录.

Bru*_*e P 18

当您明确使用角色"users"时,Ansible将仅查看roles/users/templates目录,您在示例中未使用该角色.要做你想做的事,你需要改变你的site.yml看起来像这样:

- hosts: users
  remote_user: root
  sudo: True
  roles:
    - { role: users }
Run Code Online (Sandbox Code Playgroud)

然后在roles/users/tasks/main.yml中你会得到:

- name: templates
  template: src="fig.conf.j2" dest="/home/vagrant/fig.conf"
Run Code Online (Sandbox Code Playgroud)

site.yml中的角色告诉Ansible调用yaml文件roles/users/main.yml.引用该角色中的文件或模板的任务默认情况下会查找这些文件/模板的角色/用户/文件和角色/用户/模板.您可能希望在Ansible文档中阅读有关角色的更多信息,以确保您更好地了解它们如何组合在一起.