ansible 1.9.4 ignoring escaped double quotes with lineinfile?

I know this has been a bug in the recent past, but I’m running into this with Ansible 1.9.4 on FreeBSD.

  • name: update loader.conf
    lineinfile: dest={{ item.dest }} regexp={{ item.regexp }} line={{ item.line}} state={{ item.state }} backup={{ item.backup }} create={{ item.create }}
    with_items:
  • { dest: “/boot/loader.conf”, regexp: “^vmm_load”, line: “vmm_load="YES"”, state: “present”, backup: “no”, create: “yes” }

Obviously I’m wanting the result to be:
vmm_load=“YES”

However the actual result is:
vmm_load=YES

I do see that the following does work as expected (note removed quotes):

  • name: update loader.conf
    lineinfile: dest={{ item.dest }} regexp={{ item.regexp }} line={{ item.line}} state={{ item.state }} backup={{ item.backup }} create={{ item.create }}
    with_items:
  • { dest: “/boot/loader.conf”, regexp: “^vmm_load”, line: vmm_load="YES", state: “present”, backup: “no”, create: “yes” }

Am I incorrectly placing double quotes around everything in my dict, or is ansible failing to handle yaml like it should?

Any thoughts?

In 1.9.4, you'll need to use
- { dest: "/boot/loader.conf", regexp: "^vmm_load", line:
vmm_load=\\\"YES\\\", state: "present", backup: "no", create: "yes" }

(three backslashes).

In 2.0 we fixed this so that \" will work correctly there.

Quoting and escaping is tricky inside of the ansible code because we
use yaml to parse the playbook and then jinja2 to substitute
variables. We try to abstract that away but sometimes it leaks out
and you end up having to escape for both of the parsers. Hopefully we
fixed most of those in 2.0.

-Toshio

thank you for the explanation