我知道在 Puppet 中使用流程步驟通常會令人不悅,但由於我們使用它來部署 Veritas 管理的叢集應用程序,因此在呼叫 rpm 安裝之前必須執行一組特定的步驟。
目前,我們手動凍結 Veritas 集群,以便它不會嘗試對應用程式進行故障轉移,運行 Puppet,它會安裝 RPM(必要時關閉應用程式),並指示 Puppet 不要啟動應用程式。然後,我們手動啟動應用程式並解凍 Veritas。最後,我們驗證狀態。
我想自動化這些 Veritas 步驟,這樣我們只需執行 Puppet。這些步驟僅在我們的生產環境中完成。對於所有其他的,我們只需要呼叫 RPM 安裝。讓事情變得複雜的是,如果沒有任何改變,我不想執行任何這些步驟。
做這樣的事情的首選方法是什麼?我正在讀關於運行階段,但似乎需要對我現有的程式碼進行重大重構。
想知道是否有人可以給我一些關於如何處理這個問題的想法。
答案1
根據您對問題的描述,您要么需要使用計劃,要么將所有內容放入 exec 或腳本中,以便您可以指定事物的順序。 Puppet 的表現是它們不具備處理您的用例的能力。
一個例子是:
exec { 'do veritas upgrade' :
onlyif => '${lookup(veritas_version)} is greater than /usr/bin/veritas --version',
exec => 'freeze && stop && install && start && unfreeze && verify',
}