0

我目前在 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: }

但我遇到了一些奇怪的错误。有人可以帮我弄清楚如何制作循环吗?

4

1 回答 1

3

资源标题是字符串。总是。

您正在尝试使用mysql_loop资源的标题将散列提供给类型定义。那是行不通的。最终将使用散列的字符串化版本,并且您以后通过散列索引检索组件的尝试将失败,可能会出现某种类型的错误。

你有几个选择:

  1. 您可以稍微重构您的定义和数据,并将聚合数据作为散列参数传递。(以下示例。)

  2. 您可以稍微重构您的定义和数据,并使用该create_resources()函数。

  3. 如果您已经升级到 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 模块获得。)

于 2015-05-11T18:02:03.720 回答