GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Puppet:Holen Sie sich das Home-Verzeichnis des Benutzers

Lösung 1:

Hm, ich denke, dafür brauchst du ein Factor-Modul und eine kleine hackige Manifest-Datei ...

Faktormodul:Dies registriert Faktorvariablen für alle Benutzer. wie "home_root" oder "home_apache".

require 'etc'

Etc.passwd { |user|

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

}

und dann können Sie sie wie folgt in Ihrer Manifestdatei verwenden:

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

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

Vielleicht gibt es einen besseren Weg, aber ich fürchte nicht.

Lösung 2:

Ich habe versucht, eine Lösung für genau dasselbe Problem zu finden, und es stellte sich heraus, dass es am besten ist, einen etwas anderen Ansatz zu wählen.

Definieren Sie das Home-Verzeichnis explizit, zum Beispiel:

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

Wenn managehome falsch ist, wird das Home-Verzeichnis nicht einmal erstellt. Sie müssen es also konkret definieren. Es ist oft am besten, eine benutzerdefinierte Definition für den gesamten Benutzer zu erstellen:

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

Sie können weitere Parameter hinzufügen, zum Beispiel $keyvalue , und erstellen Sie eine Schlüsseldatei, wenn dieser Parameter angegeben ist.

Sie können auch eine globale Variable $home = "/home" definieren (Betriebssystemspezifisch, falls erforderlich) und mit "${home}/${username}" nach Hause gehen .

Bearbeiten:Hash verwenden, um benutzerspezifische Home-Verzeichnisse zu definieren

Neuere Puppet-Versionen (>=2.6) unterstützen Hashes. Es wäre möglich, einen Hash zu definieren, der username => /path/to/home enthält Zuordnungen für jeden Benutzer:

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

Für jeden Benutzernamen ist es dann einfach, mit $home['username'] das Home-Verzeichnis zu erhalten .

Home-Verzeichnis-Hash mit Fallback

Meistens wäre es am besten, einen "Fallback-Standard" zu haben, wenn der Benutzer nicht im Hash vorhanden ist. Theoretisch dies ist möglich, obwohl die Syntax etwas kryptisch und aufgebläht wird:

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

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

Linux
  1. Holen Sie sich die neueste Datei in einem Verzeichnis unter Linux

  2. Wie bekomme ich den Benutzernamen in ein Makefile?

  3. Wie bekomme ich ein ganzes Verzeichnis in sftp?

  4. Wie bekomme ich den GNU-Bildschirm dazu, nicht in meinem Home-Verzeichnis in OS X zu starten?

  5. Holen Sie sich das Home-Verzeichnis nach Benutzername

So ändern Sie das Jenkins-Basisverzeichnis

So erhalten Sie die Größe eines Verzeichnisses in Linux

Beginnen Sie mit Sweet Home 3D unter Linux

Erstellen Sie ein Home-Verzeichnis für einen bestehenden Benutzer in Linux

So erhalten Sie Informationen über andere Linux-Benutzer

So erstellen/fügen Sie Benutzer in Linux hinzu