Estou tentando inserir um bloco de texto em meu arquivo de certificado de CA em hosts CentOS com o Puppet. Eu perguntei sobre isso antes, e parece que o CentOS é dolorosamente falta de funções de gerenciamento de certificados. .
O que eu preciso fazer é obter um pedaço grande de texto representando o certificado da minha CA (passado pelo comando infoopenssl
por qualquer motivo bobo) no meu arquivo /etc/ssl/certs/ca-bundle.crt
e garantir que ele esteja sempre lá, mesmo que o host atualiza seu arquivo CA posteriormente a partir do repo.
Eu não quero gerenciar o arquivo ca-bundle em sua totalidade com o Puppet. Isso já está sendo tratado pelos repositórios yum para os quais os servidores são apontados.
Dificuldade: O Puppet não tem uma maneira oficial de gerenciar blocos de texto, apenas linhas, usando o recurso file_line
. Eu tentando ser inteligente, no entanto, pensei que você poderia usar uma "linha" de texto com escape de nova linha e gerenciar isso.
Bem, mais ou menos. Funciona, pois o texto acaba no arquivo, mas o problema é que ele continua sendo adicionado novamente após cada execução de fantoche, como o código não pode dizer que ele já existe.
Para detalhes, o pedaço de texto se parece muito com isso (truncado por razões óbvias: 3)
$cacert = "Certificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 10:d8:83:91:-redacted-"
A linha no meu módulo Puppet é assim:
class em_cacerts::centos inherits em_cacerts{
file_line { 'ca-certificate':
path => '/etc/ssl/certs/ca-bundle.crt',
line => $cacert,
#match => "(see below)",
ensure => present,
}
Eu tentei todos os tipos de travessuras com a linha match
(incluindo o uso de inline_template
para definir a correspondência regex para todo o conteúdo da variável $cacert
, que funciona perfeitamente no IRB, mas não no Puppet ) em uma tentativa de fazer com que ele reconheça que o bloco de texto já existe, mas ele continua sendo re-adicionado toda vez e apenas se empilha em cima de si mesmo.
Eu provavelmente estou latindo na árvore errada aqui ... mas de qualquer forma, isso é parte da questão.
- Existe uma maneira melhor de atingir esse objetivo?
- Se não, como obtenho o Puppet para perceber que o bloco de texto já existe?
Obrigado!