2014-07-03 89 views
10

我正在使用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 

这是我的项目结构:

$ 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” t查看模板目录,它只查找根目录。

+0

你为什么不从users/tasks/main.yml调用'template'? 'fig.conf'显然是'用户'角色的一部分。 – tedder42

回答

16

当您明确使用角色“users”时,Ansible将只查看角色/ users/templates目录,而您在示例中未使用该角色。要做到你想要什么,你需要改变你的site.yml看起来是这样的:

- hosts: users 
    remote_user: root 
    sudo: True 
    roles: 
    - { role: users } 

然后在角色/用户/任务/ main.yml你会:

- name: templates 
    template: src="fig.conf.j2" dest="/home/vagrant/fig.conf" 

中的作用在site.yml中告诉Ansible调用yaml文件roles/users/main.yml。引用该角色中的文件或模板的任务默认情况下会查看角色/用户/文件以及这些文件/模板的角色/用户/模板。您可能想要详细了解Ansible documentation中的角色,以确保您更好地了解它们如何组合在一起。

相关问题