Comment peut échapper du côlon en une chaîne de caractères au sein d'une Ansible fichier YAML?
Je veux changer une seule ligne de mon code dans le fichier /var/www/kibana/config.js lors de l'installation de
elasticsearch: "http://"+window.location.hostname+":9200"
à
elasticsearch: "http://192.168.1.200:9200"
Ici, j'ai essayé d'utiliser lineinfile faire comme ci-dessous montrent
- 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 mis sur les 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 }} \" "
^
Vous devez vous connecter pour publier un commentaire.
vous devez placer l'ensemble de la ligne en
"
, où:
s'affiche.Voir ces pages:
Lien-1 Lien-2 Lien-3
La solution qui fonctionne dans tous les cas, peu importe combien de imbriqués les devis que vous pourriez avoir et sans vous forcer à ajouter plus de guillemets autour de l'ensemble de la chose (qui peut devenir difficile, voire impossible, selon la ligne que vous voulez écrire) est à la sortie du côlon par un Jinja2 expression, qui renvoie simplement le côlon comme une chaîne de caractères:
Ou dans votre ligne complète:
Crédit pour cela va github utilisateur drewp.
awk -F{{ ":" }} '/[^{{ ":" }}]*{{ ":" }}\$/{print " " $1 "{{ ":" }} " $2}' /tmp/shadow
Il suffit de garder le côlon entre guillemets séparément -
regexp="(elasticsearch.* \"http.*)$" line="elasticsearch':' \" {{ elasticsearch_URL }}:{{ elasticsearch_port }} \" "
foo=bar
est le plus adapté format pour une ligne directive, mais comme vous êtes déjà sur plusieurs lignes avec vos paramètres de toute façon, il suffit de changer le=
à:
, et il ne sera pas de chichi sur le fait d'avoir un côlon dans votre chaîne.C'est une chaîne de caractères déjà; vous n'avez pas à (et ne peut pas, comme on le voit ici) échapper deux points à l'intérieur.