我目前在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: }
但是我得到了一些奇怪的错误。有人可以帮我弄清楚如何制作循环吗?
答案 0 :(得分:3)
资源标题是字符串。总是
您正尝试使用mysql_loop
资源的标题将哈希提供给类型定义。这不起作用。最终会使用字符串化版本的哈希值,而后来通过哈希索引检索组件的尝试将失败,可能会出现某种类型的错误。
您有几个选择:
您可以稍微重构您的定义和数据,并将聚合数据作为哈希参数传递。 (以下示例。)
您可以稍微重新定义您的定义和数据,并使用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模块获得。)