我正在使用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
这是我的项目结构:
$ tree
.
├── ansible.cfg
├── hosts
├── roles
│ └── users
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── fig.conf.j2
│ └── vars
│ └── main.yml
├── site.yml
└── Vagrantfile
这是我的site.yml代码:
---
- hosts: users
remote_user: root
sudo: True
tasks:
- name: templates
template: src="fig.conf.j2" dest="/home/vagrant/fig.conf"
然后,为什么Ansible不会查看模板目录,只查看根目录。
答案 0 :(得分:17)
当您明确使用您未在示例中使用的角色“users”时,Ansible将仅查看roles / users / templates目录。要做你想做的事,你需要改变你的site.yml看起来像这样:
- hosts: users
remote_user: root
sudo: True
roles:
- { role: users }
然后在roles / users / tasks / main.yml中,您将拥有:
- name: templates
template: src="fig.conf.j2" dest="/home/vagrant/fig.conf"
site.yml中的角色告诉Ansible调用yaml文件roles / users / main.yml。引用该角色中的文件或模板的任务默认情况下会查找这些文件/模板的角色/用户/文件和角色/用户/模板。您可能希望了解Ansible documentation中有关角色的更多信息,以确保您更好地了解它们如何组合在一起。
答案 1 :(得分:0)
如果要从site.yml访问“ fig.conf.j2”模板文件,则需要在site.yml之外创建一个模板目录,并将文件“ fig.conf.j2”放入其中。
根据您当前的目录结构,因为模板目录位于角色内。您需要从该角色内的task / main.yml中访问模板