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

时间:2017-01-19 09:10:56

标签: ansible jinja2

我在我的剧本中有这个:

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

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

如果我运行这个,我会收到此错误:

  

致命:[localhost]:失败! => {“失败”:真实,“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',你改变了:真的,你开始':你们2017-01-19 10:04: 27.481090',u'delta':u'0:00:00.010558',u'stderr':你','u'rc':0,'stdout_lines':[u'ecs-task-17-jenkins-ec8eccee8c9eb8e38f01' ],'uwarnings':[]}:模板错误,模板字符串:意外'。'。字符串:docker ps -f name = jenkins --format {{.Names}}“}

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

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

EDITED

像这样逃离{{

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

导致同样的错误。

1 个答案:

答案 0 :(得分:2)

这是Ansible 2.2.1中引入的问题:https://github.com/ansible/ansible/issues/20400。 在内部使用<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> <div class="tweetButtonLaytout"> <div id="buttonContainer"></div> <select id="TweetCounties" value="0"> <option value="0">Select Area</option> <option value="1">Dublin</option> <option value="2">Cavan</option> <option value="3">Wicklow</option> <option value="4">Galway</option> </select> </div>注册变量时会发生错误。

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

{{

重现错误的方法:

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