我们有一个基本上像这样工作的木偶设置:
.pp文件看起来像这样:
mysql_user { 'puppetdeploy@localhost':
ensure => 'present',
password_hash => '*****',
}->
mysql_grant { 'grant_all_for_puppetdeploy':
ensure => 'present',
options => ['GRANT'],
privileges => ['ALL'],
table => '*.*',
user => 'puppetdeploy@localhost',
}
#... execute scripts to import bunch of .sql files using mysql user 'puppetdeploy'
mysql_grant { 'revoke_all_for_puppetdeploy':
options => ['REVOKE'],
privileges => ['ALL'],
table => '*.*',
user => 'puppetdeploy@localhost',
}
在mysql模块的更高版本中,这不再有效,因为每个授权的名称必须采用'[user] / [table]'格式,并且我不允许两个或更多的名称相同mysql_grants。
有没有办法在puppetlabs-mysql 3.0.0中解决这个限制,还是有更好的方法来处理临时mysql用户?
答案 0 :(得分:0)
问题是这样的工作流程不适合Puppet的范例。 Puppet清单不是脚本。这是你希望Puppet强制执行的状态描述。当然,转换通常需要序列化的配置步骤才能正确,但是所有内容都应该具有Puppet必须同步的一个明确状态,并且它应该保持在这种状态。
在同一个Puppet事务中需要一个或多个资源来处理多个不同状态的所有工作流都会带来困难,并且通常会通过某种黑客来解决。
在您的特定方案中,最好放弃mysql_grant
类型,转而使用Puppet部署和运行的脚本,这将执行清单摘录中列出的所有步骤。这不是一个非常愚蠢的事情,但更清洁,因为你不会试图让Puppet将相同的资源从一个州转移到另一个州。
更好的是,让Puppet使用实际管理帐户的权限。
作为妥协,你可以添加一个custom fact,允许Puppet在后续事件开始时确定所有GRANT都是有序的,然后删除用户。
if $grants_are_deployed {
mysql_grant { 'revoke_all_for_puppetdeploy': ... }
else {
mysql_user { 'puppetdeploy@localhost': }
}