2015-02-25 7 views
6

Jeśli konieczne ponowne uruchomienie sieci w środku gry na serwerze Ubuntu 12.04 (w moim przypadku) nie można używać service:ansibl: restart sieci w Ubuntu

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

następujące prace na wiersz polecenia, ale z ansibl (1.8.4) zaskoczy cię:

command: ifdown eth0 && ifup eth0 

ifdown zdejmuje interfejs, ale ifup nie działa

Jak ponownie uruchomić interfejs?

+0

Dlaczego to? Wydaje mi się, że idealnie pasuje do tematu. – udondan

+1

Co oznacza głosowanie w dół i brak komentarzy, aby zasugerować, dlaczego? – jonatan

+0

był jakiś komentarz, narzekający, że nie byłby to temat. Komentarz został usunięty, a nie głosami w dół ... – udondan

Odpowiedz

7

Rozwiązaniem jest uruchomienie komendy w nowej powłoki:

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

Można również użyć modułu Obudowa:

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

dlaczego nie możesz użyć 'powłoki'? – Hut8

+2

Można, ale zaleca się użycie 'command' zamiast' shell' [chyba, że ​​powłoka jest jawnie wymagana) (http://docs.ansible.com/ansible/shell_module.html#notes). Zaktualizowałem swoją odpowiedź za pomocą wersji modułu powłoki w celach informacyjnych. – jonatan

4

Polecam poczekać 1 sekundę między ifdown i ifup i uruchom ifup niezależnie od kodu wyjścia from ifdown. Również nie prawdopodobnie chcesz run sieć resetowania każdym uruchomieniu tego ansibl playbook, więc gdy ten warunek będzie zapobiegać:

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