Is Puppet (or similar) a suitable technology for taking care of basic but critical mass changes?
Sim, pode ser usado dessa maneira. Eu uso isso para suportar sistemas de clientes externos.
I don't want any server to be able to see any config it shouldn't
Se você estiver usando o fantoche, não deverá ativar o autosign então. Autosign permite que os hosts solicitem automaticamente um certificado. Sua configuração e permissões serão quase certamente ligadas diretamente ao CN no certificado. Você não quer que um computador aleatório fique on-line e seja capaz de afirmar que ele é, na verdade, o sistema com todo o material secreto de alta segurança.
Se você é realmente paranóico, pode ajustar as configurações do servidor de arquivos de fantoches para criar compartilhamentos que somente alguns sistemas podem acessar. O acesso ao servidor de arquivos é baseado nos certificados.
I don't want Puppet to make any changes which it shouldn't, or revert any manual changes done on the server.
Existem algumas abordagens diferentes para permitir mudanças locais.
Um método que eu uso com frequência está abaixo. Basicamente, se você passar uma lista para um source
, o fantoche tentará cada item na lista. Então, adiciono o primeiro item da lista para apontar para um arquivo local.
file { '/etc/ssh/sshd_config':
ensure => present,
source => ["/etc/ssh/sshd_config_local",
"puppet:///modules/ssh/$ssh_config_file"],
...
}
Outra opção seria fazer uso de links simbólicos. Se alguém quiser usar a versão de fantoches, eles irão ligar simbolicamente à versão de fantoches de um arquivo. Se eles quiserem manter sua configuração localmente, eles não criarão um link simbólico.
file { '/etc/ssh/sshd_config_puppet':
ensure => present,
source => "puppet:///modules/ssh/$ssh_config_file",
...
}
A outra possibilidade é usar o augeas para fazer alterações no nível da linha, em vez de alterar arquivos inteiros. Seja muito conservador sobre o que você muda.