Soluzione 1:
Hm, penso che ti servirà un facter modul per farlo e un piccolo file manifest hacky...
modulo facter:questo registrerà le variabili facter per tutti gli utenti. come "home_root" o "home_apache".
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
e poi puoi usarli all'interno del tuo file manifest in questo modo:
$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")
file { "$home_path/test.txt":
content => "huhu",
}
Forse c'è un modo migliore, ma temo di no.
Soluzione 2:
Ho provato a trovare una soluzione per lo stesso identico problema e si è scoperto che è meglio adottare un approccio leggermente diverso.
Definisci la home directory in modo esplicito, ad esempio:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Quando managehome
è falso, la home directory non viene nemmeno creata. Quindi devi definirlo in modo specifico. Spesso è meglio creare una definizione personalizzata per l'intero utente:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Puoi aggiungere altri parametri, ad esempio $keyvalue
, e crea un file di chiavi se viene dato quel parametro.
Puoi anche definire una variabile globale $home = "/home"
(specifico del sistema operativo, se necessario) e ottieni home directory con "${home}/${username}"
.
Modifica:utilizzo dell'hash per definire le home directory specifiche dell'utente
Le versioni più recenti di Puppet (>=2.6) supportano gli hash. Sarebbe possibile definire un hash contenente username => /path/to/home
mappature per ciascun utente:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Per qualsiasi nome utente, è quindi facile ottenere la directory home con $home['username']
.
Hash della home directory con fallback
La maggior parte delle volte, sarebbe meglio avere un "fallback default" se l'utente non esiste nell'hash. In teoria questo è possibile, anche se la sintassi diventa un po' criptica e gonfia:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}