比方说,我有一个服务器列表和一个目录列表:
servers:
- server1:
ip: 1.1.1.1
- server2:
ip: 2.2.2.2
directories:
- path: /backupF/s1
name: bmma
server: server1
- path: /backupM/s2
name: cqce
server: server1
- path: /backupM/s3
name: cqce
server: server2
我现在想使用这样的数据:
- name: write wonderful config file
lineinfile:
dest: /testfile
line: "/go.sh {{ item.path }} {{ servers[item.server].ip }}"
with_items: "{{ directories }}"
不幸的是,这不起作用 . 我可以通过索引访问with_items循环中的服务器:
line: "/go.sh {{ item.path }} {{ servers[0].ip }}"
......但不是通过它的名字:
line: "/go.sh {{ item.path }} {{ servers[server1].ip }}"
有可能吗?
1 回答
您的问题是您的服务器变量当前是一个有序数组,即具有项目0,1,2等,但您真正想要的是字典 . Arrays vs dicts仍然让我感到困惑,直到今天,我一直愤怒地使用Ansible 18个月 .
看看你的最终目标,我认为你要做的是产生如下行:
如果是这种情况,您需要做的就是将您的服务器变量重构为dict而不是数组(注意缺少连字符和ip上的额外缩进):
调试是你的朋友 . 我不想输出文件中的任何实际行,我将您的任务更改为:
这会产生以下结果: