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

标签 ansible jinja2

我的剧本里有这个:

- name: Get facts about containers
  shell: "docker ps -f name=jenkins --format {%raw%}{{.Names}}{% endraw %}"
  register: container

请注意,我插入了 {%raw%}{%endraw%} 这样 ansible 就不会评估 '{{'。

如果我运行它,我会得到这个错误:

fatal: [localhost]: FAILED! => {"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.010558', u'stderr': u'', u'rc': 0, 'stdout_lines': [u'ecs-task-17-jenkins-ec8eccee8c9eb8e38f01'], u'warnings': []}: template error while templating string: unexpected '.'. String: docker ps -f name=jenkins --format {{.Names}}"}

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

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

已编辑

像这样转义 {{:

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

导致同样的错误。

最佳答案

这是 Ansible 2.2.1 引入的问题:https://github.com/ansible/ansible/issues/20400 . 在使用 {{ 注册变量时发生。

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

shell: "docker inspect --format '{''{ .NetworkSettings.IPAddress }''}' consul"

重现错误的方法:

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

关于ansible - 在 ansible shell 命令中使用 {{ 和 }},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737809/

相关文章:

python - 如何在 jinja2 模板中调用不带参数的 python 函数

ansible - 如何在Jinja2中选择正则表达式匹配?

docker - 在AWS ec2实例中Docker上的Splunk安装失败

ansible - 如果使用 Ansible playbook 超过 15 个字符,则截断字符串

ansible - 用 ansible 替换字符串中的/by\

python - 如何在 Jinja2 宏中引发异常?

ansible - 使用 Jinja2 过滤器获取组中主机的 IP 列表

flask - Flask url_for 函数中的 Jinja 变量

python - 将参数传递给 Ansible 动态 list

ansible - "msg": "winrm or requests is not installed: No module named xmltodict"