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

时间:2014-07-03 16:37:24

标签: ansible ansible-playbook

我正在使用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不会查看模板目录,只查看根目录。

2 个答案:

答案 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中访问模板