2014-07-19 14 views
22

Voglio cambiare una riga del mio codice in /var/www/kibana/config.js file durante l'installazione daCome possono uscire i due punti in una stringa all'interno di un file Ansible YAML?

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

a

elasticsearch: "http://192.168.1.200:9200" 

Qui ho cercato di usare lineinfile per farlo come mostrato di seguito

- 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 

ho impostato le variabili di {{elasticsearch_URL}} e {{elasticsearch_port}}-http://192.168.1.200 e 9200, res pectively.

Ecco il messaggio di errore che ho incontrato:

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

risposta

16

è necessario racchiudere l'intera linea in ", dove : appare.

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

Vedi queste pagine:
Link-1Link-2Link-3

0

Si tratta di una stringa già; non devi (e non puoi, come visto qui) sfuggire ai due punti all'interno di esso.

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

Basta tenere i due punti tra virgolette separatamente -

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

+0

Grazie mille! La risposta accettata in realtà non la taglia per me. – radtek

1

foo=bar è il formato più adatto per una direttiva di una sola riga, ma come si sta già abbracciano diverse linee con i parametri in ogni caso, basta cambiare il = a : e non si preoccuperà di avere due punti nella stringa.

- 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

La soluzione che funziona in ogni caso, non importa quante citazioni annidate si potrebbe avere e senza costringere aggiungere più citazioni intorno il tutto (che può diventare difficile se non impossibile a seconda della linea che si desidera scrittura) è quello di uscita colon attraverso un'espressione Jinja2, che restituisce semplicemente i due punti come una stringa:

{{ ":" }} 

o nella vostra linea completa:

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

Credit to this goes to github user drewp.

+0

Ma rende gli script di shell quasi illeggibili: 'awk -F {{": "}} '/ [^ {{": "}}] * {{": "}} \ $/{print" "$ 1" { {":"}} "$ 2}"/tmp/shadow " – ceving

Problemi correlati