Boa Tarde Pessoal, tudo bom?
Acho que posso contribuir um pouco.
História longa:
José, no começo eu fazia algo parecido com o que tem feito. Concordo com você, começa a parecer que não está certo, começa a ficar difícil a gerência. Ao longo dos anos e dos cursos (fiz o treinamento completo na Instruct) eu fui pegando o jeito e melhorei bastante, ainda faltam coisas para eu me dar por satisfeito, como os testes dos módulos, mas vamos evoluindo aos poucos.
Vou contar como fiz para ver se ajuda.
Depois eu comecei a escrever os meus módulos (o das chaves ssh foi o primeiro) e ao invés de eu colocar o usuário X na máquina Y eu coloquei todos os usuários em todas as máquinas. Entendo que isso era uma peculiaridade do meu ambiente e que talvez não possa ser feito em outros.
Aí veio um problemão! A linguagem teve uma quebra da versão 3 para a 4, reescrevi bastante coisa para deixar compatível com a Puppet Language 4.
Depois dessa reescrita, comecei a remover de dentro dos módulos variáveis do meu ambiente (nome de máquina, ip etc) e colocar no Hiera.
Com os roles e profiles a organização geral das coisas melhorou muito, mas faltava algo.
Com o ENC o site.pp fica vazio, tenho vários environments, com os módulos adequados para cada local, e tudo com Hiera por environment para oferecer os valores que utilizo no dia-a-dia.
História curta:
No Hiera tenho um arquivo que classifica a máquina e de acordo com a classificação seleciono um array que contém hashs (confuso, né.. é confuso mesmo..), cada hash é a descrição de um usuário. Por que motivos usar um hash? É fácil, eu uso a função create_resources (
https://puppet.com/docs/puppet/latest/function.html#create_resources) para adicionar o ssh_authorized_key (
https://puppet.com/docs/puppet/5.5/types/ssh_authorized_key.html), assim não preciso me preocupar com adicionar o usuário, só preciso gerenciar o home (não funciona bem essa parte, por isso fiz usando file para gerir o home e as permissões adequadas, afinal o home tem que exisitr antes do ssh_authorized_key ).
Algum código:
#Hash de um usuário no Hiera:
usuario_X:
'comentario da chave':
user: 'username'
type: '<tipo da chave>'
key: 'zzzzzzuuuuuuukkkkkk....'
#Array que indica quais os hashs usar, no Hiera também.
adduser::custom_user:
- usuario_X
- usuario_Y
# Núcleo do manifest no módulo
# Garante que o /home/user existe
file {user:
ensure => 'directory',
owner => $user
group => $grupo,
path => "/home/${user}",
mode => '0755',
}
# Gerencia as chaves ssh
create_resources('ssh_authorized_key',lookup($user,Hash,undef,undef))
# Remove o usuario
user {$user:
ensure => absent,
}
Obviamente é um esboço do código que uso, mas o caminho que uso é esse.
Cada vez que um usuário tem que ser adicionado eu vou no Hiera e ajusto o hash listado no array, para remover eu indico no Hiera que é uma remoção.