2015-02-25 20 views
6

Nếu bạn cần phải khởi động lại mạng ở giữa của một vở kịch trên một máy chủ Ubuntu (12.04 trong trường hợp của tôi), bạn không thể sử dụng service:Ansible: khởi động lại kết nối mạng trên Ubuntu

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

Các công trình sau đây trên dòng lệnh, nhưng với Ansible (1.8.4) nó khóa bạn ra ngoài:

command: ifdown eth0 && ifup eth0 

ifdown mất xuống giao diện, nhưng ifup không chạy

Làm cách nào để khởi động lại giao diện?

+0

Tại sao lại như vậy? Đối với tôi, nó có vẻ hoàn hảo về chủ đề. – udondan

+1

Có gì với các phiếu bầu và không có ý kiến ​​để đề xuất lý do tại sao? – jonatan

+0

đã có một số nhận xét, phàn nàn nó sẽ bị tắt chủ đề. Các bình luận đã bị xóa, không phải là phiếu giảm giá mặc dù ... – udondan

Trả lời

7

Giải pháp là để chạy các lệnh trong một vỏ mới:

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

Bạn cũng có thể sử dụng các mô-đun vỏ:

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

tại sao bạn không thể sử dụng 'shell'? – Hut8

+2

Bạn có thể, nhưng bạn nên sử dụng 'lệnh' thay vì' shell' [trừ khi trình bao được yêu cầu rõ ràng] (http://docs.ansible.com/ansible/shell_module.html#notes). Tôi đã cập nhật câu trả lời của mình với phiên bản mô-đun trình bao để tham khảo. – jonatan

4

tôi sẽ khuyên bạn nên đợi 1 giây giữa ifdown và ifup và chạy ifup độc lập với mã thoát từ ifdown. Ngoài ra, có thể bạn không muốn chạy mạng đặt lại mỗi khi bạn chạy playbook này ansible, do đó, khi điều kiện sẽ ngăn chặn điều này:

- name: Restart all network interfaces except loopback device 
    shell: "ifdown --exclude=lo -a; sleep 1; ifup --exclude=lo -a" 
    when: configure_lxc_bridge|changed 
Các vấn đề liên quan