如何将jinja2筛选器应用于ansible列表项?

如何将jinja2筛选器应用于ansible列表项?,jinja2,ansible,Jinja2,Ansible,我只是想在字符串列表上循环并替换文本。但当我这么做的时候: ---- - hosts: all tasks: - debug: msg= {{ item | replace('a','b') }} with_items: - 'apple' - 'banana' - 'cookie' - 'dad' 输出刚刚好 ok: [host] => (item=apple) => { "item": "apple",

我只是想在字符串列表上循环并替换文本。但当我这么做的时候:

----
- 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'| replace('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"
}

我想我也用引号试过了,结果是在msg=之后仍然有空格,所以
msg=“{{item | replace('a','b')}}”
也不起作用。谢谢