Puppet: managehome no tipo de usuário só funciona quando o usuário não existe

Puppet: managehome no tipo de usuário só funciona quando o usuário não existe

Estou procurando esclarecimentos aqui. Parece quegerenciar casaatributo dodo utilizadoro tipo definido só funciona quando o usuário não existe. Dê uma olhada nesta DSL

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

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

Na primeira vez que executo isso, funciona bem, no entanto, se eu excluir oartefatodiretório inicial do usuário e execute-o novamente, puppet barfs.

Erro: não foi possível definir o 'link' para garantir: esse arquivo ou diretório não existe

Meu primeiro pensamento érealmente? Dê uma olhada nodocumentação

Se deve gerenciar o diretório inicial ao gerenciar o usuário. Isso criará o diretório inicial quando garantir => presente

Se eu excluir o usuário e tentar novamente, funciona. Então isso é intencional ou é um bug? Parece delicado para mim.

Responder1

Do ponto de vista do tempo de execução, o puppet verifica o status do usuário no sistema e o compara com o manifesto. Se o usuário não existir no sistema, o puppet executará o useraddcomando apropriado para criá-lo. Se o usuário não deveria existir, e existe, ele executa o userdelcomando apropriado. Se algum atributo do usuário, como associação ao grupo, uid, nome, etc., tiver sido alterado, ele emitirá o comando gpasswdor apropriado.usermod

Infelizmente, a documentação sobre o tipo de usuário não é a mais clara. O managehomeparâmetro não é tanto uma declaração sobre esse diretório, mas uma opção para o comando useradd, usermodou userdel. Portanto, se você definir managehome => truee alterar o local do diretório inicial, ele será criado, se você excluir o usuário, ele será excluído e se você adicionar o usuário, ele será criado. No entanto, isso não garante que o diretório exista sempre.

Se isso for necessário, recomendo que você crie um tipo de arquivo e defina um require apropriado. Algo assim:

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'];
}

Responder2

É umproblema conhecido. A solução planejada é manter o comportamento atual, mas renomeargerenciar casaparacriarcasapara deixar mais claro.

informação relacionada