Lösung 1:
Hm, ich denke, dafür brauchst du ein Factor-Modul und eine kleine hackige Manifest-Datei ...
Faktormodul:Dies registriert Faktorvariablen für alle Benutzer. wie "home_root" oder "home_apache".
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
und dann können Sie sie wie folgt in Ihrer Manifestdatei verwenden:
$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")
file { "$home_path/test.txt":
content => "huhu",
}
Vielleicht gibt es einen besseren Weg, aber ich fürchte nicht.
Lösung 2:
Ich habe versucht, eine Lösung für genau dasselbe Problem zu finden, und es stellte sich heraus, dass es am besten ist, einen etwas anderen Ansatz zu wählen.
Definieren Sie das Home-Verzeichnis explizit, zum Beispiel:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Wenn managehome
falsch ist, wird das Home-Verzeichnis nicht einmal erstellt. Sie müssen es also konkret definieren. Es ist oft am besten, eine benutzerdefinierte Definition für den gesamten Benutzer zu erstellen:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Sie können weitere Parameter hinzufügen, zum Beispiel $keyvalue
, und erstellen Sie eine Schlüsseldatei, wenn dieser Parameter angegeben ist.
Sie können auch eine globale Variable $home = "/home"
definieren (Betriebssystemspezifisch, falls erforderlich) und mit "${home}/${username}"
nach Hause gehen .
Bearbeiten:Hash verwenden, um benutzerspezifische Home-Verzeichnisse zu definieren
Neuere Puppet-Versionen (>=2.6) unterstützen Hashes. Es wäre möglich, einen Hash zu definieren, der username => /path/to/home
enthält Zuordnungen für jeden Benutzer:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Für jeden Benutzernamen ist es dann einfach, mit $home['username']
das Home-Verzeichnis zu erhalten .
Home-Verzeichnis-Hash mit Fallback
Meistens wäre es am besten, einen "Fallback-Standard" zu haben, wenn der Benutzer nicht im Hash vorhanden ist. Theoretisch dies ist möglich, obwohl die Syntax etwas kryptisch und aufgebläht wird:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}