我知道我可以在Puppet中同步目录:
file { 'sqls-store':
path => '/some/dir/',
ensure => directory,
source => "puppet:///modules/m1/db-updates",
recurse => true,
purge => true
}
所以当添加新文件时,它们会被复制到'/ some / dir /'。但是我需要的是为每个新文件执行一些操作。如果我“订阅”这样的资源,我不会得到一个新文件数组。 目前我创建了外部shell脚本,该脚本在该目录中查找新文件并为每个文件执行操作。 当然,我宁愿不依赖外部脚本。有没有办法用Puppet做到这一点?
谢谢!
用例是将更改应用于不时生成的DB模式,并应应用于puppet管理的所有客户端。最后,对于每个此类文件,它都是mysql [args] < update.sql
。
答案 0 :(得分:0)
不确定我是否会建议木偶为我应用db更改。
对于小型数据库,它可能有效,但对于真实世界数据库...您想要了解何时以及如何应用这些更改(更改的排序,有时需要临时磁盘空间调整,数据库停机,备份前/后,重组,...),大多数时候你的应用程序应该同时适应。您需要更多编排(并且木偶不擅长编排)
为什么不使用专门用于此任务的工具,如
穷人解决方案是使用vcs-repo模块和exec列出自上次“应用”以来修改过的文件。
答案 1 :(得分:0)
我同意mestachs,处理数据库更新的木偶这不是一个好主意
您可以尝试某种定义:
define mydangerousdbupdate($name, $filename){
file { "/some/dir/$filename":
ensure => present,
source => "puppet:///modules/m1/db-updates/$filename",
}
exec{"apply $name":
command => "/usr/bin/mysql [args] < /some/dir/$filename > /some/dir/$filename.log",
creates => "/some/dir/$filename.log"
}
}
然后,您可以按首选顺序实例化不同的补丁
mydangerousdbupdate{"first_change":
name => "first",
filename => "first.sql",
}->mydangerousdbupdate{"second_change":
name => "second",
filename => "second.sql",
}