2014-07-19 9 views
22

मैं सेएक उत्तरदायी वाईएएमएल फ़ाइल के भीतर एक स्ट्रिंग में कोलन से कैसे बच सकता है?

elasticsearch: "http://"+window.location.hostname+":9200" 

को
elasticsearch: "http://192.168.1.200:9200" 

यहाँ मैं lineinfile उपयोग करने के लिए है कि करने की कोशिश की स्थापना के दौरान फ़ाइल /var/www/kibana/config.js में मेरे कोड की एक पंक्ति को बदलना चाहते हैं नीचे

- name: Comment out elasticsearch the config.js to ElasticSearch server 
    lineinfile: 
    dest=/var/www/kibana/config.js 
    backrefs=true 
    regexp="(elasticsearch.* \"http.*)$" 
    line="elasticsearch\: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" " 
    state=present 

शो के रूप में मैं http://192.168.1.200 और 9200, रेस को {{elasticsearch_URL}} और {{elasticsearch_port}} की चर निर्धारित किया है pectively।

त्रुटि संदेश मैं से मुलाकात की है:

ERROR: Syntax Error while loading YAML script, /Users/shuoy/devops_workspace/ansible_work/logging-for-openstack/roles/kibana/tasks/Debian.yml 
Note: The error may actually appear before this position: line 29, column 25 

regexp="(elasticsearch.* \"http.*)$" 
line="elasticsearch\: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" " 
        ^

उत्तर

16

आप ", जहां : आइटम दिखाई देता है पूरे पंक्ति शामिल करनी।

lineinfile: 
'dest=/var/www/kibana/config.js 
backrefs=true 
regexp="(elasticsearch.* \"http.*)$" 
line="elasticsearch\: \ {{ elasticsearch_URL }}:{{ elasticsearch_port }} \ " 
state=present' 

इन पृष्ठों देखें:
Link-1Link-2Link-3

0

यह एक स्ट्रिंग पहले से ही है, आपको इसके अंदर कोनों से बचने की आवश्यकता नहीं है (और यहां नहीं देखा जा सकता है)।

line="elasticsearch: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" " 
9

बस अलग से उद्धरण में पेट रखने -

regexp="(elasticsearch.* \"http.*)$" line="elasticsearch':' \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "

+0

ग्रेट धन्यवाद! स्वीकृत उत्तर वास्तव में मेरे लिए इसे काट नहीं देता है। – radtek

1

foo=bar एक पंक्ति निर्देश के लिए अधिक उपयुक्त प्रारूप है, लेकिन जैसा कि आप पहले से ही अपने मानकों के साथ कई लाइनों वैसे भी फैले रहे हैं, बस बदल = से :, और यह आपकी स्ट्रिंग में कोलन रखने के बारे में चिंतित नहीं होगा।

- name: Comment out elasticsearch the config.js to ElasticSearch server 
    lineinfile: 
    dest:  /var/www/kibana/config.js 
    backrefs: true 
    regexp: 'elasticsearch.* "http.*$' 
    line:  'elasticsearch: "{{ elasticsearch_URL }}:{{ elasticsearch_port }}"' 
    state: present 
14

समाधान है कि पूरी बात (जो लाइन आप करना चाहते हैं पर निर्भर करता है असंभव को मुश्किल हो सकती है चारों ओर अधिक उद्धरण जोड़ने के लिए मजबूर बिना कोई फर्क नहीं पड़ता कि आप कितने नेस्टेड उद्धरण हो सकता है और किसी भी मामले में काम करेंगे राइट) उत्पादन करने के लिए है एक Jinja2 अभिव्यक्ति, जो केवल एक स्ट्रिंग के रूप पेट के रिटर्न के माध्यम से पेट के:

{{ ":" }} 

या अपने पूरी लाइन में:

line="elasticsearch\: \" {{ elasticsearch_URL }}{{ ":" }}{{ elasticsearch_port }} \" " 

Credit to this goes to github user drewp.

+0

लेकिन यह खोल स्क्रिप्ट लगभग अपठनीय बनाता है: 'awk -F {{":"}}'/[^ {{":"}}] * {{":"}} \ $/{print "" $ 1 "{ {":"}} "$ 2} '/ tmp/shadow' – ceving

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