【发布时间】:2016-12-22 15:08:14
【问题描述】:
我有一本用于创建一些 EC2 实例然后用它们做一些事情的剧本。相关部分大致如下:
- name: create ec2 instances
ec2:
id: '{{ item.name }}'
instance_type: '{{ item.type }}'
register: ec2
with_items: '{{ my_instance_defs }}'
- name: wait for SSH
wait_for:
host: '{{ item.instances[0].private_ip }}'
port: 22
with_items: '{{ ec2.results }}'
这按预期工作,但我对item.instances[0].private_ip 表达式并不特别满意,部分原因是它在播放摘要中显示了非常大的对象。我希望with_items 部分只是一个 IP 地址数组,而不是一个对象数组,其中包含对象数组。在 Python 中,我会执行以下操作:
ips = [r['instances'][0]['private_ip'] for r in ec2['results']]
然后我会在第二个任务中使用with_items: '{{ ips }}'。
有没有办法在剧本的 YAML 中使用 J2 过滤器来做同样的事情?似乎http://docs.ansible.com/ansible/playbooks_filters.html#extracting-values-from-containers 可能会有所帮助,但我认为前提是我有一组键/索引/任何东西。
【问题讨论】: