我想在使用Ansible的主機上調用Perl腳本。 Perl腳本必須由特定用戶「PresenceUser」執行。我看到的是,雖然Ansible報告沒有錯誤腳本未能執行和/或完成作業。Ansible shell和perl腳本失敗
我已經添加到執行此操作的任務是這樣的。
- name: Extract out Presence Collector application [Failing]
shell: perl extract.pl PresenceCollector_{{ app_version }}.tbz
become_user: PresenceUser
args:
chdir: "{{ app_path }}"
tags:
- application_install
register: result
- debug: var=result.stdout_lines
tags:
- application_install
從Ansible結果表明該
TASK [presencecollector : Extract out Presence Collector application [Failing]]
task path: /home/vagrant/ansible/roles/presencecollector/tasks/main.yml:171
<10.157.7.30> ESTABLISH SSH CONNECTION FOR USER: ipasupport
<10.157.7.30> SSH: EXEC ssh -C -vvv -F ssh.cfg -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ipasupport -o ConnectTimeout=30 10.157.7.30 '/bin/sh -c '"'"'(umask 77 && mkdir -p "` echo /tmp/ansible-tmp-1470308291.94-99052579867678 `" && echo ansible-tmp-1470308291.94-99052579867678="` echo /tmp/ansible-tmp-1470308291.94-99052579867678 `") && sleep 0'"'"''
<10.157.7.30> PUT /tmp/tmptI8322 TO /tmp/ansible-tmp-1470308291.94-99052579867678/command
<10.157.7.30> SSH: EXEC sftp -b - -C -vvv -F ssh.cfg -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ipasupport -o ConnectTimeout=30 '[10.157.7.30]'
<10.157.7.30> ESTABLISH SSH CONNECTION FOR USER: ipasupport
<10.157.7.30> SSH: EXEC ssh -C -vvv -F ssh.cfg -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ipasupport -o ConnectTimeout=30 10.157.7.30 '/bin/sh -c '"'"'chown -R PresenceUser /tmp/ansible-tmp-1470308291.94-99052579867678/ && sleep 0'"'"''
<10.157.7.30> ESTABLISH SSH CONNECTION FOR USER: ipasupport
<10.157.7.30> SSH: EXEC ssh -C -vvv -F ssh.cfg -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ipasupport -o ConnectTimeout=30 10.157.7.30 '/bin/sh -c '"'"'setfacl -R -m u:PresenceUser:rX /tmp/ansible-tmp-1470308291.94-99052579867678/ && sleep 0'"'"''
<10.157.7.30> ESTABLISH SSH CONNECTION FOR USER: ipasupport
<10.157.7.30> SSH: EXEC ssh -C -vvv -F ssh.cfg -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ipasupport -o ConnectTimeout=30 -tt 10.157.7.30 '/bin/sh -c '"'"'sudo -H -S -p "[sudo via ansible, key=npvufcaonbexvxpysfwyugmowdjszfvb] password: " -u PresenceUser /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-npvufcaonbexvxpysfwyugmowdjszfvb; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /tmp/ansible-tmp-1470308291.94-99052579867678/command'"'"'"'"'"'"'"'"' && sleep 0'"'"''
<10.157.7.30> ESTABLISH SSH CONNECTION FOR USER: ipasupport
<10.157.7.30> SSH: EXEC ssh -C -vvv -F ssh.cfg -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ipasupport -o ConnectTimeout=30 10.157.7.30 '/bin/sh -c '"'"'rm -f -r /tmp/ansible-tmp-1470308291.94-99052579867678/ > /dev/null 2>&1 && sleep 0'"'"''
changed: [pres7] => {"changed": true, "cmd": "perl extract.pl PresenceCollector_1.0_PC_529.tbz", "delta": "0:00:00.095483", "end": "2016-08-04 11:30:09.972859", "invocation": {"module_args": {"_raw_params": "perl extract.pl PresenceCollector_1.0_PC_529.tbz", "_uses_shell": true, "chdir": "/home/PresenceUser/1.0_PC_22.0/", "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 0, "start": "2016-08-04 11:30:09.877376", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
調試輸出顯示什麼都沒有。
TASK [presencecollector : debug] ***********************************************
task path: /home/vagrant/ansible/roles/presencecollector/tasks/main.yml:180
ok: [pres7] => {
"result.stdout_lines": []
}
如果我以PresenceUser身份登錄到該主機,則可以成功手動執行該命令。
我試着用Ansible「command」模塊,並得到了相同的結果。
我注意到的一點是,即使我指定了「shell」模塊,它表明模塊名稱是「command」?
有沒有一種方法可以進一步調試Ansible試圖執行命令時發生了什麼。
我試過的一件事是看到,如果我在shell模塊中運行'perl -c extract.pl'命令並獲得結果。奇怪的Perl檢查完成,但我看到「extract.pl synxtax OK」在stderr?我猜這個問題是在Perl腳本本身中的:-( –
嘗試在'args'之後放置'become_user'我不確定Ansible是否會在shell命令中應用'args:chdir',如果它沒有直接定義 –
字典中列出的鍵的順序是不相關的,YAML在被Ansible處理之前被解析成一個Python字典,所以你不能控制鍵的順序 – larsks