gpt4 book ai didi

ansible - Jinja2 和 ansible 制作子字典的问题

转载 作者:行者123 更新时间:2023-12-04 15:17:19 25 4
gpt4 key购买 nike

我需要读取具有不同 IP 的 csv 文件,并使用 jinja2 过滤器制作字典以根据 IPNumber 值修改 IP。 yml 文件是这样的:

- read_csv:
path: vms.csv
key: Number
fieldnames: Name,IP1,IP2,IP3,IP4,IPNumber
delimiter: ';'
register: vms

- name: vms to dict
debug:
msg:
- {{'Name':{{ item.value.Name }},
{% if item.value.IPNumber == "1" %}
'IP':{{ item.value.IP1 }},
{% endif %}
{% if item.value.IPNumber == "2"%}
'IP':{{ item.value.IP2 }},
{% endif %}
{% if item.value.IPNumber == "3"%}
'IP':{{ item.value.IP3 }},
{% endif %}
{% if item.value.IPNumber == "4"%}
'IP':{{ item.value.IP4 }},
{% endif %}}}
loop: "{{ vms.dict | dict2items }}"
register: vms2

但是我得到了错误:

The error appears to be in '/etc/ansible/roles/vms.yml': line 17, column 16, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

'Name':{{ item.value.Name}},
{% if item.value.IPNumber == "1" %}
^ here

我知道是语法问题,但我猜不出问题出在哪里。

我需要一些帮助。

最佳答案

以下任务应根据您的要求在您可以在其他地方重用的 var 中创建您的字典。将 my_ip_dict 重命名为更适合您项目的名称。

- name: Create my IP dictionary
set_fact:
my_ip_dict: >-
{{
my_ip_dict | default({})
| combine({item.value.Name: item.value['IP' + item.value.IPNumber]})
}}
loop: "{{ vms.dict | dict2items }}"

- name: Check the result:
debug:
var: my_ip_dict

请注意,我根据 IPNumber 直接调用正确的字段,从而删除了所有 if/else 结构。我理所当然地认为它总是在有效范围内或其他现有的 IP* 字段中具有值。如果不是这种情况,您始终可以默认该值,例如item.value['IP' + item.value.IPNumber] |默认('不适用')

关于ansible - Jinja2 和 ansible 制作子字典的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64101438/

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