GNU/Linux >> Belajar Linux >  >> Linux

Wayang:Dapatkan direktori home pengguna

Solusi 1:

Hm, saya pikir di sana Anda memerlukan modul facter untuk melakukan itu dan file manifes peretasan kecil...

modul facter:Ini akan mendaftarkan variabel facter untuk semua pengguna. seperti "home_root" atau "home_apache".

require 'etc'

Etc.passwd { |user|

   Facter.add("home_#{user.name}") do
      setcode do
         user.dir
      end
   end

}

dan kemudian Anda dapat menggunakannya di dalam file manifes Anda seperti ini:

$username = "root"
$home = "home_$username"
$home_path = inline_template("<%= scope.lookupvar('::$home') %>")

file { "$home_path/test.txt":
   content => "huhu",
}

Mungkin ada cara yang lebih baik, tapi sayangnya tidak.

Solusi 2:

Saya mencoba menemukan solusi untuk masalah yang persis sama, dan ternyata sebaiknya mengambil pendekatan yang sedikit berbeda.

Tentukan direktori home secara eksplisit, misalnya:

user { $username:
    comment    => "comment",
    home       => "/home/${username}",
    managehome => false,
    # ...
}

Ketika managehome salah, direktori home bahkan tidak dibuat. Jadi, Anda harus mendefinisikannya secara spesifik. Seringkali yang terbaik adalah membuat definisi khusus untuk seluruh pengguna:

define custom_user($username, $password) {
    user { $username:
        home     => "/home/${username}",
        password => $password,
        # etc.
    }
    file { "/home/${username}":
        ensure  => directory,
        owner   => $username,
        require => User[$username],
        # etc.
    }
}

Anda dapat menambahkan lebih banyak parameter, misalnya $keyvalue , dan buat keyfile jika parameter itu diberikan.

Anda juga dapat mendefinisikan variabel global $home = "/home" (khusus OS, jika perlu) dan dapatkan home dir dengan "${home}/${username}" .

Edit:Menggunakan hash untuk menentukan direktori home khusus pengguna

Versi Wayang yang lebih baru (>=2.6) mendukung hash. Dimungkinkan untuk mendefinisikan hash yang berisi username => /path/to/home pemetaan untuk setiap pengguna:

$home = {
    normal_user => '/home/normal_user',
    backup      => '/var/backup',
    mysql       => '/var/lib/mysql'
}

Untuk nama pengguna apa pun, mudah untuk mendapatkan direktori home dengan $home['username'] .

Hash direktori rumah dengan fallback

Sebagian besar waktu, akan lebih baik untuk memiliki "default fallback" jika pengguna tidak ada di hash. Dalam teori ini mungkin, meskipun sintaks menjadi sedikit samar dan membengkak:

$home = { ... }
$default_home = '/home'

user {$username:
    home => has_key($home, $username) ? {
                true => $home[$username], 
                false => "${default_home}/${username}" 
            }
    # ...
}

Linux
  1. Ssh Dan Izin Direktori Rumah?

  2. Apakah Mungkin Untuk Mendefinisikan Ulang Tilde ('~', Direktori Rumah)?

  3. Dapatkan file terbaru di direktori di Linux

  1. Bagaimana cara mendapatkan nama pengguna di Makefile?

  2. Bagaimana cara agar layar GNU tidak memulai di direktori home saya di OS X?

  3. Apa gunanya mengenkripsi direktori home?

  1. Bagaimana cara mendapatkan seluruh direktori di sftp?

  2. Dapatkan direktori home dengan nama pengguna

  3. Buat pengguna vsftpd baru dan kunci ke (tentukan) direktori home / login