Когда я использую lineinfile
в недоступном, он не пишет символы '
, "
lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'
он дает CACHES=default
но желаемый результат равен CACHES="default"
Как это сделать?
Когда я использую lineinfile
в недоступном, он не пишет символы '
, "
lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'
он дает CACHES=default
но желаемый результат равен CACHES="default"
Как это сделать?
Кажется, вы можете избежать кавычек:
- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\""
Это дает этот результат:
$ cat /tmp/xyz
CACHES="default"
Вам не нужно избегать одиночных кавычек, которые находятся внутри двойных кавычек:
- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\" foo='x'"
cat /tmp/xyz
CACHES="default" foo='x'
источник: спецификация YAML, fooobar.com/questions/209292/...
Ansible 1.9.2 содержит ошибку (https://github.com/ansible/ansible/issues/10864), которая не может вставить скрытые двойные кавычки в начале или конце строки.
Например, следующий
- name: /home/core/linetest lineinfile: dest="/home/core/linetest" line="\"ma\"ok\"in\""
приведет к отсутствию первой и последней двойных кавычек (даже если вы ее избежали).
#/home/core/linetest ma"ok"in
Чтобы компенсировать эту ошибку, вы можете добавить PREFIX к стартовым и заканчивающимся двойным кавычкам и впоследствии удалить его.
- name: PREFIX first and last escaped double quotes with 'KUCF' lineinfile: dest="/home/core/linetest" line="KUCF\"main\"KUCF" - name: remove 'KUCF' PREFIX replace: dest="/home/core/linetest" regexp="KUCF" replace=""
который должен дать вам
#/home/core/linetest "main"
Убедитесь, что выбранный PREFIX никогда не будет использоваться в контексте целевого файла. В общем, чем длиннее и более случайным PREFIX, тем меньше вероятность столкновения с существующим контентом в вашем целевом файле.
В качестве альтернативы вы можете обновить свой Ansible до последней ветки.
Если содержимое, подлежащее замещению, находится в переменной выше в playbook, кажется, что вам нужно избежать escape-символов вместо кавычек, что-то вроде этого
---
- hosts: tomcat
vars:
classpath: "CLASSPATH=\\\"$CATALINA_HOME/bin/foo.jar\\\""
tasks:
- lineinfile: dest="/tomcat/bin/setenv.sh" line="{{ classpath }}" state=present
заканчивается такой строкой в результирующем файле
CLASSPATH="$CATALINA_HOME/bin/foo.jar"
Просто следуйте за этим, приведенные выше примеры не работают для меня при попытке создать пакетный файл в окне Windows с использованием win_lineinfile. Файл создавался, строка вставлялась, но цитаты и обратные косые черты были отформатированы ужасно. Это было с невозможным 2.4. То, что я, наконец, закончил делать за предложение со стороны рабочих, было некоторым встроенным шаблоном jinja;
- name: insert our batch file contents
win_copy:
dest: C:\QAAutomation\files\posauto.bat
force: yes
content: |
{% raw %}"C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console.exe" "C:\QAAutomation\files\1POS Automation\Application Files\Bin\Automation.dll" > "c:\QAAutomation\results\nunit-console-output.txt" {% endraw %}