如何在Red Hat机器上用Ansible提取ip命令输出的CRC计数
提取网络接口CRC计数的Ansible Playbook方案
直接用Ansible的正则匹配与循环逻辑就能解决这个问题,以下是可直接运行的Playbook示例:
- name: 获取网络接口CRC错误计数 hosts: your_redhat_hosts tasks: - name: 执行ip命令获取接口统计数据 command: ip -s -s link show register: ip_link_result - name: 解析接口名称与对应CRC值 set_fact: iface_crc_stats: >- {% set stats = {} %} {% set current_iface = "" %} {% set capture_crc = false %} {% for line in ip_link_result.stdout_lines %} {% if line matches '^\d+: \w+:' %} {% set current_iface = line.split(':')[1].strip() %} {% do stats.update({current_iface: 0}) %} {% elif line matches '^\s+RX errors:.*crc' %} {% set capture_crc = true %} {% elif capture_crc %} {% set crc_num = line.split()[1] %} {% do stats.update({current_iface: crc_num}) %} {% set capture_crc = false %} {% endif %} {% endfor %} {{ stats }} - name: 打印各接口CRC错误计数 debug: msg: "接口 {{ item.key }} 的CRC错误数: {{ item.value }}" loop: "{{ iface_crc_stats | dict2items }}"
逻辑说明
- 执行命令:通过
command模块运行ip -s -s link show,将输出结果存入ip_link_result变量。 - 解析输出:
- 匹配以
数字:开头的行,提取接口名称(如lo、eth0),并在字典中初始化对应值。 - 匹配包含
RX errors:.*crc的行,标记下一行即为CRC数值所在行。 - 读取标记行的下一行,分割字符串取第二个字段(对应CRC列的数值),更新字典中接口的对应值。
- 匹配以
- 输出结果:将字典转为列表后循环,打印每个接口的CRC错误计数。
测试结果
针对你提供的stdout_lines数据,执行后会输出:
ok: [target_host] => (item={'key': 'lo', 'value': '0'}) => { "msg": "接口 lo 的CRC错误数: 0" } ok: [target_host] => (item={'key': 'eth0', 'value': '0'}) => { "msg": "接口 eth0 的CRC错误数: 0" }
内容的提问来源于stack exchange,提问作者amitk
相关产品推荐
相关产品推荐

