如何用jq将TeemIP IPAM的PC数据转换为Kea DHCP预留格式
使用jq将TeemIP PC设备数据转换为Kea DHCP预留配置
解决方案
先明确核心逻辑:筛选TeemIP中的PC设备,将字段映射为Kea DHCP要求的格式,最终生成包含reservations数组的配置结构。
假设的原始TeemIP输入结构
如果你的数据是类似下面的格式(可根据实际结构调整jq表达式):
{ "objects": [ { "class": "PC", "ip_address": "192.168.1.10", "mac_address": "aa:bb:cc:dd:ee:ff", "hostname": "desktop-01" }, { "class": "PC", "ip_address": "192.168.1.11", "mac_address": "ff:ee:dd:cc:bb:aa", "hostname": "desktop-02" } ] }
目标Kea DHCP输出格式
{ "reservations": [ { "hw-address": "aa:bb:cc:dd:ee:ff", "ip-address": "192.168.1.10", "hostname": "desktop-01" }, { "hw-address": "ff:ee:dd:cc:bb:aa", "ip-address": "192.168.1.11", "hostname": "desktop-02" } ] }
可用的jq命令
jq '{reservations: [.objects[] | select(.class == "PC") | { "hw-address": .mac_address, "ip-address": .ip_address, "hostname": .hostname }]}' input.json > output.json
命令拆解
{reservations: [...]}:构建Kea要求的顶层JSON结构,核心是reservations数组.objects[]:遍历TeemIP返回的所有设备对象select(.class == "PC"):只保留PC类设备,过滤其他类型{ "hw-address": .mac_address, ... }:将TeemIP的字段名映射为Kea的标准字段名
适配自定义结构
如果你的原始JSON结构不同:
- 若设备数组不在
objects下,替换为实际的数组路径(比如.data.devices[]) - 若字段名不一致(比如TeemIP用
mac而非mac_address),修改映射的字段名即可
内容的提问来源于stack exchange,提问作者Aas
相关产品推荐
相关产品推荐

