Řešení 1:
Použití virtuálních prostředků Puppet je ten správný způsob, jak to udělat – ale pokud nemůžete změnit uživatelské definice a mezitím potřebujete opravu náhradního řešení, následující je hrozné a otřesné, ale bude fungovat:
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
V podstatě jen zkontrolujeme, zda nějaká skupina ještě obsahuje uživatele foo... pokud ne, použijte normální příkazy usermod a přidejte jej navíc ke stávajícím skupinám, do kterých foo patří.
Řešení 2:
Pokud deklarujete uživatele jako virtuální prostředky , můžete pak použít 'realize' nebo syntaxi kolekce ( User <| ... |>). Zde je příklad:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Pak si uvědomte, že virtuální uživatel se syntaxí kolekce potom:
User <| title == foo |>
A jinde můžete přidat parametry pro tento virtuální zdroj pomocí plusignment:
User <| title == foo |> { groups +> "svn" }
Řešení 3:
Díky - ošklivý hack určitě, ale dá to zabrat. Zde je ukázkový příklad (kombinující výše uvedené komentáře) pro přidání „nrpe“ do skupiny „nagios“. Použil jsem balíček vyžadovat, protože uživatel zde poskytuje RPM spíše než loutka.
exec {"nrpe nagios membership":
unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe",
command => "/usr/sbin/usermod -a -G nagios nrpe",
require => Package['nrpe'],
}