Puppet: administrar inicio en el tipo de usuario solo funciona cuando el usuario no existe

Puppet: administrar inicio en el tipo de usuario solo funciona cuando el usuario no existe

Estoy buscando una aclaración aquí. parece elgestionarcasaatributo de lausuarioEl tipo definido solo funciona cuando el usuario no existe. Echa un vistazo a este DSL

user { 'artifactory':
        ensure     => 'present',
        home       => '/home/artifactory',
        managehome => true,
}

file { '/home/artifactory/data':
        ensure  => link,
        target  => '/var/lib',
        require => User['artifactory'],
}

La primera vez que ejecuto esto funciona bien, sin embargo, si elimino elartefactoriodirectorio de inicio del usuario, luego ejecútelo nuevamente, puppet barfs.

Error: No se pudo configurar el 'enlace' para garantizar: No existe tal archivo o directorio

Mi primer pensamiento esen realidad? Échale un vistazo aldocumentación

Ya sea para administrar el directorio de inicio al administrar el usuario. Esto creará el directorio de inicio cuando asegúrese => presente

Si elimino el usuario y lo intento nuevamente, funciona. Entonces, ¿esto es por diseño o es un error? Me parece delicado.

Respuesta1

Desde una perspectiva de tiempo de ejecución, Puppet verifica el estado del usuario en el sistema y lo compara con el manifiesto. Si el usuario no existe en el sistema, entonces Puppet ejecuta el useraddcomando apropiado para crearlo. Si se supone que el usuario no existe, y existe, entonces ejecuta el userdelcomando apropiado. Si algún atributo del usuario, como membresía de grupo, uid, nombre, etc., ha cambiado, entonces emite el comando gpasswdo apropiado usermod.

Desafortunadamente, la documentación sobre el tipo de usuario no es la más clara. El managehomeparámetro no es tanto una declaración sobre ese directorio sino una opción para el comando useradd, usermodo userdel. Entonces, si configura managehome => truey cambia la ubicación del directorio de inicio, se creará, si elimina el usuario, se eliminará y si agrega el usuario, se creará. Sin embargo, no garantiza que el directorio exista en todo momento.

Si esto es necesario, le recomendaría que cree un tipo de archivo y establezca un requisito adecuado. Algo como esto:

user { 'artifactory':
    ensure     => 'present',
    home       => '/home/artifactory',
    managehome => true,
}

file { 
  '/home/artifactory/data':
    ensure  => link,
    target  => '/var/lib',
    require => [ User['artifactory'], File['artifactoryhomedir'] ]; 
  '/home/artifactory':
    ensure => directory,
    alias => 'artifactoryhomedir',
    require => User['artifactory'];
}

Respuesta2

Es unproblema conocido. La solución planificada es mantener el comportamiento actual, pero cambiar el nombregestionarcasaacrearcasapara que quede más claro.

información relacionada