乡亲们
我们目前在工作中有一个自定义部署工具,我们正在评估用非专有的东西(如 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
)。同样,您需要阅读文档以便更好地了解其功能的细节。