我想mysql_tzinfo_to_sql
在tzinfo包(在 Ubuntu 服务器上)更改时运行。我想 Puppet 可以解决这个问题。
我认为 Puppet 会对包版本的更改做出反应,或者如果不是,则对包中包含的文件的时间戳更改做出反应。
我能看到的唯一方法是拥有一个没有直接操作的资源,并有一个依赖它的 exec。
我的问题是:
综合起来,似乎势不可挡。
跟进:精彩的答案!为了完整起见(并记录在案),我应该注意以下几点:
mysql_tzinfo_to_sql | mysql -u root -p password
(它将 tzinfo 加载到 MySQL 数据库中以供 MySQL 使用)。/etc/tzinfo
是徒劳的,因为这只是本地时区配置;目标是观察 tzinfo 数据本身的变化(因此观察/usr/share/zoneinfo
)。此外,詹姆斯·特恩布尔( James Turnbull )在引入审计时写了所有关于审计的内容。元参数参考包含audit
参数工作的简短描述。
使用审计属性跟踪文件内容或包版本号,并通过订阅包资源触发更改。与此有关的一些问题,这不适用于 --noop,因为 state.yaml 文件将在 --noop 模式下更新文件 md5 校验和/包版本。我不确定这是否是一个悬而未决的错误,因为我目前无法追踪它。
file { '/etc/tzinfo':
audit => content,
}
exec { '/usr/bin/mysql_tzinfo_to_sql':
subscribe => File['/etc/tzinfo'],
}
Run Code Online (Sandbox Code Playgroud)
更可靠的方法是将文件复制到其他地方并使用它来触发更新(位置并不重要,我们只是将原始 tzinfo 作为源进行跟踪)。
file { '/etc/puppet/stage/tzinfo':
source => '/etc/tzinfo',
}
exec { '/usr/bin/mysql_tzinfo_to_sql':
subscribe => File['/etc/tzinfo'],
}
Run Code Online (Sandbox Code Playgroud)
第二种方法当然不适用于包,但您可以避免 --noop 和 state.yaml 问题。
关于第三个问题,是的,您可以使用管道和重定向(使用标题并将命令放在命令属性中):
exec {
'/bin/echo foo | grep foo > /tmp/foo':
}
Run Code Online (Sandbox Code Playgroud)
是的,你应该能够做到这一点。
*理论代码示例
package{'tzinfo':
audit => all,
notify => Exec['mysql_tzinfo_to_sql'],
}
exec{'mysql_tzinfo_to_sql':
refreshonly => true,
command => "bash -c '/usr/local/bin/mysql_tzinfo_to_sql >> /var/log/stuff.log'",
}
Run Code Online (Sandbox Code Playgroud)
是的,通过通知元参数。但是,我并不是 100% 肯定 puppet 2.6 中的新审计功能会在包版本更改超出 puppet 控制范围时触发通知。
是的,使用 refreshonly => true
是的,看我的例子。为了简单和安全,Puppet 在交互式 shell 之外运行 exec 命令。您可以使用 -c 开关让 puppet 在 subshell 模式下使用 bash,但请注意引号。
归档时间: |
|
查看次数: |
23581 次 |
最近记录: |