regex - blockinfile - ansible lineinfile
¿Cómo se pueden escapar los dos puntos en una cadena dentro de un archivo YAML de Ansible? (5)
La solución que funcionará en cualquier caso, sin importar cuántas citas anidadas tengas y sin forzarte a agregar más citas alrededor de la cosa (lo que puede hacer que sea difícil o imposible dependiendo de la línea que quieras escribir) es emitir los dos puntos a través de una expresión Jinja2, que simplemente devuelve los dos puntos como una cadena:
{{ ":" }}
O en tu línea completa:
line="elasticsearch/: /" {{ elasticsearch_URL }}{{ ":" }}{{ elasticsearch_port }} /" "
Quiero cambiar una línea de mi código en el archivo /var/www/kibana/config.js durante la instalación desde
elasticsearch: "http://"+window.location.hostname+":9200"
a
elasticsearch: "http://192.168.1.200:9200"
Aquí traté de usar lineinfile para hacer eso como se muestra a continuación
- 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
He establecido las variables de {{elasticsearch_URL}}
y {{elasticsearch_port}}
a http://192.168.1.200
y 9200
, respectivamente.
Aquí está el mensaje de error que conocí:
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 }} /" "
^
Solo mantén los dos puntos entre comillas por separado.
regexp="(elasticsearch.* /"http.*)$" line="elasticsearch'':'' /" {{ elasticsearch_URL }}:{{ elasticsearch_port }} /" "
Ya es una cuerda; no tienes que (y no puedes, como se ve aquí) escapar de dos puntos en su interior.
line="elasticsearch: /" {{ elasticsearch_URL }}:{{ elasticsearch_port }} /" "
foo=bar
es el formato más adecuado para una directiva de una línea, pero como de todas formas ya está abarcando varias líneas con sus parámetros, simplemente cambie el =
a :
y no se preocupará por tener dos puntos en su cadena.
- 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