Solusi 1:
Menggunakan sumber daya virtual Puppet adalah cara yang tepat untuk melakukannya - tetapi jika Anda tidak dapat mengubah definisi pengguna dan sementara itu memerlukan perbaikan solusi, berikut ini mengerikan dan hacky, tetapi akan berhasil:
exec { 'foo somegroup membership':
unless => '/bin/grep -q "somegroup\\S*foo" /etc/group',
command => '/sbin/usermod -aG somegroup foo',
require => User['foo'],
}
Pada dasarnya kami hanya memeriksa apakah somegroup berisi pengguna foo belum ... jika tidak, gunakan perintah usermod normal untuk menambahkannya di samping grup yang ada milik foo.
Solusi 2:
Jika Anda mendeklarasikan pengguna sebagai sumber daya virtual, Anda kemudian dapat menggunakan 'sadar' atau sintaks kumpulan ( Pengguna <| ... |>). Berikut contohnya:
@user { 'foo':
groups => ['somegroup'],
membership => minimum,
}
Kemudian sadari pengguna virtual itu dengan sintaks pengumpulan:
User <| title == foo |>
Dan di tempat lain Anda dapat menambahkan parameter untuk sumber daya virtual tersebut menggunakan plussignment:
User <| title == foo |> { groups +> "svn" }
Solusi 3:
Terima kasih - peretasan yang jelek pasti, tetapi itu menyelesaikan pekerjaan. Berikut adalah contoh jalur (menggabungkan komentar di atas) untuk menambahkan 'nrpe' ke grup 'nagios'. Saya menggunakan kebutuhan paket karena pengguna di sini disediakan RPM daripada oleh boneka.
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'],
}