我开始使用Puppetconfiguration系统,并且在设置我的用户帐户时遇到问题。
在我们的CentOS 5.3服务器上,sudoers组是“wheel”,gid 10.在我们的Ubuntu 9.10服务器上,这个组是“sudo”,gid 27.我如何设置组帐户,这样两个组合才能得到正确的组,用户被添加到正确的组?
我试过把这个configuration分成os_vars.pp,virt_groups.pp和virt_users.pp。
os_vars.pp:
class os_vars { case $operatingsystem { centos: { $os_admin_group = "wheel" $os_admin_group_gid = "10" } ubuntu: { $os_admin_group = "sudo" $os_admin_group_gid = "27" } } notice("in os_vars, admin group is: ${os_admin_group}, ${os_admin_group_gid}") }
virt_groups.pp:
class virt_groups { include os_vars notice("in virt_groups, admin group is: ${os_admin_group}, ${os_admin_group_gid}") @group { $os_admin_group: gid => $os_admin_group_gid, ensure => present, } }
virt_users.pp:
class virt_users { include os_vars notice("in virt_users, admin group is: ${os_admin_group}, ${os_admin_group_gid}") @user { 'my_user': home => '/home/my_user', uid => '500', groups => [$os_admin_group], password => $1BigLongEncrypedStuff gid => '500', ensure => 'present', shell => '/bin/bash' } }
在os_vars.pp中,variables设置正确,但在virt_users.pp和virt_groups.pp中为空。
variables需要被定义和引用。 virt_groups.pp的正确语法是:
class virt_groups { include os_vars notice("in virt_groups, admin group is: ${os_vars::os_admin_group}, ${os_vars::os_admin_group_gid}") @group { "${os_vars::os_admin_group}: gid => "${os_vars::os_admin_group_gid}", ensure => present, } }
这解决了我眼前的问题,但似乎像一个笨重的方式来处理可能是一个普遍的傀儡问题。
正如在以前的答案,variables必须是范围。 不要打扰组ID:s或虚拟sudo / wheel组。 如果pipe理员组已经存在于系统中,则不必定义它。
使用 ? select器而不是case使代码稍微冗长:
class os_vars { $admin_group = $::operatingsystem ? { 'centos' => 'wheel', default => 'sudo', } notice("in os_vars, admin group is: ${admin_group}") } class virt_users { include os_vars notice("in virt_groups, admin group is: ${os_vars::admin_group}") @user { 'my_user': .... groups => [$os_vars::admin_group], } }
如果该组不存在,并且必须使用Puppet创build,则最好将GID留出以避免冲突。 system参数从系统区给出一个ID:
include os_vars group {$os_vars::admin_group: ensure => present, system => true, }