2016-08-26 16 views
5

Tôi đã cố gắng tạo một Playbook Ansible thực sự đơn giản sẽ khởi động lại máy chủ và đợi nó quay trở lại.khởi động lại an toàn 2.1.1.0 không thành công

Tôi đã có một trong quá khứ trên Ansible 1.9 đã hoạt động, nhưng gần đây tôi đã nâng cấp lên 2.1.1.0 và không thành công.

Máy chủ tôi khởi động lại được gọi là idm và có IP là 192.168.200.23.

PlayBook đang được chạy từ 192.168.200.1 máy chủ của tôi với lệnh

$ ansible-playbook reboot.yml -vvvv 

Đây là playbook Tôi đang sử dụng

--- 
- hosts: idm 

    tasks: 
    - name: Restart server 
     become: yes 
     shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded" 


    - name: waiting 60 secs for server to come back 
     local_action: wait_for host=192.168.200.23 port=22 delay=60 connect_timeout=200 
     become: false 

Nó khởi động lại máy tốt, nhưng hầu như ngay lập tức thất bại với

<192.168.200.23> ESTABLISH SSH CONNECTION FOR USER: root 
<192.168.200.23> SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/home/myork/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.200.23 '/bin/sh -c '"'"'LANG=en_GB.UTF-8 LC_ALL=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1472242630.58-176546106960362/command; rm -rf "/root/.ansible/tmp/ansible-tmp-1472242630.58-176546106960362/" > /dev/null 2>&1 && sleep 0'"'"'' 
fatal: [idm]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true} 

Bất kỳ ý tưởng nào tôi đã bỏ lỡ ở đây?

Cảm ơn!

+0

có thể trùng lặp của [Làm thế nào để chờ đợi cho máy chủ khởi động lại sử dụng Ansible?] (Http://stackoverflow.com/questions/23877781/ làm thế nào để chờ-cho-máy chủ-khởi động lại-sử dụng-ansible) –

Trả lời

8

tôi khởi động lại máy chủ với async lửa và chế độ quên:

- name: Restart server 
    become: yes 
    shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded" 
    async: 1 
    poll: 0 
+0

Cảm ơn, tôi sẽ kiểm tra đó ngay bây giờ. Tôi đã hy vọng thử và kiểm soát. Tôi không muốn thực hiện một máy chủ khác cho đến khi máy chủ này được sao lưu. – Jim

+0

Điều đó hoạt động hoàn hảo, nhờ Konstantin – Jim

+0

@Jim bạn vẫn có toàn quyền kiểm soát điều đó. 'async' là không thể biết được, rằng bạn không quan tâm đến nhiệm vụ chính xác đó. Nhưng bạn có cái tiếp theo để chắc chắn rằng máy chủ được khởi động. –

3

Các mã sau đây từ Konstantin làm việc một cách hoàn hảo.

- name: Restart server 
    become: yes 
    shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded" 
    async: 1 
    poll: 0 

- name: waiting 60 secs for server to come back 
    local_action: wait_for host=192.168.200.23 port=22 delay=20 connect_timeout=200 
    become: false 
    delegate_to: 127.0.0.1 
0

CẬP NHẬT với nhận xét của @Konstantin Suvorov.

Dưới đây là một giải pháp tốt hơn để tránh IP cứng

- name: Restart server 
    shell: /sbin/shutdown -r now "Ansible system package upgraded" 
    async: 1 
    poll: 0 
- set_fact: wait_host="{{ ansible_host }}" 
- name: Wait for server to come back 
    local_action: wait_for host={{wait_host}} delay=20 port=22 state=started 
    become: false 

Eric

+0

Tốt hơn để sử dụng 'ansible_host', vì tên khoảng không quảng cáo có thể là bí danh không thể định tuyến được. –

+0

ansible_host sẽ trả về localhost (vì local_action). https://github.com/ansible/ansible/issues/16139 – elhostis

+0

bắt tốt! cần phải thêm vào trước với tác vụ trợ giúp 'set_fact: wait_host =" {{ansible_host}} "' và sử dụng '{{wait_host}}'. –

Các vấn đề liên quan