web-dev-qa-db-fra.com

Comment peut échapper deux points dans une chaîne dans un fichier Ysible Ansible?

Je souhaite modifier une ligne de mon code dans le fichier /var/www/kibana/config.js pendant l'installation à partir de

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

à

elasticsearch: "http://192.168.1.200:9200"

Ici, j'ai essayé d'utiliser lineinfile pour le faire comme indiqué ci-dessous

- 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

J'ai défini des variables de {{elasticsearch_URL}} et {{elasticsearch_port}} à http://192.168.1.200 et 9200, respectivement.

Voici le message d'erreur que j'ai rencontré:

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

vous devez inclure la ligne entière dans ", où : apparaît.

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

Voir ces pages:
Lien-1Lien-2Lien-

22
sunbabaphu

La solution qui fonctionnera dans tous les cas, peu importe le nombre de guillemets imbriqués que vous pourriez avoir et sans vous forcer à ajouter plus de guillemets autour de l'ensemble (ce qui peut devenir difficile à impossible selon la ligne que vous voulez écrire) est de sortir les deux points via une expression Jinja2, qui renvoie simplement les deux points sous forme de chaîne:

{{ ":" }}

Ou dans votre gamme complète:

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

Le mérite revient à l'utilisateur github.

16
udondan

Gardez simplement les deux points entre guillemets séparément -

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

9
theharshest

foo=bar est le format le plus approprié pour une directive sur une ligne, mais comme vous êtes déjà sur plusieurs lignes avec vos paramètres, changez simplement le = à :, et cela ne vous dérangera pas d'avoir un deux-points dans votre chaîne.

- 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

C’est déjà une chaîne; vous n'avez pas à (et ne pouvez pas, comme on le voit ici) échapper aux deux points à l'intérieur.

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