it-swarm.com.de

Wie kann ein Doppelpunkt in einer Zeichenfolge in einer Ansible YAML-Datei maskiert werden?

Ich möchte eine Zeile meines Codes in der Datei /var/www/kibana/config.js während der Installation von ändern

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

zu

elasticsearch: "http://192.168.1.200:9200"

Hier habe ich versucht, lineinfile zu verwenden, um das zu tun, wie unten gezeigt

- 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

Ich habe Variablen gesetzt von {{elasticsearch_URL}} und {{elasticsearch_port}} bis http://192.168.1.200 und 9200, beziehungsweise.

Hier ist die Fehlermeldung, die ich getroffen habe:

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

sie müssen die gesamte Zeile in " einschließen, wobei : angezeigt wird.

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

Siehe diese Seiten:
Link-1Link-2Link-

22
sunbabaphu

Die Lösung, die auf jeden Fall funktioniert, unabhängig davon, wie viele verschachtelte Anführungszeichen Sie haben und ohne dass Sie gezwungen werden, weitere Anführungszeichen um das Ganze hinzuzufügen (was je nach der zu schreibenden Zeile schwierig bis unmöglich werden kann), ist die Ausgabe des Doppelpunkts durch einen Jinja2-Ausdruck, der den Doppelpunkt einfach als Zeichenfolge zurückgibt:

{{ ":" }}

Oder in Ihrer kompletten Linie:

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

Dank geht an github user drewp.

16
udondan

Halten Sie einfach den Doppelpunkt in Anführungszeichen getrennt -

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

9
theharshest

foo=bar ist das geeignetere Format für eine einzeilige Direktive, aber da Sie ohnehin schon mehrere Zeilen mit Ihren Parametern überspannen, ändern Sie einfach das = bis :, und es wird nicht darum gehen, einen Doppelpunkt in Ihrer Zeichenfolge zu haben.

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

Es ist bereits eine Zeichenfolge. Sie müssen (und können, wie hier zu sehen, nicht) Doppelpunkte darin entkommen.

line="elasticsearch: \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
0
Ry-