一千萬個為什麽

搜索

用Ansible構建部署的三種解決方案?



我目前正在部署一款新產品,並遇到了一些問題以構建我的Playbook和角色。我有三種不同的解決方案,希望得到一些可能最好的路徑。

該產品是Windows服務器上的Web應用程序。部署(高級)需要以下步驟:

  • 安裝javajdk
  • 安裝tomcat
  • 安裝win_service
  • 配置java regkes
  • 配置tomcat
  • 安裝webapp
  • 啟動服務

我用prod和staging,group_vars,角色(用ansible-galaxy創建)的靜態庫存,所以有某種結構。


Solution 1 Put everything in one huge playbook. That does not sound well, but has the advantage that you know the variables from previous installations e.g. tomcat needs to know where JAVA_HOME is... that was with the javajdk installation, due to more than one java on the machines there is no global JAVA_HOME...


Solution 2 Break all out in small roles. Sounds great but roles should be independent from each other. I did not found a method to decouple tasks. Would it make sense to have single roles for e.g. install_tomcat, config_tomcat and set up a playbook which has the mentioned roles in sequence?

But how does one role know about, e.g. a path name which is needed in the next role. -> Installation sets the path, config needs to know.. I an really unsure to make roles independent.


Solution 3 Kind of solution 2. Have a main playbook which contains only roles, split as much as possible to roles. Have independent variable names in ./roles/vars/main.yml

以某種方式(?)在所有需要 var 定義的playbook中找到變量優先級更高的位置。內部要麽向角色傳遞變量,要麽簡單地過度規則角色變量。

例如。產品具有服務,服務名稱通常是 tomcat 的路徑名稱的一部分。 tomcat 名稱不應該依賴於服務,所以角色中應該有一個 tomcat_install_path ,但是也應該在產品中使用 service_name 。因此,如果產品的劇本被調用,服務名稱應該是名稱的一部分,則調用 tomcat_install 以完全不同的部署,應該不會弄亂服務名稱。


我會用解決方案3,但我還沒有找到一種方法來設置它。什麽是專家意見,解決方案3是否可行,是另一種更好的方法之一還是第四種解決方案?

轉載註明原文: 用Ansible構建部署的三種解決方案?

一共有 1 個回答:

我建議按照 Ansible最佳實踐文檔中的定義構建代碼:

enter image description here

並遵循主要的貢獻者使用這個合適的星系平臺的結構,比如 geerlingguy

如果一個人將遵循一個重要的不同結構,那麽未來將很難重用來自 ansible galaxy 社區,必須重新發明輪子。