繁体   English   中英

如何将jinja2过滤器应用于ansible列表项?

[英]How to apply jinja2 filter to ansible list items?

我只是想遍历字符串列表并替换文本。 但是当我这样做时:

----
- hosts: all
  tasks:
  - debug: msg= {{ item | replace('a','b') }}
    with_items:
      - 'apple'
      - 'banana'
      - 'cookie'
      - 'dad'

输出是

ok: [host] => (item=apple) => {
    "item": "apple", 
    "msg": ""
}
ok: [host] => (item=banana) => {
    "item": "banana", 
    "msg": ""
}
ok: [host] => (item=cookie) => {
    "item": "cookie", 
    "msg": ""
}
ok: [host] => (item=dad) => {
    "item": "dad", 
    "msg": ""
}

我期望字母“ a”的所有实例都将替换为“ b”。 我知道如果我仅使用{{'a'| 替换( 'A', 'B')}}。 那么列表处理有什么不同?

我想做的是解析文件,在某些行上对内容进行一些操作,然后根据所操作的内容执行命令。

我可以很轻松地在bash脚本中完成所有这些操作,但是想知道ansible脚本中如何/是否可行。

真的很接近要运行它。

首先, debug有点麻烦。 如果调试行上有jinja代码,则该代码必须位于msg=参数内,并且不会在“任务名称”行上正确显示。 因此,“苹果”和“香蕉”将始终像第一行一样。

其次,正确引用事物很重要。 如果您引用了{{jinja}}或删除了空格,那就可以了。 换一种说法:

# bad
msg= {{jinja}}
# good
msg={{jinja}}
msg="{{jinja}}"

这是使代码正常工作所需的唯一更改。 这是代码:

- hosts: all
  tasks:
  - debug: msg={{ item | replace('a','b') }}
    with_items:
      - 'apple'
      - 'banana'
      - 'cookie'
      - 'dad'

这是输出:

TASK: [debug msg={{ item | replace('a','b') }}] ******************************* 
ok: [localhost] => (item=apple) => {
    "item": "apple",
    "msg": "bpple"
}
ok: [localhost] => (item=banana) => {
    "item": "banana",
    "msg": "bbnbnb"
}
ok: [localhost] => (item=cookie) => {
    "item": "cookie",
    "msg": "cookie"
}
ok: [localhost] => (item=dad) => {
    "item": "dad",
    "msg": "dbd"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM