Сторонние утилиты:
*Любое подобие коммерчески именованному программному обеспечению является чисто случайным.. НЕТ!
Переменные должны быть ограничены по объему и заключены в кавычки. Правильный синтаксис для 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
. Если группа администраторов уже присутствует в системе, вам не нужно ее определять.
Использование? selector вместо 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, чтобы избежать коллизий. системный параметр
дает группе идентификатор из системной области:
include os_vars
group {$os_vars::admin_group:
ensure => present,
system => true,
}