有没有办法通过 Puppet 将定制文件传送到服务器

有没有办法通过 Puppet 将定制文件传送到服务器

我通过 puppet 管理多台机器。这些机器位于不同的物理位置。每个位置都有特定的位置编号。

我有一个配置文件,其中需要有正确的位置编号。

所以/etc/abc.conf的内容如下:

this=that
location=$LOCATION_NUMBER
bananas=tasty

当文件被推送到机器时,我需要 $LOCATION_NUMBER 实际上是位置编号。

我可以用 puppet 管理这个文件吗?如何管理?

如果我为 LOCATION_NUMBER 导出一个因素,那么当 Puppet 将文件推送到机器时,它能写入正确的位置编号吗?

谢谢。

答案1

您要做的就是创建模板。它是 Puppet 的核心功能,非常有用。您可以编写一个 eRB 格式的文件,该文件可以使用 Ruby 代码和 Facter 变量来构建文件。以下是示例:

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 代码并返回结果。在这种情况下,所有事实都可以作为局部变量使用,例如ipaddresslsbmajdistreleaseLOCATION_NUMBER您的自定义事实)。您还可以使用任何其他不直接在 中返回结果的 Ruby 代码<% %>,例如if语句:

<% if LOCATION_NUMBER == 7 %>
custom_config=true
<% else %>
custom_config=false
<% end %>

编辑:当我重新阅读这个答案时,我想建议你不要在 Fact 名称中使用大写字母。在 Ruby 中,以大写字母开头的变量是不可变的。虽然我不确定这是否真的一个问题,它违反了惯例。

答案2

此外,你可以将 $LOCATION_NUMBER 变量存储为由电子海图。您可以使用 ENC 让特定位置(或域)、组或主机名中的主机获得特定变量。目前有多种预先构建并可用的优质免费 ENC,包括 Dashboard 和 The Foreman。

相关内容