在ansible shell命令中使用{{和}}

在ansible shell命令中使用{{和}},ansible,jinja2,Ansible,Jinja2,我的剧本里有这样的内容: - name: Get facts about containers shell: "docker ps -f name=jenkins --format {%raw%}{{.Names}}{% endraw %}" register: container 注意,我插入了{%raw%}和{%endraw%},这样ansible就不会计算“{{” 如果运行此操作,则会出现以下错误: 致命:[localhost]:失败!=>{FAILED]:true,“msg”:

我的剧本里有这样的内容:

- name: Get facts about containers
  shell: "docker ps -f name=jenkins --format {%raw%}{{.Names}}{% endraw %}"
  register: container
注意,我插入了
{%raw%}
{%endraw%}
,这样ansible就不会计算“{{”

如果运行此操作,则会出现以下错误:

致命:[localhost]:失败!=>{FAILED]:true,“msg”:“{u'cmd”:u'docker ps-f name=jenkins--format{{.Names}',u'end”:u'2017-01-19 10:04:27.491648',u'stdout':u'ecs-sde-abn-17-jenkins-ec8eccee8c9eb8e38f01',u'changed':true,u'start':u'2017-01-19 10:04:27.481090',u'delta':u'0:00:00:00:010558',u'stu':u'deru'src':u'stu't''[u'ecs-task-17-jenkins-ec8eccee8c9eb8e38f01'],u'warnings':[]}:模板化字符串时出现模板错误:意外“.”。字符串:docker ps-f name=jenkins--format{{.Names}

换句话说,命令成功运行(输出ecs-task-17-jenkins-ec8ecee8c9eb8e38f01是正确的),但它再次尝试模板字符串

这里出了什么问题,我该如何解决

已编辑

像这样转义
{

shell: "docker ps -f name=jenkins --format {{ '{' }}{.Names}{{ '}' }}"

导致相同的错误。

这是Ansible 2.2.1中引入的问题:。 在
{{
内部注册变量时发生

解决方法防止注册变量中出现
{{

shell: "docker inspect --format '{''{ .NetworkSettings.IPAddress }''}' consul"
复制错误的方法:

- hosts: localhost
  gather_facts: no
  tasks:
    - shell: "echo '{''{.Names}''}'"
      register: myvar    
    - debug: var=myvar

@techraf的可能重复项在答案中添加了代码示例。除非您触摸
myvar
一切正常(注释掉
debug
),否则当您尝试使用
myvar
时,它会失败。@techraf是的,因为它会回显结果的
stdout
键中弹出的
{.Names}
(将echo重定向到文件,一切都会好起来。)对于OP任务,我的解决方法是有效的,因为没有带双大括号的输出,
cmd
key具有防止注册变量中出现双大括号的技巧。