2014-07-19 21 views
22

Ben bunu yapmak lineinfile kullanmaya çalıştıAnsible YAML dosyasındaki bir dizede kolondan nasıl kurtulabilirim?

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

İşte

elasticsearch: "http://192.168.1.200:9200" 

ila yükleme sırasında dosya /var/www/kibana/config.js benim bir satır kodun değiştirmek istiyorum

- 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 

aşağıda gösterisi olarak ben http://192.168.1.200 ve 9200, res için {{elasticsearch_URL}} ve {{elasticsearch_port}} değişkenlerini belirledik pectively. İşte

Tanıştığım hata iletisi:

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 }} \" " 
        ^

cevap

16

Eğer ", : görünmeden bütün çizgi içine gerekir.

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

bu sayfaları bakınız:
Link-1 Link-2 Link-3

0

Zaten bir dize var; İçindeki kolonları kaçmak zorunda değilsiniz (ve burada görüldüğü gibi).

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

Hemen ayrı ayrı tırnak nokta üst üste tutmak -

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

+0

Harika teşekkürler! Kabul edilen cevap benim için gerçekten kesmiyor. – radtek

1

foo=bar tek satırlık yönergesi için daha uygun biçimdir, ama zaten yine senin parametrelerle çeşitli çizgilere sahip konum olarak, sadece değiştirmek = - : ve dizinizde bir iki nokta üst üste sahip olmakla uğraşmaz.

- 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

istediğiniz çizgi bağlı imkansız zor alabilirsiniz şeyi (yaklaşık fazla tırnak eklemek için zorlamadan olursa olsun ve sahip olabilir kaç iç içe tırnak her durumda çalışacak çözümü yazma) çıkışına ise sadece bir dize olarak iki nokta üst üste döndüren bir jinja2 ifadesi, içinden kolon:

{{ ":" }} 

Veya tam çizgide:

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

Credit to this goes to github user drewp.

+0

Ancak, kabuk betiklerini neredeyse okunamaz hale getirir: awk -F {{":"}} '/ [^ {{":"}}] * {{":"}} \ $/{print "" $ 1 "{ {":"}} "2 $)"/tmp/gölge " – ceving