2014-07-03 11 views
10

Sto usando Ansible e ho qualche problema con il percorso dei template. Ecco l'output di errore quando eseguo:Perché Ansible non legge i modelli nel percorso relativo?

$ 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 

è la mia struttura del progetto:

$ tree 
. 
├── ansible.cfg 
├── hosts 
├── roles 
│   └── users 
│    ├── files 
│    ├── handlers 
│    │   └── main.yml 
│    ├── tasks 
│    │   └── main.yml 
│    ├── templates 
│    │   └── fig.conf.j2 
│    └── vars 
│     └── main.yml 
├── site.yml 
└── Vagrantfile 

E 'il mio codice site.yml:

--- 
- hosts: users 
    remote_user: root 
    sudo: True 
    tasks: 
    - name: templates 
    template: src="fig.conf.j2" dest="/home/vagrant/fig.conf" 

Allora, perché Ansible doesn' t guardare nella directory dei modelli e guarda solo nella directory radice.

+0

perché non stai chiamando 'template' da parte degli utenti/attività/main.yml? 'Fig.conf' fa chiaramente parte del ruolo' utenti'. – tedder42

risposta

16

Ansible cercherà solo nella directory ruoli/utenti/templates quando si utilizza in modo esplicito il ruolo di "utenti", che non si utilizza nel tuo esempio. Per fare ciò che si vuole è necessario modificare il site.yml a guardare qualcosa di simile:

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

Poi in ruoli/utenti/attività/main.yml si avrebbe:

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

Il ruolo in site.yml dice ad Ansible di invocare i ruoli del file yaml/users/main.yml. Le attività che fanno riferimento a file o modelli all'interno di quel ruolo guarderanno per impostazione predefinita ruoli/utenti/file e ruoli/utenti/modelli per quei file/modelli. Potresti voler leggere di più sui ruoli nello Ansible documentation per assicurarti di capire meglio come si integrano.

Problemi correlati