在RHEL6.5上運行Fabric 1.10,Python 2.7。我們有一個雲環境,我們提供操作系統層支持,並且沒有中央LDAP,因此所有事情都通過腳本,操作系統級帳戶和RSA密鑰完成。您需要做的一件事就是密切關注您的帳戶,以確保您的密鑰正常工作,同時還要確保您的每個系統上的密碼正確無誤,以便您可以sudo。我設計了一個小的測試專門爲此....Fabric sudo call - 無法隱藏致命錯誤
def sudotest(cmd="echo TEST"):
with hide('status','warnings','stderr', 'stdout','running','everything','status'), settings(warn_only=True):
env.abort_on_prompts = True
try:
result=sudo(cmd)
if (result.succeeded):
print(env.host + ":SUCCESS")
else:
print(env.host + ":FAIL")
except SystemExit:
print(env.host + ":FAIL")
except:
print(env.host + ":FAIL - catchall")
你會發現我一直在嘗試各種設置甚至增加了一倍,因爲我已經看到了隱藏輸出古怪的行爲。例如,如果沒有雙重'狀態',我仍然看到「斷開連接」信息。所以我已經嘗試過把所有的東西和所有的stderr都扔出去,而不會改變輸出。我添加了包容性的除外:只是爲了看看它是否有幫助,沒有改變。也沒有試圖改變當別人:
在一個良好的運行我看到這樣的輸出:
[host1] Executing task 'sudotest'
host1 :SUCCESS
host2 :SUCCESS
所以先觀察是,我仍然收到這個第一個運行的消息。否則,這正是我想要的。
在同一主機列表的故意失敗的運行我得到:
[host1] Executing task 'sudotest'
[host1] out: Sorry, try again.
[host1] out: sudo password:
Fatal error: Needed to prompt for a connection or sudo password (host: host1), but abort-on-prompts was set to True
Aborting.
host1 :FAIL
[host2] out: Sorry, try again.
[host2] out: sudo password:
Fatal error: Needed to prompt for a connection or sudo password (host: host2), but abort-on-prompts was set to True
Aborting.
host2 :FAIL
我已經得到了以下ENV設置:
env.disable_known_hosts = True
env.skip_bad_hosts = True
env.remote_interupt = True
env.warn_only = True
env.eagerly_disconnect = True
我通過晶圓廠,而不是Python運行它,即:fab sudotest
通常與我這是因爲我錯過了一些簡單的東西。我可以忍受第一個正在運行的信息,這是致命的錯誤和額外的stderr輸出,可以將乾淨的輸出變成殘骸。
那麼缺少什麼?謝謝。