2014-07-03 108 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中的角色,以確保您更好地瞭解它們如何組合在一起。

相關問題