Jinja2和ansible生成子目录的问题
我需要读取一个具有不同IP的csv文件,并制作一个带有jinja2过滤器的字典,用于根据IPNumber值修改IP。yml文件类似于:Jinja2和ansible生成子目录的问题,ansible,yaml,jinja2,Ansible,Yaml,Jinja2,我需要读取一个具有不同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
- 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
我知道这是个语法问题,但我猜不出问题出在哪里
我需要一些帮助。您应该只在
{{
或{%
中放置变量/表达式。对我来说,'Name'
看起来像普通文本,应该在外部
例如:
#注意调试消息开头和结尾的引号``符号
-调试:
味精:
-“名称:{{item.value.Name}},
{%if item.value.IPNumber==“1”%}
IP:{{item.value.IP1}}
#等等。。。
{%endif%}”
这至少应该解决错误消息。以下任务应该根据您的要求在var中创建字典,您可以在其他地方重用。重命名
my\u ip\u dict
,以使其更适合您的项目
-name:创建我的IP字典
设定事实:
我的遗嘱:>-
{{
my_ip_dict|默认值({})
|组合({item.value.Name:item.value['IP'+item.value.IPNumber]})
}}
循环:{vms.dict | dict2items}”
-名称:检查结果:
调试:
var:我的遗嘱
请注意,通过根据IPNumber
直接调用正确的字段,我删除了所有if/else结构。我想当然地认为它总是在有效范围内或其他现有IP*
字段中有一个值。如果不是这样,您可以始终默认该值,例如item.value['IP'+item.value.IPNumber]|默认值('N/A')