Я начинаю настраивать системы с помощью Puppet, и у меня возникают проблемы с настройкой моей учетной записи.
На нашем сервере CentOS 5.3 группа sudoers - «wheel», gid 10. На нашем сервере Ubuntu 9.10 группа - «sudo», gid 27. Как мне настроить учетную запись группы, чтобы оба поля получали нужную группу, а мои пользователь добавлен в нужную группу?
Я пробовал разделить эту конфигурацию на 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 переменные заданы правильно, но в virt_users.pp и virt_groups.pp они пусты.
Переменные необходимо указать и указать в кавычках. Правильный синтаксис 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,
}
}
Это решает мою непосредственную проблему, но все еще кажется неуклюжим способом решения, вероятно, общей проблемы марионеток.
Как и в предыдущем ответе, переменные должны быть ограничены. Не беспокойтесь о идентификаторе группы: s или виртуальном sudo
/wheel
группы. Если группа администраторов уже присутствует в системе, вам не нужно ее определять.
Используя ? селектор вместо 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, лучше не использовать GID, чтобы избежать конфликтов. system
Параметр присваивает группе идентификатор из системной области:
include os_vars
group {$os_vars::admin_group:
ensure => present,
system => true,
}