GNU/Linux >> Tutoriels Linux >  >> Linux

Marionnette :obtenir le répertoire d'accueil des utilisateurs

Solution 1 :

Hm, je pense que là, vous aurez besoin d'un module facter pour faire cela et d'un petit fichier manifeste hacky...

module facter :cela enregistrera les variables facter pour tous les utilisateurs. comme "home_root" ou "home_apache".

require 'etc'

Etc.passwd { |user|

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

}

et ensuite vous pouvez les utiliser dans votre fichier manifeste comme ceci :

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

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

Peut-être existe-t-il un meilleur moyen, mais je crains que non.

Solution 2 :

J'ai essayé de trouver une solution pour exactement le même problème, et il s'est avéré qu'il valait mieux adopter une approche légèrement différente.

Définissez explicitement le répertoire personnel, par exemple :

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

Quand managehome est faux, le répertoire personnel n'est même pas créé. Il faut donc le définir précisément. Il est souvent préférable de créer une définition personnalisée pour l'ensemble de l'utilisateur :

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

Vous pouvez ajouter plus de paramètres, par exemple $keyvalue , et créez un fichier clé si ce paramètre est donné.

Vous pouvez également définir une variable globale $home = "/home" (spécifique au système d'exploitation, si nécessaire) et récupérez le répertoire d'accueil avec "${home}/${username}" .

Modifier :Utiliser le hachage pour définir des répertoires personnels spécifiques à l'utilisateur

Les versions plus récentes de Puppet (>=2.6) prennent en charge les hachages. Il serait possible de définir un hash contenant username => /path/to/home mappages pour chaque utilisateur :

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

Pour n'importe quel nom d'utilisateur, il est alors facile d'obtenir le répertoire personnel avec $home['username'] .

Hachage du répertoire personnel avec secours

La plupart du temps, il serait préférable d'avoir une "défaut de secours" si l'utilisateur n'existe pas dans le hachage. En théorie c'est possible, bien que la syntaxe devienne un peu cryptique et gonflée :

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

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

Linux
  1. Est-il possible de redéfinir le tilde ('~', répertoire personnel) ?

  2. Comment obtenir la taille du répertoire sous Linux

  3. Obtenir le fichier le plus récent dans un répertoire sous Linux

  4. Comment faire en sorte que l'écran GNU ne démarre pas dans mon répertoire personnel sous OS X ?

  5. Obtenir le répertoire personnel par nom d'utilisateur

Comment changer le répertoire personnel de Jenkins

Comment obtenir la taille d'un répertoire sous Linux

Démarrer avec Sweet Home 3D sous Linux

Créer un répertoire personnel pour un utilisateur existant sous Linux

Comment obtenir des informations sur d'autres utilisateurs de Linux

Comment créer/ajouter des utilisateurs sous Linux