Usando ansible 1.5.4, el comando
lineinfile: dest=/etc/bash.bashrc line="bind '\"\e[B\"':history-search-forward"
agregó la línea
bind '"\e[B"':history-search-forward
a /etc/bash.bashrc
perfectamente bien.
En ansible 1.9.1, la misma instrucción ansible produce la siguiente línea, que confunde las comillas que escapé en el comando lineinfile:
bind \e[B:history-search-forward
¿Cómo puedo arreglar las comillas para que se agregue la línea correcta?
Respuesta1
Por lo general, puede evitar algunos problemas de escape utilizando la forma de entrada multilínea, especialmente al ingresar dos puntos:
command: > curl -X POST -H 'Content-Type: application/json' --data '{"name": "{{ item.name }}", "comment": "{{ item.comment }}", "DefaultDistribution": "{{ item.default_distribution }}", "DefaultComponent": "{{ item.default_component }}" }' http://localhost:8080/api/repos
Respuesta2
Escribí un pequeño manual de Ansible que creo que hace lo que quieres (aunque en un archivo de prueba en lugar del bashrc real.
---
- name: Example for serverfault.com
hosts: all
tasks:
- name: Put line with quotes, backslash, and colon in a file
lineinfile:
dest: /home/vagrant/testfile.txt
create: yes
line: "bind '\"\\e[B\"':history-search-forward"
Ejecuté esto y aparece esta línea en testfile.txt:
bind '"\e[B"':history-search-forward
Estoy usando Ansible 2.1.1.0. No sé si eso difiere de 1.9.1