GNU/Linux >> Tutoriales Linux >  >> Linux

Marioneta:obtener el directorio de inicio de los usuarios

Solución 1:

Hm, creo que necesitarás un módulo facter para hacer eso y un pequeño archivo de manifiesto hacky...

módulo facter:Esto registrará variables facter para todos los usuarios. como "home_root" o "home_apache".

require 'etc'

Etc.passwd { |user|

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

}

y luego puede usarlos dentro de su archivo de manifiesto de esta manera:

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

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

Tal vez haya una mejor manera, pero me temo que no.

Solución 2:

Traté de encontrar una solución para exactamente el mismo problema y resultó que es mejor adoptar un enfoque ligeramente diferente.

Defina el directorio de inicio explícitamente, por ejemplo:

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

Cuando managehome es falso, el directorio de inicio ni siquiera se crea. Así que tienes que definirlo específicamente. Suele ser mejor crear una definición personalizada para todo el usuario:

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

Puede agregar más parámetros, por ejemplo $keyvalue y cree un archivo de claves si se proporciona ese parámetro.

También puede definir una variable global $home = "/home" (Específico del sistema operativo, si es necesario) y obtenga el directorio de inicio con "${home}/${username}" .

Editar:uso de hash para definir directorios de inicio específicos del usuario

Las versiones más recientes de Puppet (>=2.6) admiten hashes. Sería posible definir un hash que contenga username => /path/to/home asignaciones para cada usuario:

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

Para cualquier nombre de usuario, es fácil obtener el directorio de inicio con $home['username'] .

Hash del directorio de inicio con respaldo

La mayoría de las veces, sería mejor tener un "valor predeterminado alternativo" si el usuario no existe en el hash. En teoría esto es posible, aunque la sintaxis se vuelve un poco críptica e inflada:

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

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

Linux
  1. ¿Ssh y permisos de directorio de inicio?

  2. ¿Es posible redefinir la tilde ('~', directorio de inicio)?

  3. Cómo obtener el tamaño del directorio en Linux

  4. Obtenga el archivo más reciente en un directorio en Linux

  5. ¿Cómo obtengo un directorio completo en sftp?

Cómo cambiar el directorio de inicio de Jenkins

Cómo obtener el tamaño de un directorio en Linux

Comience con Sweet Home 3D en Linux

Crear directorio de inicio para usuarios existentes en Linux

Cómo obtener información sobre otros usuarios de Linux

Cómo crear/agregar usuarios en Linux