regex_search lineinfile blockinfile regex ansible ansible-playbook

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 }} /" "

El crédito a esto va al usuario github drewp.

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 }} /" "


necesitas encerrar toda la línea en " , donde : aparece.

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

Vea estas páginas:
Link-1 Link-2 Link-3


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