在调试与set_fact中使用相同的方法得到的输出不同。
- name: Get EC2 instances
ec2_instance_facts:
filters:
"tag:Name": "{{ item }}"
loop:
- value
- value
register: servers
- debug:
msg: "{{ item.instances | map(attribute='private_ip_address') | list }}"
loop: "{{ servers.results }}"
- name: Set the private IPs list
set_fact:
private_ips: "{{ item.instances | map(attribute='private_ip_address') | list }}"
loop: "{{ servers.results }}"
- debug:
var: private_ips
在初始ec2_instance_facts循环中,输出6个实例。在获取专用IP的调试循环期间,所有6个IP均被输出,尽管在2个单独的块中(我猜是从初始循环开始-在第一个块中输出2个,然后输出其余4个)。
但是,当使用set_fact时,我只能获得前2个IP。我想我正在使它变得比原来更困难,并且必须正确地使用第一个循环,但是我被卡住了。
答案 0 :(得分:0)
我认为可以将其关闭。我发现this answer是直接从this PR中提取的。由于提交的代码在Ansible 2.x中不再起作用,因此PR最终被关闭,并且解决方法(在答案中发布)被接受。
为清楚起见,答案基本上是,如果您使用循环运行set_fact,则需要将该事实传递给后续 set_fact,然后根据先前设置的事实创建一个列表,并通过通过map
jinja过滤器。
由于我的初始循环运行了2x,因此我现在有2个列表,但这是另一回事。