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

2

Estou procurando esclarecimentos aqui. Parece que o atributo managehome do tipo definido usuário só funciona quando o usuário não existe. Dê uma olhada neste DSL

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

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

A primeira vez que eu executo isto funciona bem, no entanto, se eu deletar o diretório home do usuário do artifactory , execute-o novamente, barfs de fantoches.

Erro: Não foi possível definir "link" para garantir que: Nenhum arquivo ou diretório desse tipo

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

Whether to manage the home directory when managing the user. This will create the home directory when ensure => present

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

    
por quickshiftin 14.01.2014 / 19:01

2 respostas

5

De um fantoche de perspectiva de tempo de execução verifica o status do usuário no sistema e o compara com o manifesto. Se o usuário não existir no sistema, o fantoche executa o comando useradd apropriado para criá-lo. Se o usuário não deve existir e, em seguida, ele executa o comando userdel apropriado. Se algum atributo do usuário, como associação de grupo, uid, nome, etc, tiver sido alterado, ele emitirá o comando gpasswd ou usermod apropriado.

Infelizmente, a documentação do tipo de usuário não é a mais clara. O parâmetro managehome não faz muito uma declaração sobre esse diretório, pois é uma opção para o comando useradd , usermod ou userdel . Portanto, se você definir managehome => true e 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, não garante que o diretório exista em todos os momentos.

Se isso for necessário, recomendo que você crie um tipo de arquivo e defina um requerimento apropriado. Algo parecido com isto:

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'];
}
    
por 14.01.2014 / 19:22
2

É um problema conhecido . A solução planejada é manter o comportamento atual, mas renomeie managedhome para createhome para torná-lo mais claro.

    
por 14.01.2014 / 19:39

Tags