2015-06-05 13 views
7

Se ho qualcosa di simile:include_vars ansible continuano se il file non trovato

- include_vars: this_file_doesnt_exist.yml 

ansible getterà l'errore "file di input non trovato in ..." e fermare il processo di provisioning.

Mi chiedo se è possibile consentire al processo di provisioning di continuare se il file non viene trovato.

mio caso d'uso è la seguente:

  • tenta di caricare un file variabili
  • eseguire compiti se quelle variabili esistono

Esempio:

- include_vars: aptcacher.yml 

- name: use apt-cache 
    template: src=01_proxy.j2 dest=/etc/apt/apt.conf.d/01_proxy owner=root group=root mode=644 
    sudo: true 
    when: aptcacher_host is defined 

versione Ansible: 1.9 .1

risposta

1

È possibile utilizzare with_first_found per archiviarlo.

- include_vars: "{{ item }}" 
    with_first_found: 
    - this_file_doesnt_exist.yml 

Non sono sicuro al 100% che funzionerà senza lamentarsi se non almeno un file corrisponde. Nel caso in cui non dovesse funzionare, è necessario aggiungere un file di riserva vuoto:

- include_vars: "{{ item }}" 
    with_first_found: 
    - this_file_doesnt_exist.yml 
    - empty_falback.yml 
+0

Il primo caso non funziona, necessita di almeno un file abbinato (uscite "Nessun file sorgente dato"). Il secondo caso funziona davvero, ma sembra più una soluzione alternativa, piuttosto una soluzione corretta/pulita. Grazie! –

4

Si può solo ignore_errors sul compito include_vars:

- include_vars: nonexistant_file 
    ignore_errors: yes 

EDIT

Con ansible > 1.6.5 I am getting

test.yml

--- 

- hosts: localhost 
    tasks: 
    - include_vars: nonexistent_file 
     ignore_errors: yes 

    - debug: 
     msg="The show goes on" 

PLAY [localhost] FATTI


RACCOLTA ***************************** ********************************** ok: [localhost]

COMPITO: [include_vars nonexistent_file] ***************************************** non riuscito: [localhost] => {" failed ": true," file ": "/home/ilya/spielwiese/ansible/nonexistent_file "} msg: trovato il file di origine non . ... ignorando

TASK: [debug msg = "Lo spettacolo continua"] **************************** ************** ok: [localhost] => { "msg": "Lo spettacolo continua"}

+1

Ho provato con "ignore_errors" ma non sembra funzionare. Ansible genererà lo stesso errore "file di input non trovato in ...".Grazie –

+0

Stai utilizzando 'include_vars' come attività? Hai provato il playbook come ho postato sopra? – ProfHase85

+0

Ho appena provato il tuo playbook ('ansible-playbook -i localhost, test.yml') e ho ottenuto lo stesso errore" file di input non trovato in ... ". Stai usando un comando diverso per eseguire il tuo playbook? Sto usando ansible 1.9.1. –