You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 }}"

逻辑说明

  1. 执行命令:通过command模块运行ip -s -s link show,将输出结果存入ip_link_result变量。
  2. 解析输出:
    • 匹配以数字:开头的行,提取接口名称(如lo、eth0),并在字典中初始化对应值。
    • 匹配包含RX errors:.*crc的行,标记下一行即为CRC数值所在行。
    • 读取标记行的下一行,分割字符串取第二个字段(对应CRC列的数值),更新字典中接口的对应值。
  3. 输出结果:将字典转为列表后循环,打印每个接口的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:32:29