2016-08-26 1 views
5

서버를 재부팅하고 다시 돌아올 때까지 기다릴 수있는 아주 간단한 Anework 플레이 북을 만들려고했습니다.재부팅 2.1.1.0이 실패했습니다.

이전에는 Ansible 1.9에서 작동 했었지만 최근에 2.1.1.0으로 업그레이드했는데 실패했습니다.

내가 재부팅하는 호스트를 idm이라고하며 192.168.200.23의 IP를 사용합니다.

플레이 북이 명령을 내 호스트 192.168.200.1에서 실행되고

$ ansible-playbook reboot.yml -vvvv 

이 내가 그것은 기계의 벌금을 재부팅

--- 
- 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 

을 사용하고 플레이 북이지만, 거의 즉시 실패 와 함께

<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} 

내가 여기에서 무엇을 놓쳤는가?

감사합니다.

+0

가능한 복제 [Ansible를 사용하여 서버를 다시 시작을 기다리는 방법?] (http://stackoverflow.com/questions/23877781/ 서버 재시작 대기열 사용 방법) –

답변

8

나는 async 불 서버를 다시 부팅 모드 잊지 : 콘스탄틴에서 다음 코드는 완벽하게 작동

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

고마워요, 지금 테스트 할게요. 나는 통제하려고 노력했다. 이 서버가 백업 될 때까지 다른 서버를 사용하고 싶지 않습니다. – Jim

+0

완벽하게 작동했습니다, 감사합니다 Konstantin – Jim

+0

@ 짐 당신은 여전히 ​​그걸 완벽하게 제어 할 수 있습니다. 'async'는 당신이 그 정확한 작업에 신경 쓰지 않는다는 것을 안다. 그러나 서버가 부팅되었는지 다음 서버로 확인하십시오. –

3

합니다.

- 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

@Konstantin Suvorov의 의견으로 업데이트. 여기

더 나은 솔루션

하드 IP

- 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 

에게 에릭을 피하기 위해

+0

인벤토리 이름은 라우팅 할 수없는 별명 일 수 있기 때문에'ansible_host'를 사용하는 것이 더 좋습니다. –

+0

ansible_host는 localhost를 반환합니다 (local_action (으)로 인해). https://github.com/ansible/ansible/issues/16139 – elhostis

+0

좋은 캐치! helper task'set_fact : wait_host = "{{ansible_host}}"를 앞에두고'{{wait_host}} '를 사용할 필요가있다. –