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 }} \" "
^
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 }} \" "
Gardez simplement les deux points entre guillemets séparément -
regexp="(elasticsearch.* \"http.*)$" line="elasticsearch':' \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
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
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 }} \" "