2016-08-31 31 views
6

ile bir çizgiyi yorumlama Bu kullanım durumunu kapsayan bir şey olmadığına inanmak zor, ancak aramamın sonuçsuz olduğunu kanıtladım.Ansible lineinfile modülü

Ben artık bulunmayan bir sürücü yerleştirmenin /etc/fstab bir çizgi var:

//archive/Pipeline /pipeline/Archives cifs ro,credentials=/home/username/.config/cifs 0 0 

İstediğim şey bu

--- 
- hosts: slurm 
    remote_user: root 

    tasks: 
    - name: Comment out pipeline archive in fstab 
     lineinfile: 
     dest: /etc/fstab 
     regexp: '^//archive/pipeline' 
     line: '#//archive/pipeline' 
     state: present 
     tags: update-fstab 
kullanıyordum

#//archive/Pipeline /pipeline/Archives cifs ro,credentials=/home/username/.config/cifs 0 0 

bunu değiştirmektir

sadece yorum sembolünü eklemek için bekliyor (#), ancak bunun yerine tüm satırı değiştirdi ve en

#//archive/Pipeline 

ile ded hattın kalanını topak-yakalamak ya da sadece tek bir yorum kömürü eklemek için bir yol var?

regexp: '^//archive/pipeline *' 
line: '#//archive/pipeline *' 

veya

regexp: '^//archive/pipeline *' 
line: '#//archive/pipeline $1' 

Ben "o InsertAfter benziyor okudum ben aradığım, ama 'Ne lineinfile etrafında ve benim baş tamamlamaya çalışırken' ISN'de sonra insert am' ? Ben

cevap

10

Davandan için replace modülünü kullanabilirsiniz istediklerini t:

--- 
- hosts: slurm 
    remote_user: root 

    tasks: 
    - name: Comment out pipeline archive in fstab 
     replace: 
     dest: /etc/fstab 
     regexp: '^//archive/pipeline' 
     replace: '#//archive/pipeline' 
     tags: update-fstab 

O regexp ile eşleşen dizenin tüm oluşumlarını değiştirir. Öte yandan, yalnızca bir satırda çalışır (birden çok eşleşme bir dosyada bulunsa bile). Belirli bir çizginin belirli bir içerikle eksik veya mevcut olmasını sağlar.

+1

Bir tedavi yaptı, teşekkürler. – datakid

7

Kullanım backrefs=yes:

mevcut durumunu = ile kullanılır. Eğer ayarlanmışsa, satır regexp ile eşleşirse, popülasyona girecek olan (hem konumsal hem de adlandırılmış) geri referanslar içerebilir. Bunun gibi

:

- name: Comment out pipeline archive in fstab 
    lineinfile: 
    dest: /etc/fstab 
    regexp: '(?i)^(//archive/pipeline.*)' 
    line: '# \1' 
    backrefs: yes 
    state: present 

Ayrıca arama ifadesi örneği fstab'e sermaye P ile Pipeline maç asla çünkü regexp için (?i) seçeneğini kullanın unutmayın.

+0

Teşekkürler Konstantin, iyi bir cevap, ama değiştirmeyi kullanmaya karar verdim. – datakid

1

Bu, lineinfile'un bir antipattern olduğu birçok nedenden biridir. Çoğu durumda, bir şablon en iyi çözümdür. Bu durumda, mount modülü bunun için tasarlanmıştır.

- name: Remove the pipeline archive 
    mount: name="/archive/pipeline" state=absent 

Ama "ah!" diyorsunuz, "mountun bir defada fstab içinde olduğunu korumak istersiniz". mount kullanarak daha iyisini yaptınız, ansible'da sakladınız.