私はまったく同じ問題の解決策を見つけようとしましたが、わずかに異なるアプローチを取ることが最善であることがわかりました。
たとえば、ホームディレクトリを明示的に定義します。
user { $username:
    comment    => "comment",
    home       => "/home/${username}",
    managehome => false,
    # ...
}
場合はmanagehomefalseで、ホームディレクトリであっても作成されません。したがって、明確に定義する必要があります。多くの場合、ユーザー全体に対してカスタム定義を作成することが最善です。
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}" 
            }
    # ...
}