每当tzinfo包(在Ubuntu Server上)发生变化时,我想运行
mysql_tzinfo_to_sql.我认为Puppet可以解决这个问题.
我认为Puppet会对包版本的更改做出反应,或者如果没有,那么就会改变包中包含的文件的时间戳.
我能看到这样做的唯一方法是拥有一个没有直接操作的资源,并根据它拥有一个exec.
我的问题是:
>是否可以定义文件
那只用于通知另一个资源(如exec)?
>有可能吗?
定义包资源,以便激活另一个资源(例如exec)
当包更改或更新?
>有可能吗?
定义运行a的exec资源
shell命令行(例如管道和重定向)而不是
来自文件系统的命令?
总而言之,似乎势不可挡.
关注:很棒的答案!为了完整性(以及记录),我应该注意以下几点:
>感兴趣的完整shell命令是
MysqL_tzinfo_to_sql | MysqL -u root -p密码
(它将tzinfo加载到MySQL数据库中供MySQL使用).
>审计/ etc / tzinfo将是徒劳的,因为这仅仅是
本地时区配置;目标是关注变化
在tzinfo数据本身(因此观看/usr/share / zoneinfo).
>同样,内容将是错误的观察 – 因为它们很可能
不要改变;最好的是观看mtime或者所有这些
每次tzinfo更新后,文件时间都应该更改.
此外,詹姆斯·特恩布尔wrote所有关于审计时的介绍. Metaparameter Reference包含审计参数工作的简短描述.
使用audit属性跟踪文件内容或包版本号,并通过订阅包资源来触发更改.有一些问题,这不适用于–noop,因为state.yaml文件将在–noop模式下更新文件md5 checksum / package版本.我不确定这是否是一个悬而未决的bug,因为我现在无法追踪它.
原文链接:https://www.f2er.com/bash/385890.htmlfile { '/etc/tzinfo': audit => content,} exec { '/usr/bin/MysqL_tzinfo_to_sql': subscribe => File['/etc/tzinfo'],}
一种更可靠的方法是将文件复制到别处并使用它来触发更新(位置并不重要,我们只是将原始tzinfo作为源跟踪).
file { '/etc/puppet/stage/tzinfo': source => '/etc/tzinfo',}
第二种方法当然不适用于包,但是你可以避免使用–noop和state.yaml问题.
关于第三个问题,是的,您可以使用管道和重定向(使用标题并将命令放在命令属性中):
exec { '/bin/echo foo | grep foo > /tmp/foo': }