GNU/Linux >> Linux Esercitazione >  >> Linux

Puppet:ottieni la home directory degli utenti

Soluzione 1:

Hm, penso che ti servirà un facter modul per farlo e un piccolo file manifest hacky...

modulo facter:questo registrerà le variabili facter per tutti gli utenti. come "home_root" o "home_apache".

require 'etc'

Etc.passwd { |user|

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

}

e poi puoi usarli all'interno del tuo file manifest in questo modo:

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

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

Forse c'è un modo migliore, ma temo di no.

Soluzione 2:

Ho provato a trovare una soluzione per lo stesso identico problema e si è scoperto che è meglio adottare un approccio leggermente diverso.

Definisci la home directory in modo esplicito, ad esempio:

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

Quando managehome è falso, la home directory non viene nemmeno creata. Quindi devi definirlo in modo specifico. Spesso è meglio creare una definizione personalizzata per l'intero utente:

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

Puoi aggiungere altri parametri, ad esempio $keyvalue , e crea un file di chiavi se viene dato quel parametro.

Puoi anche definire una variabile globale $home = "/home" (specifico del sistema operativo, se necessario) e ottieni home directory con "${home}/${username}" .

Modifica:utilizzo dell'hash per definire le home directory specifiche dell'utente

Le versioni più recenti di Puppet (>=2.6) supportano gli hash. Sarebbe possibile definire un hash contenente username => /path/to/home mappature per ciascun utente:

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

Per qualsiasi nome utente, è quindi facile ottenere la directory home con $home['username'] .

Hash della home directory con fallback

La maggior parte delle volte, sarebbe meglio avere un "fallback default" se l'utente non esiste nell'hash. In teoria questo è possibile, anche se la sintassi diventa un po' criptica e gonfia:

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

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

Linux
  1. Autorizzazioni Ssh e Home Directory?

  2. Come ottenere la dimensione della directory in Linux

  3. Come ottengo il nome utente in un Makefile?

  4. Qual è lo scopo di crittografare la home directory?

  5. Ottieni la dimensione di tutte le cartelle nella directory

Come modificare la directory principale di Jenkins

Come ottenere la dimensione di una directory in Linux

Inizia con Sweet Home 3D su Linux

Crea directory home per utenti esistenti in Linux

Come ottenere informazioni su altri utenti Linux

Come creare/aggiungere utenti in Linux