2016-10-19 38 views
0

如果我嘗試使用期望模塊在這樣YAML文件:ansible-期望從Cisco IOS模塊開關

name: some tests 
     hosts: sw-test 
     gather_facts: False 

     tasks: 
     - name: do reload in case of "catting off" 
     expect: 
     command: reload in 30 
     responses: 
      'Reload scheduled in 30 minutes by admin on vty0 (192.168.253.20)\nProceed with reload? \[confirm\]' : y 
     echo: yes 

但是有一個問題連接:

[email protected]:/etc/ansible# ansible-playbook test3 -u admin -k -vvvv 
Using /etc/ansible/ansible.cfg as config file 
SSH password: 
Loaded callback default of type stdout, v2.0 

PLAYBOOK: test3 **************************************************************** 
1 plays in test3 

PLAY [some tests] ************************************************************** 

TASK [do reload in case of "catting off"] ************************************** 
task path: /etc/ansible/test3:9 
<192.168.0.33> ESTABLISH SSH CONNECTION FOR USER: admin 
<192.168.0.33> SSH: EXEC sshpass -d12 ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o User=admin -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.0.33 '/bin/sh -c '"'"'(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1476882070.37-92402455055985 `" && echo ansible-tmp-1476882070.37-92402455055985="` echo $HOME/.ansible/tmp/ansible-tmp-1476882070.37-92402455055985 `") && sleep 0'"'"'' 
<192.168.0.33> PUT /tmp/tmp30wGsF TO "` echo $HOME/.ansible/tmp/ansible-tmp-1476882070.37-92402455055985 `") && sleep 0'"/expect 
<192.168.0.33> SSH: EXEC sshpass -d12 sftp -o BatchMode=no -b - -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o User=admin -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r '[192.168.0.33]' 
fatal: [192.168.0.33]: UNREACHABLE! => {"changed": false, "msg": "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh", "unreachable": true} 
    to retry, use: --limit @/etc/ansible/test3.retry 

PLAY RECAP ********************************************************************* 
192.168.0.33    : ok=0 changed=0 unreachable=1 failed=0 


[email protected]:/etc/ansible# ansible-playbook test3 -u admin -k -vvvv -c ssh 
Using /etc/ansible/ansible.cfg as config file 
SSH password: 
Loaded callback default of type stdout, v2.0 

PLAYBOOK: test3 **************************************************************** 
1 plays in test3 

PLAY [some tests] ************************************************************** 

TASK [do reload in case of "catting off"] ************************************** 
task path: /etc/ansible/test3:9 
<192.168.0.33> ESTABLISH SSH CONNECTION FOR USER: admin 
<192.168.0.33> SSH: EXEC sshpass -d12 ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o User=admin -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.0.33 '/bin/sh -c '"'"'(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1476882145.78-139203779538157 `" && echo ansible-tmp-1476882145.78-139203779538157="` echo $HOME/.ansible/tmp/ansible-tmp-1476882145.78-139203779538157 `") && sleep 0'"'"'' 
<192.168.0.33> PUT /tmp/tmpY5qqyW TO "` echo $HOME/.ansible/tmp/ansible-tmp-1476882145.78-139203779538157 `") && sleep 0'"/expect 
<192.168.0.33> SSH: EXEC sshpass -d12 sftp -o BatchMode=no -b - -C -vvv -o 

ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o User=admin -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r '[192.168.0.33]' 
    fatal: [192.168.0.33]: UNREACHABLE! => {"changed": false, "msg": "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh", "unreachable": true} 
     to retry, use: --limit @/etc/ansible/test3.retry 

    PLAY RECAP ********************************************************************* 
    192.168.0.33    : ok=0 changed=0 unreachable=1 failed=0 

[email protected]:/etc/ansible# ansible-playbook test3 -u admin -k -vvvv -c local 
Using /etc/ansible/ansible.cfg as config file 
SSH password: 
Loaded callback default of type stdout, v2.0 

PLAYBOOK: test3 **************************************************************** 
1 plays in test3 

PLAY [some tests] ************************************************************** 

TASK [do reload in case of "catting off"] ************************************** 
task path: /etc/ansible/test3:9 
<192.168.0.33> ESTABLISH LOCAL CONNECTION FOR USER: root 
<192.168.0.33> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809 `" && echo ansible-tmp-1476882426.62-172601217553809="` echo $HOME/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809 `") && sleep 0' 
<192.168.0.33> PUT /tmp/tmpdq1pYy TO /root/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809/expect 
<192.168.0.33> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809/ /root/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809/expect && sleep 0' 
<192.168.0.33> EXEC /bin/sh -c 'LANG=pl_PL.UTF-8 LC_ALL=pl_PL.UTF-8 LC_MESSAGES=pl_PL.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809/expect; rm -rf "/root/.ansible/tmp/ansible-tmp-1476882426.62-172601217553809/" > /dev/null 2>&1 && sleep 0' 
fatal: [192.168.0.33]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_args": {"chdir": null, "command": "reload in 30", "creates": null, "echo": true, "removes": null, "responses": {"Reload scheduled in 30 minutes by admin on vty0 (192.168.253.20)\\nProceed with reload? \\[confirm\\]": "y"}, "timeout": 30}, "module_name": "expect"}, "msg": "The command was not found or was not executable: reload."} 

NO MORE HOSTS LEFT ************************************************************* 
    to retry, use: --limit @/etc/ansible/test3.retry 

PLAY RECAP ********************************************************************* 
192.168.0.33    : ok=0 changed=0 unreachable=0 failed=1 

是否有可能使用期望模塊與Cisco IOS交換機? 當我使用例如「ios_command」模塊時,我沒有這樣的問題。

回答

0

我猜,你的運氣了這裏,因爲expect模塊,您需要:

要求(在主機上執行模塊)
蟒蛇> = 2.6
Pexpect的> = 3.3

你的IOS交換機上幾乎沒有任何python和pexpect。

+0

這意味着這是不可移動的與思科IOS使用thos模塊? –

+0

是的。通常你需要在目標框上安裝python,以便普通模塊工作。例如,很少有例外,比如'raw'。此外還有用於特定硬件的模塊,例如使用設備上可用工具的'ios_command',不需要額外的庫。 –

+0

上面的問題出生了,因爲我試圖處理一些cisco命令,需要在提示再次顯示之前進行確認。我被建議嘗試使用expect模塊。 Mayby你可以看看並嘗試回答這個問題:http://stackoverflow.com/questions/40045342/ansible-cisco-ios-and-reload-command。提前致謝。 –