puppet循环来创build具有原始文件中的值的用户

我想用木偶来创build邮箱。 基本上,我只需要在新用户到达时创build一个目录。 但是,用户列表非常庞大,为每个用户创build一个文件节点是毫无疑问的。 我已经find了一个方法来传递一个数组与这个节:

file { [ "user1", "user2", ... ]: ensure => directory, owner => $user, group => 'mail', mode => 0660, } 

有两个问题:首先,没有办法从外部资源(例如可能是CSV文件)中检索用户列表。 其次,我看不出如何实现所有者价值。

我曾经想过定义函数,但同样的问题依然存在。 有人find解决scheme来解决这个问题吗?

所定义的types应该适用于owner的问题。

 define usermailbox { # creates dir /path/to/username: file { "/path/to/$title": ensure => directory, owner => $title, group => 'mail', mode => 0660, } } 

要从外部来源填充, Hiera是一个不错的select,它在3.0之后被集成到Puppet中,但是如果你仍然在2.7,你需要在你的主系统上单独安装。 如果你打算使用它,你也可以考虑把它作为一个更灵活的方法来做你的节点定义。

你把用户列表放在哪里取决于这是否只适用于一个系统,或多个..但现在,让我们说我们希望它具体到这个系统。

因此,在你的/etc/puppet/hiera.yaml如何查找数据的configuration)中,你会看到类似这样的内容:

 :backends: - yaml :hierarchy: - %{::clientcert} - common :yaml: :datadir: '/etc/puppet/hieradata' 

对于node.example.com ,它会查找文件/etc/puppet/hieradata/node.example.com.yaml (或common.yaml作为较低优先级,所以如果您希望此列表可用,则可以使用它)多个服务器的目录)。 创build该文件,我们将以YAML格式给它用户列表:

 mailbox_users: - user1 - user2 - user3 

然后,我们可以使用hiera调用来抓取该列表,将其作为variables拉入,并使用它为列表中的每个用户设置一次上面的define

 usermailbox { hiera(mailbox_users): }