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 能否对任意文件执行此操作 - 或者对于像 tomcat 这样的东西,我是否必须下载一个了解 tomcat 如何工作的插件?

其次,从我迄今为止所做的阅读来看,似乎大多数人都使用 Puppet 代理从主机检索文件 - 是否必须如此 - 您是否有一个使用 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 %>部分就是你现在所说的“令牌”,而 Puppet 知道如何使用以下命令为任何给定的主机替换它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)。同样,您需要阅读文档以便更好地了解其功能的细节。

相关内容