2012-08-07 17 views
7

Me estoy metiendo en Puppet, y me encanta, pero me estoy golpeando la cabeza contra la pared con una cosa pequeña que estoy seguro debe ser más fácil de lo que estoy haciendo.Descomentar una línea en Puppet

Deseo descomentar esta línea en el .bashrc de un usuario:

#force_color_prompt=yes 

He estado usando augeas para muchas cosas, pero parece que eso no va a trabajar con esto.

Observo que hay un recurso file_line que puedo usar para asegurar que haya una línea en un archivo, pero necesito que la línea permanezca en el mismo lugar.

No deseo reemplazar el .bashrc completamente con mi propia copia, a pesar de ver que este patrón es popular en Puppet, simplemente no tiene sentido para mí ya que no quiero mantener mi propia versión entre actualizaciones

En SED utilizo este:

sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" ~/.bashrc 

¿Alguna idea?

Respuesta

6

Usted podría simplemente agregar su comando sed a un ejecutivo con una opción a menos que use grep. Algo como esto (no probado):

exec { 'force_color_prompt': 
    command => 'sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" .bashrc' 
    cwd  => '/home/user', 
    shell  => true, 
    unless => 'grep -Fxq "force_color_prompt=yes" .bashrc', 
} 

O utilizar el recurso file_line usted ha mencionado (parte del módulo de los laboratorios de la marioneta stdlib creo) para añadir la línea sin comentar y dejar la línea comentada intacta.

+0

¡Eres mi héroe, gracias! No se puede agregar la línea, ya que la ubicación dentro del script es importante, pero su sugerencia es excelente. Gracias :) – Ludo

6

En mi experiencia, file_line reemplazará una línea que coincida con la expresión regular.

Así que para obtener force_color_prompt=yes vs #force_color_prompt=yes usted podría:

file_line { 
    'color_prompt': 
     path  => '/home/<youruser>/.bashrc', 
     match  => 'force_color_prompt', 
     line  => "force_color_prompt=yes", 
} 

Es importante destacar que, si la expresión regular coincide con , la sustitución sucede en lugar, es decir. cambiará la línea, no la ubicación de la línea. Si la expresión regular no coincide con no, la línea se adjuntará al final del archivo.

Esta experiencia es con Puppet 3.1.

Referencia: https://forge.puppetlabs.com/puppetlabs/stdlib

0

Mientras Augeas sí solo no puede hacerlo, el proveedor de shellvar Augeasproviders será capaz de hacerlo, siempre que sea this PR se fusiona.

1

Los shellvar ya se puede descomentar líneas

shellvar { '.bashrc': 
    ensure => present, 
    target => "/home/${your_user}/.bashrc", 
    variable => 'force_color_prompt' 
    uncomment => true, 
} 

percibo esto mucho más limpio que el uso de exec y llamando sed.

Cuestiones relacionadas