Ansible高效筛选支持FSxN的已启用AWS区域方案
最优实现方式:批量获取区域信息并取交集
不需要通过循环任务逐个检查区域,直接通过两次调用获取数据,再用Ansible过滤器计算交集,既高效又不会产生跳过日志:
- 获取当前AWS账号已启用的所有区域
- name: 获取账号已启用的AWS区域 amazon.aws.aws_region_info: register: enabled_regions
- 获取AWS官方支持FSx for NetApp ONTAP的区域列表
- name: 获取支持FSxN的区域列表 command: aws fsx describe-regions --query 'Regions[?SupportsFSxONTAP==`true`].RegionName' register: fsxn_supported_raw
- 计算两者的交集,得到目标区域数组
- name: 生成已启用且支持FSxN的区域数组 set_fact: enabled_fsxn_regions: >- {{ enabled_regions.regions | map(attribute='name') | list | intersect(fsxn_supported_raw.stdout | from_json) }}
这种方式仅需两次调用,避免了循环遍历所有区域的开销,也不会产生大量跳过日志。
若坚持使用循环任务:屏蔽跳过日志的方法
如果必须保留循环检查的逻辑,可通过以下方式屏蔽该任务的跳过日志:
方法1:设置任务级别的日志 verbosity
在Ansible 2.10及以上版本,可给任务添加verbosity参数,将该任务的日志级别设为0(默认全局日志级别为0时不会显示跳过日志),即使全局启用了-v等更高日志级别,该任务的跳过信息也不会输出:
- name: 循环检查区域是否支持FSxN amazon.aws.aws_fsx_info: region: "{{ item }}" register: fsxn_check when: item in enabled_regions_list loop: "{{ all_aws_regions }}" loop_control: label: "{{ item }}" # 简化循环输出,仅显示区域名 verbosity: 0
方法2:使用循环控制隐藏跳过详情
通过loop_control的label简化输出,同时结合no_log(注意:会屏蔽该任务的所有日志,包括成功结果,仅适合不需要查看该任务任何输出的场景):
- name: 循环检查区域是否支持FSxN amazon.aws.aws_fsx_info: region: "{{ item }}" register: fsxn_check when: item in enabled_regions_list loop: "{{ all_aws_regions }}" loop_control: label: "{{ item }}" no_log: true
内容的提问来源于stack exchange,提问作者kcantrel
相关产品推荐
相关产品推荐

