2014-06-09 7 views
11

जब मैं ansible में lineinfile का उपयोग यह लिख नहीं है ', " पात्रों lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'उद्धरण

यह CACHES=default दे रहा है लेकिन वांछित आउटपुट CACHES="default"

यह कैसे प्राप्त करने के लिए है?

उत्तर

15

यह प्रतीत होता है कि आप उद्धरण बच सकते हैं:

- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\"" 

कि इस उत्पादन देता है:

$ cat /tmp/xyz 
CACHES="default" 

आप एकल उद्धरण है कि दोहरे उद्धरण चिह्नों के अंदर हैं से बचने के लिए की जरूरत नहीं है:

- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\" foo='x'" 
cat /tmp/xyz 
CACHES="default" foo='x' 

स्रोत: YAML specification, stackoverflow answer

+0

प्रत्यक्ष भागने काम नहीं कर रहा है। सिंटेक्स त्रुटि उठाई गई है। – eldos

+0

@eldos, कृपया अपना प्रश्न संपादित करें और वाक्यविन्यास त्रुटि दें। मैंने उत्तरदायी के आधुनिक संस्करण पर सफलतापूर्वक उन पंक्तियों को निष्पादित किया। – tedder42

1

सामग्री प्रतिस्थापित किया जा करने के लिए तो एक चर प्लेबुक में उच्च ऊपर में है, ऐसा लगता है कि आप इस

--- 
- hosts: tomcat 

    vars: 
    classpath: "CLASSPATH=\\\"$CATALINA_HOME/bin/foo.jar\\\"" 

    tasks: 

    - lineinfile: dest="/tomcat/bin/setenv.sh" line="{{ classpath }}" state=present 

तरह के बजाय भागने पात्रों उद्धरण, कुछ से बचने के लिए की जरूरत है की तरह एक लाइन के साथ समाप्त होता है परिणामी फ़ाइल

CLASSPATH="$CATALINA_HOME/bin/foo.jar" 
4

Ansible 1.9.2 में यह एक बग (https://github.com/ansible/ansible/issues/10864) है, जो शुरुआत या पंक्ति के अंत में बच गए दोहरे उद्धरण चिह्नों को सम्मिलित करने में विफल रहता है शामिल हैं।

जैसे, निम्नलिखित

 
- name: /home/core/linetest 
    lineinfile: dest="/home/core/linetest" line="\"ma\"ok\"in\"" 

पहली और आखिरी लापता डबल उद्धरण (भले ही आप वह भागे) का परिणाम देगा।

 
#/home/core/linetest 
ma"ok"in 

इस बग के लिए क्षतिपूर्ति करने के लिए, आप शुरू करने के लिए एक उपसर्ग जोड़ सकते हैं और हो सकता है दोहरे उद्धरण चिह्नों को समाप्त हुए, और बाद में इसे हटाने।

 
- name: PREFIX first and last escaped double quotes with 'KUCF' 
    lineinfile: dest="/home/core/linetest" line="KUCF\"main\"KUCF" 

- name: remove 'KUCF' PREFIX 
    replace: dest="/home/core/linetest" regexp="KUCF" replace="" 

जो आप

 
#/home/core/linetest 
"main" 

सुनिश्चित करें कि अपनी चुनी PREFIX गंतव्य फ़ाइल के संदर्भ में कभी नहीं इस्तेमाल किया जाएगा बनाने देना चाहिए। आम तौर पर, PREFIX जितना लंबा और अधिक यादृच्छिक होगा, उतनी कम संभावना है कि यह आपकी गंतव्य फ़ाइल में मौजूदा सामग्री के साथ संघर्ष करेगी।

वैकल्पिक रूप से, आप अपने उत्तर को नवीनतम शाखा में अपग्रेड कर सकते हैं।

0

बस इसका पालन करें, ऊपर दिए गए उदाहरण Win_lineinfile का उपयोग कर विंडोज बॉक्स पर बैच फ़ाइल बनाने का प्रयास करते समय मेरे लिए काम नहीं करते थे। फ़ाइल बनाई जा रही थी, लाइन डाली जा रही थी, लेकिन उद्धरण और बैकस्लाश को स्वरूपित किया गया था। यह उत्तर 2.4 के साथ था। आखिर में एक सह श्रमिक सुझाव के अनुसार मैं क्या कर रहा था कुछ इनलाइन जिन्जा templating था;

- name: insert our batch file contents 
    win_copy: 
    dest: C:\QAAutomation\files\posauto.bat 
    force: yes 
    content: | 
     {% raw %}"C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console.exe" "C:\QAAutomation\files\1POS Automation\Application Files\Bin\Automation.dll" > "c:\QAAutomation\results\nunit-console-output.txt" {% endraw %}