Puppet: cum să adăugați o linie la un fișier existent (Administrarea sistemului, Păpușă)

user1670773 a intrebat.
a intrebat.

Editare: „A se modifica: Exemplul de mai jos este corect și funcționează perfect. Dar, din anumite motive, nu a funcționat pentru mine la prima dată și apoi am făcut vagrant provision și apoi totul a funcționat perfect.

Încerc să adaug o linie la un fișier existent /etc/fuse.conf. Am încercat următoarele

am adăugat un folder două foldere sub directorul modules

sudo mkdir /etc/puppet/modules/test
sudo mkdir /etc/puppet/modules/test/manifests

Apoi am creat un fișier test.pp și am adăugat următoarele linii

sudo vim /etc/puppet/modules/test/manifests/test.pp

file { '/etc/fuse.conf':
  ensure => present,
}->
file_line { 'Append a line to /etc/fuse.conf':
  path => '/etc/fuse.conf',
  line => 'Want to add this line as a test',
}

După aceea am rulat această comandă

puppet apply /etc/puppet/modules/test/manifests/test.pp

Apoi am deschis acest fișier /etc/fuse.conf și nu a existat nicio modificare în fișier. Linia nu a fost adăugată în fișier. Nu înțeleg ce îmi scapă aici. Cum pot să fac acest lucru? Învăț puppet. Deci, acest lucru este doar în scop de învățare.

Comentarii

  • Ce versiune de Puppet? Modulul stdlib care oferă file_line se găsește în $modulepath? Aveți vreo eroare în ieșirea din consolă a fișierului puppet apply comandă? –  > Por Aaron Copley.
  • Exemplul de mai sus funcționează pentru mine. –  > Por Aaron Copley.
  • Cross-posted: stackoverflow.com/q/36045455/781723, serverfault.com/q/764220/111679, superuser.com/q/1053789/93541. Vă rugăm să nu postați aceeași întrebare pe mai multe site-uri. Fiecare comunitate ar trebui să aibă o șansă cinstită de a răspunde fără ca timpul nimănui să fie irosit. –  > Por D.W..
3 răspunsuri
Sven Döring

Pentru file_line biblioteca standard Puppet Labs trebuie să fie instalată.

Consultați https://puppet.com/blog/module-of-week-puppetlabs-stdlib-puppet-labs-standard-library pentru mai multe informații.

johnnybgood04

Încercați acest lucru

file { '/etc/fuse.conf':
  ensure => present,
}->
if "test `grep -q 'Want to add this line as a test' /etc/fuse.conf | wc -l` -eq 0" {
  exec { 'echo "Want to add this line as a test" >> /etc/fuse.conf':
       }
}

Comentarii

  • Funcționează cu Puppet 4 sau ceva de genul ăsta? Nu știam că se pot face teste în stil bash într-o declarație if. Am încercat și este o eroare de sintaxă în Puppet 3, care este ceea ce încă folosesc. –  > Por Aaron Copley.
  • Mă uit la unele dintre modulele mele vechi, așa că nu sunt sigur de versiune. Știu că foloseam cea mai recentă, așa că aș presupune că este v4. Dacă comentezi declarația if, funcționează comanda exec? –  > Por johnnybgood04.
  • Nu, tot trebuie să îi spuneți lui Puppet unde să găsească echo. Aveți nevoie de un atribut de cale sau de o calificare completă /bin/echo. De asemenea, dacă comentezi if, vei primi acea linie adăugată de fiecare dată când Puppet rulează. File_line a lui OP este într-adevăr cel mai bun mod de a face acest lucru. El trebuie doar să rezolve de ce nu funcționează. –  > Por Aaron Copley.
  • Acesta nu este un cod valid pentru puppet. – user108370
Malan

Puteți încerca acest lucru:

exec {'exec_name':
command => 'bash -c "echo foo_bar" >> /path/to/file',
path => '/bin',
}

Am încercat majoritatea opțiunilor și toate m-au dezamăgit.

Comentarii

  • Acest lucru va adăuga linia la fiecare execuție puppet. –  > Por mzhaase.
  • @mzhaase – Am făcut o editare pentru a rezolva această problemă – user108370