Solution 1 :
Hm, je pense que là, vous aurez besoin d'un module facter pour faire cela et d'un petit fichier manifeste hacky...
module facter :cela enregistrera les variables facter pour tous les utilisateurs. comme "home_root" ou "home_apache".
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
et ensuite vous pouvez les utiliser dans votre fichier manifeste comme ceci :
$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")
file { "$home_path/test.txt":
content => "huhu",
}
Peut-être existe-t-il un meilleur moyen, mais je crains que non.
Solution 2 :
J'ai essayé de trouver une solution pour exactement le même problème, et il s'est avéré qu'il valait mieux adopter une approche légèrement différente.
Définissez explicitement le répertoire personnel, par exemple :
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Quand managehome
est faux, le répertoire personnel n'est même pas créé. Il faut donc le définir précisément. Il est souvent préférable de créer une définition personnalisée pour l'ensemble de l'utilisateur :
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Vous pouvez ajouter plus de paramètres, par exemple $keyvalue
, et créez un fichier clé si ce paramètre est donné.
Vous pouvez également définir une variable globale $home = "/home"
(spécifique au système d'exploitation, si nécessaire) et récupérez le répertoire d'accueil avec "${home}/${username}"
.
Modifier :Utiliser le hachage pour définir des répertoires personnels spécifiques à l'utilisateur
Les versions plus récentes de Puppet (>=2.6) prennent en charge les hachages. Il serait possible de définir un hash contenant username => /path/to/home
mappages pour chaque utilisateur :
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Pour n'importe quel nom d'utilisateur, il est alors facile d'obtenir le répertoire personnel avec $home['username']
.
Hachage du répertoire personnel avec secours
La plupart du temps, il serait préférable d'avoir une "défaut de secours" si l'utilisateur n'existe pas dans le hachage. En théorie c'est possible, bien que la syntaxe devienne un peu cryptique et gonflée :
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}