Traté de encontrar una solución para el mismo problema, y resultó que es mejor adoptar un enfoque ligeramente diferente.
Defina el directorio de inicio explícitamente, por ejemplo:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Cuando managehome
es falso, el directorio de inicio ni siquiera se crea. Entonces tienes que definirlo específicamente. A menudo es mejor hacer una definición personalizada para todo el usuario:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Puede agregar más parámetros, por ejemplo $keyvalue
, y crear un archivo de claves si se proporciona ese parámetro.
También puede definir una variable global $home = "/home"
(específica del sistema operativo, si es necesario) y obtener el directorio de inicio con "${home}/${username}"
.
Editar: uso de hash para definir directorios de inicio específicos del usuario
Las versiones más recientes de Puppet (> = 2.6) admiten hashes. Sería posible definir un hash que contenga username => /path/to/home
asignaciones para cada usuario:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Para cualquier nombre de usuario, es fácil obtener el directorio de inicio $home['username']
.
Hash de directorio de inicio con respaldo
La mayoría de las veces, sería mejor tener un "valor predeterminado de reserva" si el usuario no existe en el hash. En teoría esto es posible, aunque la sintaxis se vuelve un poco críptica e hinchada:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}