2015-09-10 16 views
6

Ho un compito ansible semplice che crea un file:Ansible problema di autorizzazione

- name: create fake file 
    file: 
    name: /opt/refdata/PROD02/roman.delete 
    state: touch 

ho generato le chiavi pubbliche/private e ha aggiunto un pubblico authorized_keys2 per l'utente sto facendo funzionare come sul host di destinazione.

Quando provo a farlo funzionare io ottenere il seguente errore:

failed: [experiment01] => {"failed": true, "parsed": false} 
Traceback (most recent call last): 
    File "/home/acplus_uat01/.ansible/tmp/ansible-tmp-1441921944.69-3869708445827/file", line 1999, in <module> 
    main() 
    File "/home/acplus_uat01/.ansible/tmp/ansible-tmp-1441921944.69-3869708445827/file", line 372, in main 
    open(path, 'w').close() 
IOError: [Errno 2] No such file or directory: '/opt/refdata/PROD02/roman.delete' 

Così, per vedere se ho problemi con ssh o pitone ho provato questo - ho creato un file di pitone con una riga:

open('/opt/refdata/PROD02/roman.delete', 'w').close() 

e corse questo dallo stesso luogo e lo stesso utente come corro ansible:

cat test2.py | ssh -i ~/.ssh/myPrivateKey -q [email protected] python - 

e ha creato il file.

Quindi, la mia domanda è: dov'è il problema, perché non può creare un file?

il modo in cui si esegue il Playbook è questo:

ansible-playbook -i inventory/prod/ acc.yml -v --vault-password-file=~/.ansible-vault-pw --private-key ~/.ssh/myPrivateKey 

Ho anche cercato di creare un file in/tmp/e ansible funzionato.

Modifica: Quindi, un altro aggiornamento: ho creato la directory in cui sto scrivendo il file in world writable (777) e ha creato il file. Quindi, la domanda è - ciò che è diverso in Ansible che

cat test2.py | ssh -i ~/.ssh/myPrivateKey -q [email protected] python - 

opere e facendo essenzialmente la stessa cosa attraverso Ansible non lo fa.

+0

Dal momento che il playbook ansible può scrivere i file in/tmp ma non qui, mi piacerebbe aggiungere un passaggio al gioco a 'debug: var = ansible_ssh_user' e verificare che corrisponde l'utente che lo script python di essere gestita da . – nikobelia

+0

Mi piacerebbe semplicemente toccare/tmp/foo da dentro Ansible, quindi controllare le autorizzazioni e la proprietà di/tmp/foo in seguito per verificare che il file sia stato creato da Ansible con gli attributi che ci si aspetta. –

+0

Viene creato con gli attributi che mi aspetto - utente/gruppo destro –

risposta

3

Se /opt/refdata/PROD02/ non esiste è necessario creare directory prima

file: 
    name: /opt/refdata/PROD02 
    state: directory 
    recurse: yes 
    mode: 0755 

Ansible documentation dice:

recurse - Set the specified file attributes (applies only to state=directory)

Quindi Ansible Impossibile creare il file e tutte le directory nel suo percorso in un solo comando.

Quindi con il secondo comando è necessario creare il file stesso.

name: create fake file 
    file: 
    name: /opt/refdata/PROD02/roman.delete 
    state: touch 
+0

/opt/refdata/PROD02/esiste –

Problemi correlati