我当前在hiera/puppet之间有一个问题:
在我的hiera中,我有:
mysql_user_mgmt:
- mysql_user: 'toto@localhost'
mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
mysql_grant_user: 'toto@localhost/*.*'
mysql_user_table_privileges: '*.*'
- mysql_user: 'test@localhost'
mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
mysql_grant_user: 'test@localhost/*.*'
mysql_user_table_privileges: '*.*'
在我的木偶中,我正在尝试制作一个循环以从Hiera获取数据:
$mysql_user_mgmt = hiera('mysql_user_mgmt',undef)
define mysql_loop () {
$mysql_hash_password = $name['mysql_hash_password']
notify { "mysql_hash_password: ${mysql_hash_password}": }
}
mysql_loop { $mysql_user_mgmt: }
但是我遇到了一些奇怪的错误。有人可以帮助我弄清楚如何制作循环吗?
资源标题是字符串。总是。
您正在尝试使用mysql_loop
资源的标题将A hash 馈送到类型定义。那不起作用。哈希的串制版本最终将被使用,您以后通过哈希索引检索组件的尝试将失败,可能会出现某种类型的错误。
您有一些选择:
-
您可以重组定义和数据,并将汇总数据作为哈希参数传递。(下面的示例。)
-
您可以稍微重组定义和数据,并使用
create_resources()
函数。 -
如果您已升级到Puppet 4,或者您愿意在Puppet 3中启用未来的解析器,则可以使用新的(ISH)循环功能,例如
each()
。
替代(1)的示例:
将数据重组为哈希的哈希,键入用户ID:
mysql_user_mgmt:
'toto@localhost':
mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
mysql_grant_user: 'toto@localhost/*.*'
mysql_user_table_privileges: '*.*'
'test@localhost':
mysql_hash_password: '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'
mysql_grant_user: 'test@localhost/*.*'
mysql_user_table_privileges: '*.*'
修改定义:
define mysql_user ($all_user_info) {
$mysql_hash_password = $all_user_info[$title]['mysql_hash_password']
notify { "mysql_hash_password: ${mysql_hash_password}": }
}
像这样使用它:
$mysql_user_mgmt = hiera('mysql_user_mgmt',undef)
$mysql_user_ids = keys($mysql_user_mgmt)
mysql_user { $mysql_user_ids: all_user_info => $mysql_user_mgmt }
(keys()
功能可从PuppetLabs-STDLIB模块获得。)