首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jinja2中添加列表的引号(ansible)

在jinja2中添加列表的引号(ansible)
EN

Stack Overflow用户
提问于 2015-04-09 11:48:02
回答 9查看 37.9K关注 0票数 18

我在模板中有非常简单的行:

代码语言:javascript
复制
ip={{ip|join(', ')}}

我有ip的名单:

代码语言:javascript
复制
ip:
 - 1.1.1.1
 - 2.2.2.2
 - 3.3.3.3

但是应用程序需要带有引号的ip (ip='1.1.1.1','2.2.2.2')。

我可以这样做:

代码语言:javascript
复制
ip:
 - "'1.1.1.1'"
 - "'2.2.2.2'"
 - "'3.3.3.3'"

但它很丑。在ansible中添加列表中每个元素的引号有什么好方法吗?

谢谢!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2018-03-13 11:34:32

实际上,有一个非常简单的方法来实现这一点:

代码语言:javascript
复制
{{ mylist | map('quote') | join(', ') }}

过滤器map遍历每一项并让quote处理它。之后,您可以轻松地将它们放在一起join

票数 22
EN

Stack Overflow用户

发布于 2015-04-11 03:02:40

这将起作用:

代码语言:javascript
复制
ip={{ '\"' + ip|join('\", \"') + '\"' }}

一个自定义的过滤器插件也将工作。在ansible.cfg中取消注释filter_plugins并给它一个路径,我们在其中放置以下内容

代码语言:javascript
复制
def wrap(list):
    return [ '"' + x + '"' for x in list]

class FilterModule(object):
    def filters(self):
        return {
            'wrap': wrap
        }

在一个名为core.py的文件中。像这样。然后您可以简单地使用

代码语言:javascript
复制
ip|wrap|join(', ')

它应该生成逗号分隔的列表,每个ip都用引号包装。

票数 26
EN

Stack Overflow用户

发布于 2015-04-09 16:08:38

尝试:

代码语言:javascript
复制
- 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代码,这正是我在这里误用的地方。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29537684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档