# This module creates users using virtual resources via a called define,
# useraccount. It also has some special handling of web team users because they
# may be in a different primary group on database servers, for example.
#
# To use this module on a node, include the following, as appropriate.
# include users::people # on all servers.
# include users::noc # on all servers.
# include groups::web # only on web servers.
# include users::web # only on web servers.
# include users::web::extra # only on web servers.
# include users::database # only on database servers.
# We have some other classes to grab too.
import "people"
import "web"
# define useraccount
# creates a user with their complete home directory, including ssh key(s),
# shell profile(s) and anything else.
# This define should be called to create a virtual resource so it can
# be used to create all users, and then the users required on the particular
# node are specified through the various user classes.
# Example:
# @useraccount { "username":
# ensure => "present",
# uid => 500,
# pgroup => users,
# groups => ["staff", "other"],
# fullname => "New User",
# homefs => "$homefs",
# shell => "$shell",
# }
define useraccount ( $ensure = present, $uid, $pgroup = users,
$groups, $fullname, $homefs, $shell) {
$username = $name
# This case statement will allow disabling an account by passing
# ensure => absent, to set the home directory ownership to root.
case $ensure {
present: {
$home_owner = $username
$home_group = $pgroup
}
default: {
$home_owner = "root"
$home_group = "root"
}
}
# Create the user with their groups as specified
user { $username:
ensure => $ensure,
uid => $uid,
gid => $pgroup,
groups => $groups,
comment => $fullname,
home => "${homefs}/$username",
shell => $shell,
allowdupe => false,
}
file { "${homefs}/${username}":
ensure => directory,
owner => $home_owner,
group => $home_group,
mode => 750,
require => User["${username}"],
}
file { "${homefs}/${username}/.ssh":
ensure => directory,
owner => $home_owner,
group => $home_group,
mode => 700,
require => File["${homefs}/${username}"],
}
file { "${homefs}/${username}/.ssh/authorized_keys":
ensure => present,
owner => $home_owner,
group => $home_group,
mode => 600,
require => File["${homefs}/${username}/.ssh"],
source => "puppet:///users/${username}/.ssh/authorized_keys",
}
file { "${homefs}/${username}/.ssh/authorized_keys2":
ensure => "${homefs}/${username}/.ssh/authorized_keys",
require => File["${homefs}/${username}/.ssh/authorized_keys"],
}
file { "${homefs}/${username}/.bashrc":
ensure => present,
owner => $home_owner,
group => $home_group,
mode => 640,
require => File["${homefs}/${username}"],
source => "puppet:///users/${username}/.bashrc",
}
file { "${homefs}/${username}/.bash_profile":
ensure => "${homefs}/${username}/.bashrc",
require => File["${homefs}/${username}/.bashrc"],
}
}
# class groups::web
# This class virtual creates the required groups for the web team.
class groups::web {
@group { "htdocs": ensure => present, gid => "1502", }
@group { "wwwcron": ensure => present, gid => "1501", }
@group { "secure": ensure => present, gid => "2038", }
}
# Create another class to realize other groups.
#class groups::newgrouptype {
# @group { "newgroup": ensure => present, gid => "530", }
#}
# class users::noc
# Make the virtual users with wheel as the primary group real.
# This should be the NOC/Sysadmin team.
class users::noc {
Useraccount <| pgroup == wheel |>
}
# class users::web
# Make the virtual users with htdocs as the primary group real.
# This should be the webmaster team.
class users::web {
Group <| title == htdocs |>
Group <| title == wwwcron |>
Group <| title == secure |>
Useraccount <| pgroup == htdocs |>
Useraccount <| title == webalizer |>
User <| title == cronman |>
User <| title == secure |>
}
#class users::web::newwebgroup {
# Group <| title == htdocs |>
#}
# Make the virtual users for the newgroup systems real.
#class users::newgroup {
# Group <| title == newgroup |>
# Useraccount <| pgroup == newgroup |>
#}
# vim modeline - have 'set modeline' and 'syntax on' in your ~/.vimrc.
# vi:syntax=puppet:filetype=puppet:ts=4:et:
# EOF