上周,我竭尽全力学习 Puppet。现在我饱受缓冲区溢出之苦,对能否驯服这个野兽毫无信心。我遇到过许多带注释的示例,但由于它们有无数种变化,我无法区分推荐的(最近)Puppet 风格和惯例,以及临时的“适合我”的方法。我无法忍受它,因为它似乎涉及基础层面的东西。
所以。使用 Puppet 来管理组和用户,用户的主要组等于他们自己的用户名,其他组可以是lan
局域网登录、wheel
管理员、shell
在任意节点上具有 shell 的用户、mail
用户、daemons
各种守护进程。管理员登录将在所有节点上,更糟糕的是,局域网登录也可能是 shell 登录。
据我所知,如果您使用在某个时间点实现的虚拟定义,则可以多次定义用户。听起来很棒,那么对于一个用户的多个组,这该如何工作呢?假设 Bob 可以同时使用 LAN 节点和节点 beastie.wan;那么他的登录名是否thebob
在 lanusers.pp 中用groups => ["lan"]
和在 shellusers.pp 中用定义两次groups => ["shell"]
?如果 Bob 希望他的 lan 密码与他的 shell 密码分开,该怎么办?
我目前使用的代码没有虚拟定义,用户只是硬编码的单个包含。有一次我遇到了一个使用虚拟函数的示例这就是我遇到困难的地方,因为我不明白如何扩展代码,以便 Puppet 创建一个主要组和我首先定义的所需组,然后将用户加入这些组。
好的。请给我一些提示。
答案1
现在我遭受着精神缓冲区溢出的困扰,并且没有信心能够驯服这个野兽。
首先:放松。我了解到,当你刚接触像 Puppet 这样有学习曲线的东西时,很容易不知所措,无法完成很多事情。
他的登录名 thebob 是否定义了两次,一次在 lanusers.pp 中定义为 groups => ["lan"],另一次在 shellusers.pp 中定义为 groups => ["shell"]?
不。实际上可以用 来在一个地方 (也许users.pp
)定义它groups => ['shell', 'lan',]
。
在节点上,实现您需要的用户。例如,如果node beamin
我们想要所有shell
用户:
node beamin {
Account <| groups == 'shell' |>
}
如果 Bob 希望他的 LAN 密码与他的 Shell 密码分开,该怎么办?
那么 Bob 可能应该获得 2 个具有不同登录名的不同帐户。
答案2
Puppet 在复杂的用户/组管理方面表现不佳。部署 LDAP 之类的东西会更好——尽管我不喜欢它,但它比试图打败 Puppet 要好得多。