Ansible技术问询:调试时如何仅打印EC2实例的所有安全组ID
如何在Ansible中仅提取并打印EC2实例的安全组ID?
你已经通过amazon.aws.ec2_instance_info模块拿到了EC2实例的完整信息,现在要从ec2_info.instances[0].security_groups这个包含group_name和group_id的字典列表里,只提取所有安全组的group_id,可以用Ansible的过滤器轻松实现,下面给你两种可行的方案:
方案1:使用map过滤器
map过滤器可以遍历列表中的每个元素,提取指定属性的值,再用list将结果转为标准列表格式。修改你的Playbook debug任务如下:
- name: Gather information about a particular instance using ID amazon.aws.ec2_instance_info: aws_access_key: "{{ aws_access_key }}" aws_secret_key: "{{ aws_secret_key }}" region: "ap-south-1" instance_ids: - i-08c7051b99bc69ba6 register: ec2_info - name: Print only Security Group IDs debug: msg: "Security Group IDs: {{ ec2_info.instances[0].security_groups | map(attribute='group_id') | list }}"
执行后,你会得到类似这样的简洁输出:
"msg": "Security Group IDs: ['sg-0500c5b20f7c152b4', 'sg-062178ea5fabaf350']"
方案2:使用json_query过滤器
如果你熟悉JMESPath表达式,json_query是处理复杂嵌套数据更灵活的选择:
- name: Gather information about a particular instance using ID amazon.aws.ec2_instance_info: aws_access_key: "{{ aws_access_key }}" aws_secret_key: "{{ aws_secret_key }}" region: "ap-south-1" instance_ids: - i-08c7051b99bc69ba6 register: ec2_info - name: Print only Security Group IDs using json_query debug: msg: "Security Group IDs: {{ ec2_info.instances[0].security_groups | json_query('[].group_id') }}"
这里的[].group_id是JMESPath表达式,含义是:遍历列表中的每一个字典元素,提取其中的group_id字段值,最终返回一个纯ID组成的列表。
两种方案都能精准满足你的需求,你可以根据自己的使用习惯选择~
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

