我有几台机器,我通过傀儡pipe理。 机器在不同的物理位置。 每个位置都有一个特定的位置号码。
我有一个configuration文件,需要有正确的位置号码。
所以/etc/abc.conf的内容是这样的:
this=that location=$LOCATION_NUMBER bananas=tasty
当文件被下推到机器,我需要$ LOCATION_NUMBER实际上是位置号码。
我可以用木偶pipe理这个文件吗?
如果我为LOCATION_NUMBER导出一个facter,那么当木偶将文件压下到机器上时,木偶会写入正确的位置编号吗?
谢谢。
你要做的就是叫做模板。 这是Puppet的核心function,非常有用。 您可以使用eRB格式编写一个可以使用Ruby代码和Factervariables构build文件的文件。 这是一个例子:
file { '/etc/my_config_file': ensure => present, owner => 'root', group => 'root', mode => 0700, content => template('module/my_config_file.erb'), }
现在,在templates/ ( 不是 files/ )下的模块层次结构中,放置一个文件my_config_file.erb :
this=that location=<%= LOCATION_NUMBER %> bananas=tasty
<%= %>格式表示执行一些Ruby代码并返回结果。 在这种情况下,所有事实都可以作为局部variables使用,如ipaddress , lsbmajdistrelease或LOCATION_NUMBER (您的自定义事实)。 您也可以使用任何其他不直接返回<% %>结果的Ruby代码,比如if语句:
<% if LOCATION_NUMBER == 7 %> custom_config=true <% else %> custom_config=false <% end %>
编辑 :当我重新读这个答案,我想build议你不要使用大写字母为您的事实名称。 在Ruby中,以大写字母开头的variables是不可变的。 虽然我不确定这是否真的是一个问题,但这是违背惯例的。
另外,您可以将$ LOCATION_NUMBERvariables存储为ENC返回的参数。 您使用ENC,以便特定位置(或域)或组或主机名中的主机获取特定variables。 有几个好的,免费的ENCs预build和可用,包括仪表板和工头。