有没有办法忽略模板文件的一部分?
我有一个服务,它有一个配置文件,每次服务启动时,它都会在配置文件中写入启动时间。这会让 puppet 检测到更改,并且由于我让它通知服务,它会重新启动服务。我不希望 puppet 在我刚启动服务后不久就重新启动它。
那么有没有办法让 Puppet 忽略模板文件的一部分?
答案1
我认为这是不可能的,puppet 会计算文件的 md5 来检查文件是否更改。是否可以将开始时间写入另一个文件?
答案2
我的解决方案与 Zoredache 的类似,但略有不同,因为您不需要智能脚本来进行比较。
假设您的配置文件/etc/my_application.conf
如下所示:
start_time=<some value set by application on start-up>
option1=VALUE
...
在 puppet 中,将文件添加到 files/ 作为您的配置文件,如下所示:
start_time=DummyValue
option1=VALUE
...
然后,使用清单将文件部署到备用位置,如果存在更改,则触发副本,然后触发服务,如下所示:
file { '/etc/my_application.staging.conf':
ensure => present,
source => 'puppet:///modules/my_application/my_application.conf',
owner => ...
notify => Exec['install-my_application.conf'],
}
exec { 'install-my_application.conf':
refreshonly => true,
command => '/bin/cp /etc/my_application.staging.conf /etc/my_application.conf',
notify => Service['my_application'],
}
service { 'my_application':
...
}
这允许您在新的配置更改时重新启动,但是将不会如果 my_application.conf 在本地被修改,则重新启动服务。这不是完美的解决方案,因为它不能拯救您的本地修改,但希望您可以通过权限和配置文件顶部的明确警告来管理这些修改。