["x1", "x2"]
评估为append
是否可以执行["1x", "2x"]
之类的操作?我的意思是{{1}}。
答案 0 :(得分:2)
这是一个稍微丑陋但功能性的解决方案,可以为您提供[“1x”,“2x”]:
- name: Concat 'x' to each list element
debug:
msg: "{{ [1,2] | map('regex_replace', '(.*)', '\\1x') | list}}"
在ansible 2.4上测试。请注意,使用map('concat', 'x')
的初始示例对我来说不适用于ansible 2.4,我收到了关于“TemplateRuntimeError:没有名为'concat'的过滤器”的投诉。
答案 1 :(得分:0)
你可以试试这个:将list变量加入一个字符串,用regex操作它,然后将它重新拆分回一个列表变量。
剧本:
---
- hosts: localhost
gather_facts: false
vars:
- list_var:
- "1"
- "2"
- "3"
- "4"
tasks:
- set_fact:
manipulated_var: "{{ ( list_var | join(' ') | regex_replace('([0-9]{1})', '\\1x')).split(' ') }}"
- debug:
var: manipulated_var
输出:
[root@optima-ansible ILIAS]# ansible-playbook concat.yml
PLAY [localhost] ****************************************************************************************************************************************************************************************************
TASK [set_fact] *****************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"manipulated_var": [
"1x",
"2x",
"3x",
"4x"
]
}
PLAY RECAP **********************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
[root@optima-ansible ILIAS]#
请注意,此正则表达式将尝试匹配单个数字条目,因为您的示例建议[“1”,“2”,“3”]等。