Řešení 1:
Hm, myslím, že k tomu budete potřebovat modul facter a malý hacknutý soubor manifestu...
modul factor:Toto zaregistruje proměnné faktoru pro všechny uživatele. jako "home_root" nebo "home_apache".
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
a pak je můžete použít v souboru manifestu takto:
$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")
file { "$home_path/test.txt":
content => "huhu",
}
Možná existuje lepší způsob, ale obávám se, že ne.
Řešení 2:
Snažil jsem se najít řešení pro úplně stejný problém a ukázalo se, že je nejlepší zvolit trochu jiný přístup.
Definujte domovský adresář explicitně, například:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
Když managehome
je false, domovský adresář se ani nevytvoří. Musíte to tedy konkrétně definovat. Často je nejlepší vytvořit vlastní definici pro celého uživatele:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
Můžete přidat více parametrů, například $keyvalue
a pokud je tento parametr zadán, vytvořte soubor klíče.
Můžete také definovat globální proměnnou $home = "/home"
(v případě potřeby specifické pro operační systém) a získejte domovský adresář s "${home}/${username}"
.
Upravit:Použití hash k definování domovských adresářů specifických pro uživatele
Novější verze Puppet (>=2.6) podporují hash. Bylo by možné definovat hash obsahující username => /path/to/home
mapování pro každého uživatele:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
Pro jakékoli uživatelské jméno je pak snadné získat domovský adresář pomocí $home['username']
.
Haš domovského adresáře se záložním řešením
Většinu času by bylo nejlepší mít „výchozí výchozí nastavení“, pokud uživatel v hash neexistuje. Teoreticky to je možné, i když syntaxe se stává trochu záhadnou a nafouklou:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}