在ansible lineinfile中引用

eld*_*dos 15 ansible ansible-playbook

当我lineinfile在ansible中使用它不是写字',"字符 lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'

它是给予,CACHES=default 但所需的输出是CACHES="default"

怎么做到这一点?

ted*_*r42 19

看来你可以逃脱报价:

- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\""
Run Code Online (Sandbox Code Playgroud)

这给出了这个输出:

$ cat /tmp/xyz
CACHES="default"
Run Code Online (Sandbox Code Playgroud)

您不需要转义双引号内的单引号:

- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\" foo='x'"
cat /tmp/xyz
CACHES="default" foo='x'
Run Code Online (Sandbox Code Playgroud)

来源:YAML规范,stackoverflow答案


Lor*_*uma 5

Ansible 1.9.2包含一个错误(https://github.com/ansible/ansible/issues/10864),该错误无法在行的开头或结尾插入转义的双引号。

例如,以下

-名称:/ home / core / linetest
  lineinfile:dest =“ / home / core / linetest” line =“ \” ma \“ ok \” in \“”

会导致缺少第一个和最后一个双引号(即使您对其进行了转义)。

#/ home / core / linetest
ma“ ok”在

为了弥补此错误,您可以在开始和结束的双引号中添加一个PREFIX,然后将其删除。

-名称:PREFIX使用'KUCF'首先和最后转义的双引号
  lineinfile:dest =“ / home / core / linetest” line =“ KUCF \” main \“ KUCF”

-名称:删除“ KUCF”前缀
  替换:dest =“ / home / core / linetest” regexp =“ KUCF”替换=“”

这应该给你

#/ home / core / linetest
“主要”

确保您选择的PREFIX不会在目标文件的上下文中使用。通常,PREFIX越长越随机,它与目标文件中现有内容发生冲突的可能性就越小。

或者,您可以将Ansible升级到最新分支。