我在模板中有非常简单的行:
ip={{ip|join(', ')}}我有ip的名单:
ip:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3但是应用程序需要带有引号的ip (ip='1.1.1.1','2.2.2.2')。
我可以这样做:
ip:
- "'1.1.1.1'"
- "'2.2.2.2'"
- "'3.3.3.3'"但它很丑。在ansible中添加列表中每个元素的引号有什么好方法吗?
谢谢!
发布于 2018-03-13 11:34:32
实际上,有一个非常简单的方法来实现这一点:
{{ mylist | map('quote') | join(', ') }}过滤器map遍历每一项并让quote处理它。之后,您可以轻松地将它们放在一起join。
发布于 2015-04-11 03:02:40
这将起作用:
ip={{ '\"' + ip|join('\", \"') + '\"' }}一个自定义的过滤器插件也将工作。在ansible.cfg中取消注释filter_plugins并给它一个路径,我们在其中放置以下内容
def wrap(list):
return [ '"' + x + '"' for x in list]
class FilterModule(object):
def filters(self):
return {
'wrap': wrap
}在一个名为core.py的文件中。像这样。然后您可以简单地使用
ip|wrap|join(', ')它应该生成逗号分隔的列表,每个ip都用引号包装。
发布于 2015-04-09 16:08:38
尝试:
- hosts: localhost
tags: s20
gather_facts: no
vars:
ip:
- 1.1.1.1
- 2.2.2.2
- 3.3.3.3
joined_ip: "'{{ \"', '\".join(ip)}}'"
tasks:
- debug: msg="(ip={{joined_ip}})"PS: ansible支持在{{}}中执行一些python代码,这正是我在这里误用的地方。
https://stackoverflow.com/questions/29537684
复制相似问题