我正在使用 exec 命令运行一个 shell 脚本,该脚本会修改其他软件包的某些配置文件。每当输入参数(例如 ip 地址、端口或 url)发生更改,或者 shell 脚本本身发生更改时,都会触发 exec 命令。
我必须使用 shell 脚本,因为软件包的配置文件在不同版本之间略有不同。我认为通过 sed 脚本更新配置文件比为每个特定版本提供不同的 puppet 模板更容易。
但是这种配置无法检测配置文件是否在 puppet 之外被修改。Puppet 不知道哪些文件被 shell 脚本修改了。
我正在寻找一种使 exec 命令依赖于任意其他文件的校验和的方法:
exec { "my_command.sh":
only_if_file_has_changed => [
"/etc/mysoftware/config.xml",
"/etc/othersoftware/defaults",
]
}
这可能吗?请指教。
答案1
它的工作原理如下:
exec { 'my_command.sh':
command => '/bin/my_command.sh',
subscribe => [
File['/etc/mysoftware/config.xml'],
File['/etc/othersoftware/defaults'],
],
refreshonly => true,
}
这里明显的限制是,文件/etc/mysoftware/config.xml
和/etc/othersoftware/defaults
也必须通过 Puppet 进行更改。
如果它们被其他东西(Puppet 之外的东西)更改,请参阅 Felix 的回答。当然,
您也可以订阅或任何其他更合适的依赖项。Package['xxx']
答案2
Puppet 可以通过其审计元参数。
file { [ "/etc/mysoftware/config.xml",
"/etc/othersoftware/defaults" ]:
audit => 'content',
notify => Exec['my_command'],
}