我试图让这样的东西在我的 Puppet 清单中工作:
if $hostname == 'host1' || $hostname == 'host2' {
# Modified config.txt for portrait mode.
file { '/boot/config.txt' :
ensure => present,
mode => '0755',
source => 'puppet://puppet/files/boot/config.txt.portrait',
}
} else {
# Normal config.txt for landscape mode.
file { '/boot/config.txt' :
ensure => present,
mode => '0755',
source => 'puppet://puppet/files/boot/config.txt.landscape',
}
}
然而,这失败了。根据主机名,包含不同文件的最佳方法是什么?
另一种语法是在源参数中使用选择器。
基于 devicenull 所说的,您可以通过使用选择性文件源进一步缩短它:
我的清单中有很多这样的例子,其中主机类型需要相对静态的文件(通常不是主机名级别),但绝对是 $domain 和自定义事实 $site_location(外部、数据中心、办公室等)被广泛使用。
对于您要问的内容,我会使用Case Statements。
图因斯拉克!
我们这样解决了我们的问题:
我们有两种不同类型的 chronyd 配置文件:一种用于所有常规机器,另一种用于在我们网络中充当 NTP 服务器的所有 DNS 服务器。我们在这里有一个命名约定,每个 DNS 服务器的主机名都以“sv-dns”开头。因此,通过上面的代码片段,我们可以确保以“sv-dns”开头的每个主机名都将收到 chrony.conf_server 文件,而所有其他服务器将收到 chrony.conf_client 文件。
如果您的主机名是固定的,例如 dnsmachine.some.domain 您可以使用@kwiksand 提供的示例:
此致,
阿代尔
我不得不使用“或”而不是||: