USAGE:

local_user{"ohad": uid => 1234, gid => 1234,
comment => "Ohad Levy", sudo => true,
}



define local_user ($comment, $ensure = 'present',
$uid, $gid, $homedir = '', $groups = '', $group = '',
$shell = "/bin/bash", $sudo=false )
{
case $homedir {
'': {
$home="/home/${name}"
}
default: { $home=$homedir }
}

user { $name:
allowdupe => false,
comment => $comment,
ensure => $ensure,
gid => $gid,
home => $home,
shell => $shell,
uid => $uid,
groups => $groups ? {
'' => undef,
default => $groups
}
}
case $group {
'': {
group { $name:
allowdupe => false,
ensure => $ensure,
gid => $gid,
}
$real_group = $name
}
default: {
$real_group = $group
}
}

file {
"$home":
ensure => directory,
# keep 0751 to enable public_html acces and similar things
mode => 0701, owner => $name, group => $real_group;
"$home/.toprc":
source => ["$fileserver/users/.toprc.$name",
"$fileserver/users/.toprc"],
mode => 0640, owner => $name, group => $real_group;
"$home/.bashrc":
source => ["$fileserver/users/.bashrc.$name",
"$fileserver/users/.bashrc"],
mode => 0640, owner => $name, group => $real_group;
"$home/.bash_profile":
ensure => link, target => "$home/.bashrc";
"$home/.ssh":
ensure => directory,
mode => 0700, owner => $name, group => $real_group;
"$home/.ssh/authorized_keys":
source => ["$fileserver/users/.ssh/authorized_keys.$name",
"$fileserver/users/.ssh/authorized_keys"],
mode => 0600, owner => $name, group => $real_group;
"$home/.ssh/config":
source => ["$fileserver/users/.ssh/config.$name",
"$fileserver/users/.ssh/config"],
mode => 0600, owner => $name, group => $real_group;
"$home/.vimrc":
source => ["$fileserver/users/.vimrc.$name",
"$fileserver/users/.vimrc"],
mode => 0600, owner => $name, group => $real_group;

}
if $sudo { sudo::nopasswd{$name: name => $name} }
}