If I understand your problem correctly, no, there is no native
resource type in Puppet to manage a UNIX group, ie: this does not
exist:
group { "wheel":
members => "luke",
}
To manage group membership you need to know about every user you want
in every group. So if what you mean by "not having virtual users"
means you don't currently have any native User resources in Puppet
then you'd need to create them. They don't need to be virtual:
user { 'luke':
ensure => 'present',
groups => ['wheel', 'audio', 'mock'],
}
The other option is you use augeas to manage user entries, the example
below adds a user to a group:
augtool> print /files/etc/group/wheel
/files/etc/group/wheel
/files/etc/group/wheel/password = "x"
/files/etc/group/wheel/gid = "10"
/files/etc/group/wheel/user[1] = "root"
/files/etc/group/wheel/user[2] = "support"
/files/etc/group/wheel/user[3] = "biguml"
augtool> set /files/etc/group/wheel/user[last()+1] "woof"
augtool> print /files/etc/group/wheel
/files/etc/group/wheel
/files/etc/group/wheel/password = "x"
/files/etc/group/wheel/gid = "10"
/files/etc/group/wheel/user[1] = "root"
/files/etc/group/wheel/user[2] = "support"
/files/etc/group/wheel/user[3] = "biguml"
/files/etc/group/wheel/user[3] = "woof"
To do that in a Puppet resource you'd do this:
augeas { "woof_in_wheel_group":
changes => [ 'set /files/etc/group/wheel/user[last()+1] woof', ],
onlyif => "/bin/grep wheel /etc/group | /bin/grep woof",
}
You could easily turn that into a custom define to reuse it easily.
Hope that helps,
-Luke