
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 useradd
comando apropriado para criá-lo. Se o usuário não deveria existir, e existe, ele executa o userdel
comando apropriado. Se algum atributo do usuário, como associação ao grupo, uid, nome, etc., tiver sido alterado, ele emitirá o comando gpasswd
or apropriado.usermod
Infelizmente, a documentação sobre o tipo de usuário não é a mais clara. O managehome
parâmetro não é tanto uma declaração sobre esse diretório, mas 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, 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.