如何将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')}}”
也不起作用。谢谢