2013-10-28 65 views
4

我有一個安裝劇本,需要一個新安裝的Linux實例,以默認用戶身份登錄(我們將調用user1),創建另一個用戶(我們將調用user2),然後禁用user1。因爲user1只能在執行這組任務之前訪問實例,所以這些任務是在一個特殊的劇本中,我們必須記住要在新實例上運行。之後,所有常見任務都由user2運行,因爲user1不再存在。Ansible:測試SSH登錄是否可能沒有致命錯誤?

我想結合安裝和常見的劇本,所以我們不必手動運行安裝劇本。我嘗試創建一個任務以查看實例上存在哪個用戶,以嘗試通過SSH以user1身份登錄來完成原始設置任務。問題是,如果我爲任一用戶嘗試SSH登錄,由於無法登錄,導致出現FATAL錯誤:user2在新實例中不存在,或者user1在安裝劇本執行後被禁用。

我相信通過SSH測試登錄是從外部確定實例所處的條件的唯一方法。有沒有一種方法可以在不發生FATAL錯誤的情況下測試SSH登錄,然後根據結果有條件地執行任務?

回答

7

一種方法是使用shell通過local_action調用一個簡單的ssh命令給user1,看看它是否成功。沿着這些路線的東西:

- name: Test for user1 
    local_action: shell ssh [email protected]{{ inventory_hostname }} "echo success" 
    register: user1_enabled 

那麼你可以使用這樣的事情在另一個任務,看看它的工作:

when: user1_enabled.stdout.find("success") != -1 
+0

這是一個很好的解決方案,但上述條件,我得到一個'錯誤同時評估條件'。我將其更改爲'user1_enabled.stdout ==「成功」,並且工作完美。 – udondan