2015-02-25 21 views
6

Se è necessario riavviare il collegamento in rete nel bel mezzo di un gioco su un server di Ubuntu (12.04 nel mio caso) non è possibile utilizzare service:Ansible: riavvio rete su Ubuntu

# service networking restart 
stop: Job failed while stopping 
start: Job is already running: networking 

I seguenti lavori su la linea di comando, ma con Ansible (1.8.4) che si blocca:

command: ifdown eth0 && ifup eth0 

ifdown porta giù l'interfaccia, ma ifup non viene eseguito

Come riavviare l'interfaccia?

+0

Perché? Per me sembra essere perfettamente in tema. – udondan

+1

Cosa c'è tra i voti bassi e nessun commento da suggerire perché? – jonatan

+0

c'era qualche commento, lamentando che sarebbe stato fuori tema. Il commento è stato cancellato, non i down-votes però ... – udondan

risposta

7

La soluzione è quella di eseguire il comando in una nuova shell:

command: bash -c "ifdown eth0 && ifup eth0" 

È inoltre possibile utilizzare il modulo shell:

shell: "ifdown eth0 && ifup eth0" 
+0

perchè non puoi usare 'shell'? – Hut8

+2

Si può, ma si raccomanda di usare 'command' invece di' shell' [a meno che la shell sia esplicitamente richiesta] (http://docs.ansible.com/ansible/shell_module.html#notes). Ho aggiornato la mia risposta con la versione del modulo shell per riferimento. – jonatan

4

consiglierei di attendere 1 sec tra ifdown e ifup e eseguire ifup indipendente dal codice di uscita da ifdown. Probabilmente non vorresti eseguire la rete di ripristino ogni volta che esegui questo playbook ansible, quindi una condizione when lo impedirà:

- name: Restart all network interfaces except loopback device 
    shell: "ifdown --exclude=lo -a; sleep 1; ifup --exclude=lo -a" 
    when: configure_lxc_bridge|changed