Gerenciando um bloco de texto com o Puppet

3

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!

    
por Mikey T.K. 14.06.2013 / 16:30

4 respostas

2

Acabei resolvendo isso com uma linha exec :

class em_cacerts::centos inherits em_cacerts{
        exec { 'cent-ca-certificate':
                command => "/bin/echo '$centcacert' >> '$cabundlepath'",
                onlyif => "test ! 'grep (redacted CA name) $cabundlepath'", 
                provider => 'shell',
        }
}

Sim, ele está usando exec, o que é oficialmente desencorajado, mas isso funciona de forma confiável e usa coisas básicas absolutas que qualquer caixa do CentOS terá.

Obrigado a todos!

    
por 17.06.2013 / 17:55
1

Geralmente, vejo arquivos gerenciados na íntegra usando modelos erb. Se você não fizer isso, você pode ter um script executando um comando sed. link

    
por 14.06.2013 / 22:13
1

Acho que você quer o módulo de concatenação de bonecos, que cria arquivos a partir de fragmentos. Ou apenas gerencie um arquivo separado e tenha um recurso exec inserido no arquivo se não for encontrado com o grep

    
por 14.06.2013 / 22:29
0

Veja também augeas.

link

O objetivo é fazer exatamente o que você pediu.

    
por 17.06.2013 / 18:29