解決策 1:
うーん、それを行うにはファクト モジュールとちょっとハックなマニフェスト ファイルが必要になると思います...
factor モジュール:これにより、すべてのユーザーの factor 変数が登録されます。 「home_root」や「home_apache」など。
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
次に、マニフェスト ファイル内で次のように使用できます。
$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")
file { "$home_path/test.txt":
content => "huhu",
}
もっと良い方法があるかもしれませんが、残念ながらありません。
解決策 2:
まったく同じ問題の解決策を見つけようとしましたが、少し異なるアプローチを取るのが最善であることがわかりました.
ホーム ディレクトリを明示的に定義します。例:
user { $username:
comment => "comment",
home => "/home/${username}",
managehome => false,
# ...
}
managehome
のとき false の場合、ホーム ディレクトリは作成されません。したがって、具体的に定義する必要があります。多くの場合、ユーザー全体のカスタム定義を作成するのが最善です:
define custom_user($username, $password) {
user { $username:
home => "/home/${username}",
password => $password,
# etc.
}
file { "/home/${username}":
ensure => directory,
owner => $username,
require => User[$username],
# etc.
}
}
$keyvalue
のように、さらにパラメーターを追加できます。 、そのパラメーターが指定されている場合はキーファイルを作成します。
グローバル変数 $home = "/home"
を定義することもできます (必要に応じて OS 固有)、"${home}/${username}"
でホーム ディレクトリを取得します。 .
編集:ハッシュを使用してユーザー固有のホーム ディレクトリを定義する
最近の Puppet バージョン (>=2.6) はハッシュをサポートしています。 username => /path/to/home
を含むハッシュを定義することは可能です。 各ユーザーのマッピング:
$home = {
normal_user => '/home/normal_user',
backup => '/var/backup',
mysql => '/var/lib/mysql'
}
どのユーザー名でも、$home['username']
で簡単にホーム ディレクトリを取得できます。 .
フォールバックのあるホーム ディレクトリ ハッシュ
ほとんどの場合、ユーザーがハッシュに存在しない場合は、「フォールバックのデフォルト」を用意するのが最善です。 理論上 これは可能ですが、構文は少し不可解で肥大化します:
$home = { ... }
$default_home = '/home'
user {$username:
home => has_key($home, $username) ? {
true => $home[$username],
false => "${default_home}/${username}"
}
# ...
}