gpt4 book ai didi

ansible - 如何在 Ansible 中加入字符串列表?

转载 作者:行者123 更新时间:2023-12-03 23:16:43 24 4
gpt4 key购买 nike

在 Ansible 中,我有一个字符串列表,我想将这些字符串与换行符连接起来以创建一个字符串,该字符串在写入文件时会变成一系列行。但是,当我使用 join() 过滤器时,它适用于内部列表,即字符串中的字符,而不适用于外部列表,即字符串本身。这是我的示例代码:

# Usage: ansible-playbook tst3.yaml --limit <GRP>
---
- hosts: all
remote_user: root

tasks:

- name: Create the list
set_fact:
my_item: "{{ item }}"
with_items:
- "One fish"
- "Two fish"
- "Red fish"
- "Blue fish"
register: my_item_result

- name: Extract items and turn into a list
set_fact:
my_list: "{{ my_item_result.results | map(attribute='ansible_facts.my_item') | list }}"

- name: Examine the list
debug:
msg: "{{ my_list }}"

- name: Concatenate the public keys
set_fact:
my_joined_list: "{{ item | join('\n') }}"
with_items:
- "{{ my_list }}"

- name: Examine the joined string
debug:
msg: "{{ my_joined_list }}"

我想获得如下所示的输出:
One fish
Two fish
Red fish
Blue Fish

我得到的是:
TASK: [Examine the joined string] *********************************************
ok: [hana-np-11.cisco.com] => {
"msg": "B\nl\nu\ne\n \nf\ni\ns\nh"
}
ok: [hana-np-12.cisco.com] => {
"msg": "B\nl\nu\ne\n \nf\ni\ns\nh"
}
ok: [hana-np-13.cisco.com] => {
"msg": "B\nl\nu\ne\n \nf\ni\ns\nh"
}
ok: [hana-np-14.cisco.com] => {
"msg": "B\nl\nu\ne\n \nf\ni\ns\nh"
}
ok: [hana-np-15.cisco.com] => {
"msg": "B\nl\nu\ne\n \nf\ni\ns\nh"
}

如何正确连接字符串列表和换行符?

最佳答案

解决方案
join过滤器适用于列表,因此将其应用于您的列表:

- name: Concatenate the public keys
set_fact:
my_joined_list: "{{ my_list | join('\n') }}"

解释

my_list在您的示例中是一个列表,当您使用 with_items , 在每次迭代中 item是一个字符串。字符串被视为字符列表,因此 join split 他们。

就像在任何语言中一样:当你有一个循环时 for i in (one, two, three)并引用 i在循环内部,每次迭代只能得到一个值,而不是整个集合。

备注
  • 不要使用 debug模块,但 copycontent拥有\n呈现为换行符。
  • 创建列表的方式非常麻烦。您所需要的只是(也不需要引号):
    - name: Create the list
    set_fact:
    my_list:
    - "One fish"
    - "Two fish"
    - "Red fish"
    - "Blue fish"
  • 关于ansible - 如何在 Ansible 中加入字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47244834/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com