Administrar un bloque de text con Puppet

Estoy intentando insert un bloque de text en mi file de certificate de CA en hosts CentOS con Puppet. Pregunté acerca de esto antes, y parece que CentOS es muy poco en funciones de gestión de certificates …

Lo que necesito hacer es get un trozo bastante grande de text que representa el certificate de mi CA (pasó a través del command info de openssl para cualquier razón tonta) en mi file /etc/ssl/certs/ca-bundle.crt y asegúrese de que siempre está allí , incluso si el host actualiza su file de CA más adelante desde el repository.

No quiero manejar el file de ca-bundle en su totalidad con Puppet. Esto ya está siendo manejado por los repositorys yum a los serveres se señalan.

Dificultad: Puppet no tiene oficialmente una forma de administrar trozos de text, sólo líneas, utilizando el recurso file_line . Sin embargo, tratando de ser inteligente, pensé que podrías usar una "línea" de text que se escapinga de la nueva línea y administrarla.

Especie de. Funciona, en que el text termina en el file, pero el problema es que sigue recibiendo re-added después de cada ejecución de títeres, como el código no puede decir que ya existe.

Para el detalle, el trozo de text se parece mucho a esto (truncado por razones obvias: 3)

 $cacert = "Certificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 10:d8:83:91:-networkingacted-" 

La línea en mi module de títeres tiene este aspecto:

 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, } 

He intentado todo tipo de travesuras con la línea de match (incluyendo el uso de un inline_template para establecer el regex de juego a todo el contenido de la variable $cacert , que funciona sin problemas en IRB, pero no en Puppet) en un bash de llegar a reconocer el bloque de text ya existe, pero sigue recibiendo re-añadido cada vez y sólo se astack encima de sí mismo ..

Probablemente estoy ladrando el tree equivocado aquí … pero de todos modos, eso es parte de la pregunta.

  • ¿Hay una mejor manera de lograr este objective?
  • Si no es así, ¿cómo puedo conseguir que Puppet se dé count de que el bloque de text ya existe?

¡Gracias!

Terminé resolviendo esto con una línea exec :

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

Sí, se utiliza exec, que es oficialmente desalentado, pero esto funciona de manera fiable y utiliza cosas básicas absolutas que cualquier caja de CentOS tendrá.

¡Gracias a todos!

Normalmente veo files administrados en su totalidad utilizando templates erb. Si no lo hace, podría hacer que un script ejecute un command sed. https://puppetlabs.com/blog/why-puppet-isnt-a-file-management-tool/

Creo que quieres el module de concat de marionetas, que construye files de fragments. O simplemente administrar un file independiente y tener un recurso exec sed insertlo en el file si no se encuentra con grep

Véase también augeas.

http://augeas.net/

Su objective es hacer exactamente lo que pediste.