2012-08-07 10 views
7

Sto entrando in Puppet, e mi piace, ma sto sbattendo la testa contro un muro con una piccola cosa che sono sicuro che dev'essere più facile di quanto non riesca a farcela.Decommenta una riga in Puppet

desidero decommentare questa riga nel .bashrc di un utente:

#force_color_prompt=yes 

Sto usando Augia per un sacco di cose, ma sembra come se questo non funziona con questo.

Ho notato che c'è una risorsa file_line che posso usare per assicurarmi che una riga sia presente in un file, ma ho bisogno che la linea rimanga nello stesso posto.

Non desidero sostituire lo .bashrc interamente con la mia copia, nonostante il fatto che questo pattern sia popolare in Puppet, non ha senso per me dato che non voglio mantenere la mia versione tra aggiornamenti.

In sed Io uso questo:

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

Tutte le idee?

risposta

6

Si potrebbe semplicemente aggiungere il comando sed a un exec con un'opzione a meno che non usi grep. Qualcosa di simile (non testata):

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

Oppure utilizzare la risorsa file_line lei ha citato (parte del modulo Labs Puppet stdlib credo) per aggiungere la riga non commentata e lasciare la linea commentato intatta.

+0

Sei il mio eroe, grazie! Impossibile aggiungere la linea, poiché la posizione all'interno dello script è importante, ma il tuo suggerimento è ottimo. Grazie :) – Ludo

6

In base alla mia esperienza, file_line sostituirà una riga che corrisponde alla regex.

Quindi, per ottenere force_color_prompt=yes vs. #force_color_prompt=yes si potrebbe:

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

È importante sottolineare che, se l'espressione regolare corrisponde , la sostituzione avviene in posto, vale a dire. cambierà la linea, non la posizione della linea. Se la regex fa non corrisponde allo, la linea verrà aggiunta alla fine del file.

Questa esperienza è con Puppet 3.1.

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

0

mentre da solo Augia non può farlo, il provider shellvar da Augeasproviders sarà in grado di farlo, ogni volta this PR si fonde.

1

Le shellvar già in grado di rimuovere il commento linee

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

percepisco questo molto più pulita rispetto all'utilizzo di exec e chiamando sed.

Problemi correlati