我在ansible var中有一个字符串元素列表。我正在寻找如何使用定义的字符串附加到列表的每个元素。
你知道我该怎么办吗?我找不到办法。
输入:
[ "a", "b", "c" ]
输出:
[ "a-Z", "b-Z", "c-Z" ]
答案 0 :(得分:2)
您可以为此使用join
。请参见下面的代码:
剧本->
---
- hosts: localhost
vars:
input: [ "a", "b", "c" ]
tasks:
- name: debug
set_fact:
output: "{{ output | default([]) + ['-'.join((item,'Z'))] }}"
loop: "{{ input | list}}"
- debug:
var: output
输出->
PLAY [localhost] ********************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************
ok: [localhost]
TASK [debug] ************************************************************************************************************
ok: [localhost] => (item=a)
ok: [localhost] => (item=b)
ok: [localhost] => (item=c)
TASK [debug] ************************************************************************************************************
ok: [localhost] => {
"output": [
"a-Z",
"b-Z",
"c-Z"
]
}
PLAY RECAP **************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
答案 1 :(得分:2)
使用简单的过滤器
$ cat filter_plugins/string_filters.py
def string_prefix(prefix, s):
return prefix + s
def string_postfix(postfix, s):
return s + postfix
class FilterModule(object):
''' Ansible filters. Python string operations.'''
def filters(self):
return {
'string_prefix' : string_prefix,
'string_postfix' : string_postfix
}
以下任务
- set_fact:
output: "{{ input|map('string_prefix', '-Z')|list }}"
- debug:
var: output
给予:
"output": [
"a-Z",
"b-Z",
"c-Z"
]
相同的输出给出下面的循环
- set_fact:
output: "{{ output|default([]) + [item + '-Z'] }}"
loop: "{{ input }}"
- debug:
var: output
答案 2 :(得分:2)
我真的不喜欢使用附加过滤器或循环。然而,我偶然发现这篇博文 https://www.itix.fr/blog/ansible-add-prefix-suffix-to-list/ 使用了一种在 Ansible 2.9.x 中有效的不同方法。
- set_fact:
output: "{{ list_to_suffix | product(['-Z']) | map('join') | list }}"
答案 3 :(得分:0)
下面是如何在一行中完成前缀和后缀
- debug:
var: result
vars:
prefix: foo1
suffix: foo2
a_list: [ "bar", "bat", "baz" ]
result: "{{ [prefix] | product(a_list) | map('join') | list | product([suffix]) | map('join') | list }}"