Puppet:簡單的標記化+需要代理

Puppet:簡單的標記化+需要代理

鄉親們

目前我們有一個自訂部署工具,我們正在評估是否用像 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)。再次強調,需要你閱讀文件以更好地了解其功能的詳細資訊。

相關內容