2016-08-31 12 views
6

के साथ एक पंक्ति को टिप्पणी करना मुझे विश्वास करना मुश्किल लगता है कि इस उपयोग के मामले में कुछ भी नहीं है लेकिन मेरी खोज निष्फल साबित हुई है।Ansible lineinfile मॉड्यूल

मैं एक ड्राइव है कि अब उपलब्ध नहीं है माउंट करने के लिए /etc/fstab में एक पंक्ति है:

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

क्या मैं चाहता हूँ मैं इस

--- 
- 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 
उपयोग कर रहा था

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

करने के लिए इसे बदलने के लिए है

यह टिप्पणी प्रतीक (#) डालने की अपेक्षा करता है, लेकिन इसके बजाय यह पूरी लाइन को बदल दिया और मैं en

#//archive/Pipeline 

शेष रेखा को ग्लोब-कैप्चर करने या बस एक टिप्पणी चार डालने का कोई तरीका है?

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

या

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

मैं मैं क्या "पढ़ा गया है यह insertafter तरह लग रहा है मैं क्या देख रहा हूँ है, लेकिन" "isn के बाद सम्मिलित lineinfile चारों ओर और से मेरे सिर लपेटो करने कोशिश कर रहा हूँ ' टी क्या मैं

उत्तर

10

आप अपने मामले के लिए replace मॉड्यूल का उपयोग कर सकते हैं:?

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

यह regexp से मेल खाने वाली स्ट्रिंग की सभी घटनाओं को प्रतिस्थापित करेगा।

lineinfile दूसरी ओर, केवल एक पंक्ति पर काम करता है (भले ही फ़ाइल में एकाधिक मिलान मिलते हैं)। यह सुनिश्चित करता है कि एक विशेष पंक्ति अनुपस्थित या परिभाषित सामग्री के साथ मौजूद है।

+1

एक इलाज किया, धन्यवाद। – datakid

7

उपयोग backrefs=yes:

राज्य = वर्तमान के साथ प्रयोग किया जाता है। यदि सेट किया गया है, तो रेखा में बैकरेरेंस (दोनों स्थितित्मक और नामित) शामिल हो सकते हैं जो regexp मिलान करते हैं तो पॉप्युलेट हो जाएंगे।

इस तरह:

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

भी ध्यान रखें कि मैं regexp के लिए (?i) विकल्प का उपयोग, क्योंकि अपनी खोज को अभिव्यक्ति उदाहरण fstab में राजधानी पी के साथ Pipeline से मेल खाते हैं कभी नहीं होगा।

+0

धन्यवाद Konstantin, एक अच्छा जवाब है, लेकिन मैंने प्रतिस्थापन का उपयोग करने का फैसला किया है। – datakid

1

यह कई कारणों में से एक है lineinfile एक एंटीपाटरन है। कई मामलों में, एक टेम्पलेट सबसे अच्छा समाधान है। इस मामले में, mount मॉड्यूल इसके लिए डिज़ाइन किया गया था।

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

लेकिन "आह!" आप कहते हैं, आप "यह संरक्षित करना चाहते हैं कि माउंट एक समय में fstab में था"। आपने mount का उपयोग कर एक बेहतर किया है, आपने को जवाब में संरक्षित किया है।

संबंधित मुद्दे