人偶 class 语法说明

puppet class syntax clarification

目前正在尝试理解另一个人编写的 puppet 清单,并在 class 中遇到以下构造:

postgres_helper::tablespace_grant { $tablespace_grants:
    privilege => 'all',
    require => [Postgresql::Server::Role[$rolename]]
  }

在这种情况下,$tablespace_grants: 是什么意思?首先我建议这是某种标题,但是当我使用通知接收它的值时,它是散列:

Tablespace_grants value is [{name => TS_INDEX_01, role => developer}, {name => TS_DATA01_01, role => developer}]

what does $tablespace_grants: means in this case? First i suggested that is some kind of a title,

它是一个变量引用,是的,用作 postgres_helper::tablespace_grant 资源声明的标题。

however when i used notice to receive the value of it, it is hash:

Tablespace_grants value is [{name => TS_INDEX_01, role => developer}, {name => TS_DATA01_01, role => developer}]

实际上,它似乎是一个 数组 哈希。数组可以用作资源声明的标题,以紧凑地声明多个资源,每个资源对应一个数组元素。然而,在 Puppet 4 中,the elements are required to be strings。早期版本的 Puppet 会将哈希字符串化为资源标题;我不确定 Puppet 4 是否仍然依赖于此。

无论如何,在任何版本的 Puppet 中,总体声明不太可能符合其原始作者的意图。看起来意图是声明多个资源,每个资源都具有由其中一个哈希值指定的属性,但给定的代码无法实现这一点,并且不清楚所需的代码到底是什么。