如何在Ansible中从iDrac模块输出注册RAID控制器插槽变量?
正确注册变量与提取RAID控制器PCI信息方案
一、修正Register的使用错误
register是Ansible的任务级关键字,不能作为模块参数传入,必须与模块声明同级放置。正确的Playbook结构如下:
- name: 从iDRAC获取硬件信息 hosts: idrac_targets gather_facts: no tasks: - name: 调用iDRAC系统信息模块 dellemc.openmanage.idrac_system_info: idrac_ip: "{{ idrac_ip }}" idrac_user: "{{ idrac_user }}" idrac_password: "{{ idrac_password }}" validate_certs: no register: hardware_info # 正确位置:与模块平级,作为任务属性
二、提取RAID控制器的PCI相关字段
模块返回的RAID控制器数据存于hardware_info.system_info.Controllers列表中,可通过两种方式过滤提取DeviceDescription、Key等字段:
方式1:用json_query批量提取
- name: 批量输出RAID控制器PCI信息 debug: msg: "{{ hardware_info.system_info.Controllers | json_query('[?ControllerType==`RAID`].{设备描述: DeviceDescription, PCI_Key: Key}') }}"
方式2:循环遍历过滤输出
- name: 逐个输出RAID控制器PCI信息 debug: msg: "设备描述: {{ item.DeviceDescription }}, PCI Key: {{ item.Key }}" loop: "{{ hardware_info.system_info.Controllers }}" when: item.ControllerType == "RAID"
三、优化模块执行速度
默认情况下模块会拉取全量硬件信息,导致执行缓慢。可通过command参数指定仅获取控制器数据,大幅减少数据传输量:
- name: 仅获取控制器信息(提速) dellemc.openmanage.idrac_system_info: idrac_ip: "{{ idrac_ip }}" idrac_user: "{{ idrac_user }}" idrac_password: "{{ idrac_password }}" validate_certs: no command: "Controllers" # 限定只拉取控制器相关数据 register: controller_info
后续提取逻辑不变,直接使用controller_info.system_info.Controllers即可。
内容的提问来源于stack exchange,提问作者VmeansVendetta
相关产品推荐
相关产品推荐

