GNU/Linux >> Linux の 問題 >  >> Linux

Puppet:ユーザーのホーム ディレクトリを取得する

解決策 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}" 
            }
    # ...
}

Linux
  1. Linuxでディレクトリサイズを取得する方法

  2. Linux のディレクトリにある最新のファイルを取得する

  3. Makefile でユーザー名を取得するにはどうすればよいですか?

  1. OS X のホーム ディレクトリで GNU screen が起動しないようにするにはどうすればよいですか?

  2. ホームディレクトリを暗号化するポイントは何ですか?

  3. ディレクトリ内のすべてのフォルダーのサイズを取得する

  1. sftp でディレクトリ全体を取得するにはどうすればよいですか?

  2. Active Directory 認証済みユーザーのホーム ディレクトリとシェル

  3. ユーザーの作成後にホームディレクトリを作成する