gpt4 book ai didi

ansible - 获取 csv 列表并使用序列对其进行迭代

转载 作者:行者123 更新时间:2023-12-05 01:53:18 25 4
gpt4 key购买 nike

我有一个剧本,它从用户那里获取一个逗号分隔值的输入列表:

a,b,c,d

然后使用split将它变成一个列表(extra_hosts是存储用户输入的变量)

- name: Generate hosts list
set_fact:
hosts_list: []

- name: Build hosts list
set_fact:
san_list: "{{ hosts_list + [host] }}"
loop_control:
loop_var: host
with_items: "{{ extra_hosts | split(',') }}"

目前为止一切正常。如果此时我调试,我会得到:

ok: [localhost] => {
"msg": [
"a",
"b",
"c",
"d"
]
}

我现在要做的是输出到一个文件中,列表格式为:

Host 1: a
Host 2: b
Host 3: c
Host 4: d

我可以轻松地遍历列表并使用它输出:

- name: Append hosts to file
lineinfile:
path: "hosts.conf"
line: "Host: {{ host }}"
loop_control:
loop_var: host
with_items: "{{ hosts_list }}"

然而,这输出(显然)为:

Host: a
Host: b
Host: c
Host: d

但我不认为我可以用两个变量进行迭代(第二个是 sequence 模块),所以我不能做类似的事情:

- name: Append hosts to file
lineinfile:
path: "hosts.conf"
line: "Host: {{ host }}"
loop_control:
loop_var: host
with_items: "{{ hosts_list }}"
loop_control:
loop_var: id
with_sequence: start=1

我在想也许能以某种方式将列表转换成字典,所以我最终会得到类似这样的东西:

{id: 1, host: "a"},
{id: 2, host: "b"},
{id: 3, host: "c"},
{id: 4, host: "d"}

然后我就可以使用像 {{ item.id }}{{ item.host }} 这样的东西来写出来——但是构建dict,我仍然需要使用两个指针进行迭代——一个增量值,以及列表中的指针。

我有什么办法可以做到这一点,最好/正确的做法是什么?

最佳答案

例如,如果未定义extra_hosts,下面的任务将被跳过

    - copy:
dest: hosts.conf
content: |-
{% for i in extra_hosts.split(',') %}
Host {{ loop.index }}: {{ i }}
{% endfor %}
when: extra_hosts|d('')|length > 0

如果定义了变量 extra_hosts(例如 -e extra_hosts='a,b,c,d'),任务将创建文件 hosts。 session

shell> cat hosts.conf 
Host 1: a
Host 2: b
Host 3: c
Host 4: d

关于ansible - 获取 csv 列表并使用序列对其进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71124342/

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