ansible lineinfile экранированные кавычки пропадают

ansible lineinfile экранированные кавычки пропадают

Используя ansible 1.5.4, команда

lineinfile: dest=/etc/bash.bashrc line="bind '\"\e[B\"':history-search-forward"

добавил строку

bind '"\e[B"':history-search-forward

до /etc/bash.bashrcсовершенно нормального.

В ansible 1.9.1 та же инструкция ansible выдает следующую строку, которая портит кавычки, которые я экранировал в команде lineinfile:

bind \e[B:history-search-forward

Как мне исправить кавычки, чтобы была добавлена ​​правильная строка?

решение1

Обычно можно избежать путаницы, используя многострочную форму ввода, особенно при вводе двоеточий:

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

решение2

Я написал небольшой сценарий Ansible, который, как я думаю, делает то, что вам нужно (хотя и для тестового файла вместо настоящего bashrc).

---

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

Я запустил это и получил следующую строку в testfile.txt:

bind '"\e[B"':history-search-forward

Я использую Ansible 2.1.1.0. Не знаю, отличается ли он от 1.9.1.

Связанный контент