
鄉親們
目前我們有一個自訂部署工具,我們正在評估是否用像 puppet 這樣的非專有工具來取代它。
目前它為我們做的主要事情之一就是標記化。例如,在 tomcat 部署中的 server.xml 檔案中,我們可以部署一個名為server.xml.tokenzenized
以下行的文件
<Ajp12Connector port="@@TOMCAT.AJP.PORT@@" ajpidFile="conf/ajp12_2.id" />
然後有一個tokens.xml
文件,其中包含一行
<TOKEN NAME='TOMCAT.AJP.PORT' value = '8080/>
然後,我們的部署程序會掃描 server.xml.tokenized,並取代令牌,將檔案寫入 server.xml。
puppet 可以對任意文件執行此操作嗎?
其次,從我迄今為止完成的閱讀來看,似乎大多數人都使用木偶代理從主伺服器檢索文件 - 是否一定是這種情況 - 您可以有一個使用木偶建模和基礎設施的腳本嗎?主機來部署軟體? - 理由是,由於各種原因,我們對環境中的代理存在偏見。
乾杯
答案1
對於第一個問題:是的,puppet
可以使用範本加上hiera
和/或facter
。這個過程完全是使用模板檔案從軟體中抽象化出來的。
例如,您可以有一個包含server.xml
以下部分的範本:
<Connector address="<%= @ipaddress_eth0 %>"
executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
該<%= @ipaddress_eth0 %>
部分是您當前所說的“令牌”,並且木偶知道如何使用以下命令替換任何給定主機的它facter
:
# facter ipaddress_eth0
10.0.0.2
你可以有定制事實如果你也需要它們。
分層資料主題稍微複雜一些,需要您閱讀一些文件以了解它如何幫助您部署。這很好地展示了它的可能性。基本上,它的目的是提供分離程式碼和資料(您的「令牌」)的方法,並以熟悉的、易於維護的格式(YAML 或 JSON)儲存該資料。您上面描述的用例(為 定義自訂連接埠tomcat
)是 的經典使用模式hiera
:
在tomcat
模組中你會有類似的東西:
class tomcat (
$port
){
#rest of the module
}
在模板中(例如,server.xml.erb
):
<Ajp12Connector port="<%= port %>" ajpidFile="conf/ajp12_2.id" />
與該程式碼相符的分層資料部分將類似於:
tomcat::port = 8080
對於第二個問題,在某種程度上,答案也是肯定的。您可以使用牽線木偶集體(事實上,這是 puppetlabs 提供的一部分),將變更推送到無代理伺服器集區。不過,您需要安裝客戶端(不完全相同,因為這些客戶端是被動的,與puppet
代理程式不同,代理主動請求其目錄到puppetmaster
)。再次強調,需要你閱讀文件以更好地了解其功能的詳細資訊。