使用原始文件中的值创建用户

使用原始文件中的值创建用户

我想使用 puppet 创建邮箱。基本上,我只需要在有新用户到达时创建一个目录。但是,用户列表非常庞大,为每个用户创建一个文件节是不可能的。我找到了一种使用这个节传递数组的方法:

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

这样做有两个问题:首先,无法从外部资源(例如 CSV 文件)检索用户列表。其次,我看不出如何实例化所有者值。

我曾想过定义函数,但同样的问题仍然存在。有人找到解决这个问题的方法吗?

答案1

定义的类型应该可以很好地解决这个问题owner

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

要从外部来源填充,希拉是一个不错的选择 - 它在 3.0 之后集成在 Puppet 中,但如果您仍在使用 2.7,则需要在主系统上单独安装它。如果您要使用它,您可能还会考虑将其转移到它,作为进行节点定义的更灵活方法。

放置用户列表的位置取决于这是否需要仅适用于一个系统,还是适用于多个系统。但是现在,假设我们希望它特定于此系统。

因此在您的/etc/puppet/hiera.yaml(Hiera 如何查找数据的配置)中,您将看到如下内容:

:backends:
  - yaml

:hierarchy:
  - %{::clientcert}
  - common

:yaml:
   :datadir: '/etc/puppet/hieradata'

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

mailbox_users:
  - user1
  - user2
  - user3

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

usermailbox { hiera(mailbox_users): }

相关内容