Estou criando um usuário da seguinte forma
user { $username:
comment => "$name",
shell => "$shell",
managehome => false,
password => "$password",
groups => $groups
}
Agora, como você pode ver, estou fazendo um managehome é falso. Agora, mais tarde, preciso enviar um arquivo para o diretório inicial do usuário.
$key = "${homedir}/${name}/file"
file { $key:
ensure => present,
owner => $username,
group => $username,
mode => 600,
content => "$keyvalue",
subscribe => User[$username],
}
Como posso obter o diretório inicial do usuário para isso?
Tentei encontrar uma solução para o mesmo problema, e é melhor adotar uma abordagem um pouco diferente.
Defina explicitamente o diretório inicial, por exemplo:
Quando
managehome
é falso, o diretório inicial nem é criado. Então você tem que defini-lo especificamente. Geralmente, é melhor fazer uma definição personalizada para todo o usuário:Você pode adicionar mais parâmetros, por exemplo
$keyvalue
, e criar um arquivo de chave se esse parâmetro for fornecido.Você também pode definir uma variável global
$home = "/home"
(específica do SO, se necessário) e obter o diretório inicial"${home}/${username}"
.Edit: Usando hash para definir diretórios pessoais específicos do usuário
As versões mais recentes do Puppet (> = 2.6) suportam hashes. Seria possível definir um hash contendo
username => /path/to/home
mapeamentos para cada usuário:Para qualquer nome de usuário, é fácil obter o diretório inicial
$home['username']
.Hash do diretório inicial com fallback
Na maioria das vezes, seria melhor ter um "padrão de fallback" se o usuário não existir no hash. Em teoria, isso é possível, embora a sintaxe se torne um pouco enigmática e inchada:
fonte
Esta pergunta é antiga, mas ainda relevante. De fato, existe uma maneira melhor agora. Adicione um fato personalizado ao [module] /lib/facter/home_dirs.rb que contém o seguinte:
Em seguida, você pode acessar os dados no manifesto assim:
Lembre-se de que isso só funciona se o usuário já existir antes da execução do fantoche. Se o usuário estiver sendo criado durante a execução, o diretório inicial já deve ser conhecido ou pelo menos previsível. O Puppet é projetado para criar ordem, afinal.
Espero que isso ajude alguém.
fonte