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

如何从OHAI中提取实例引导时网卡的子网掩码?

从Ohai输出中提取子网掩码的方法

嘿,搞定这个其实挺简单的,分两种常见场景给你说:

1. 在Chef Recipe中提取(最常用的场景)

Ohai收集到的系统数据会自动注入到Chef的node属性里,你可以直接用Ruby代码在Recipe里获取目标网卡的子网掩码:

比如你要提取ens5网卡的IPv4子网掩码,可以这么写:

# 筛选出ens5网卡下所有IPv4地址,取第一个的netmask
target_netmask = node['network']['interfaces']['ens5']['addresses'].select do |addr, details|
  details['family'] == 'inet' # 只保留IPv4地址
end.values.first['netmask']

# 验证输出
Chef::Log.info("实例ens5网卡的子网掩码是: #{target_netmask}")

如果你的实例有多个IPv4地址,或者需要遍历所有非回环网卡的子网掩码,可以调整代码遍历interfaces下的所有条目,跳过lo回环接口就行。

2. 命令行直接解析Ohai输出

Ohai默认会输出JSON格式的数据,所以可以用jq这个轻量的JSON解析工具直接提取,非常适合快速验证:

提取指定网卡(比如ens5)的IPv4子网掩码:

ohai network | jq '.interfaces.ens5.addresses | to_entries[] | select(.value.family == "inet") | .value.netmask'

提取所有非回环网卡的IPv4子网掩码(带对应IP地址):

ohai network | jq '.interfaces | to_entries[] | select(.key != "lo") | .value.addresses | to_entries[] | select(.value.family == "inet") | "\(.key) 对应的子网掩码: \(.value.netmask)"'

小贴士:不同系统的网卡命名可能不一样(比如有些是eth0而不是ens5),你可以先运行ohai network | jq '.interfaces'查看所有网卡名称,再调整命令或代码里的网卡标识。

内容的提问来源于stack exchange,提问作者TyMac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:31