YANG建模语言bits类型如何实现选中单选项自动取消其余位的互斥效果
YANG bits类型互斥选中效果实现方案
YANG标准中bits类型原生支持多bit位同时选中,没有内置自动取消其他位的互斥逻辑,你需要实现的「Whole-platform与其他位二选一」的效果,可通过以下两种方案实现:
方案1:保留bits类型,新增
must约束做合法性校验
该方案可以在不改动原有数据类型的前提下,限制用户提交非法的同时选中配置,违反规则的配置会被服务端直接拦截报错,参考实现代码如下:leaf check-type { type bits { bit Whole-platform; bit NSO-checks; bit ESC-checks; } default "Whole-platform"; // 新增约束:禁止同时选中Whole-platform和其他任意位 must "not (bits-is-set(., 'Whole-platform') and count(bits-all-set(.)[. != 'Whole-platform']) > 0)" { error-message "Whole-platform cannot be selected together with other check types"; } }注意:该方案仅做校验,不会自动修改配置。要实现「选中某类后自动取消其他位」的交互效果,需要在上层客户端/网管平台的配置提交逻辑中增加预处理:如果检测到提交的配置包含
Whole-platform,就自动清空其他位;如果提交的配置包含其他位且没有指定保留Whole-platform,就自动清除Whole-platform位后再提交给服务端。如果你的业务允许同时选中多个非Whole-platform的位,该方案更为适配。方案2:替换为enumeration枚举类型(适配纯单选场景)
如果你的需求本质是同一时间只能选择一种检查类型,直接将bits类型替换为枚举类型是成本最低的方案,YANG原生支持单选逻辑,选中新值会自动覆盖旧值,完全符合你的预期效果,不需要额外开发约束和业务逻辑,参考实现代码如下:leaf check-type { type enumeration { enum Whole-platform; enum NSO-checks; enum ESC-checks; } default Whole-platform; }
内容的提问来源于stack exchange,提问作者marhyno
相关产品推荐
相关产品推荐

