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

如何定义YANG模型List以支持不同键及空键适配CLI需求

适配CLI命令「member instance [template | ]」的YANG模型解决方案

针对你遇到的List空键、双非强制List键无效的问题,推荐以下两种可行的解决方案,无需依赖List结构即可适配三种CLI形式:

方案一:使用Choice互斥分支(最直观适配CLI逻辑)

利用YANG的choice结构实现两种实例选择方式的互斥,同时通过默认值处理member instance等效于member instance template default的场景。

YANG代码示例

container member {
  container instance {
    choice instance-selector {
      // 默认选中template分支,匹配无参数的member instance命令
      default "template";
      
      case template {
        leaf name {
          type string;
          // 默认值设为default,自动补全等效逻辑
          default "default";
        }
      }
      
      case instance-id {
        leaf id {
          type uint32;
        }
      }
    }
  }
}

适配逻辑说明

  • 输入member instance:自动触发choice默认分支template,且name自动填充默认值default,完全等效于member instance template default
  • 输入member instance template <name>:选中template分支,覆盖name的默认值为指定名称
  • 输入member instance <id>:选中instance-id分支,设置对应的id值

方案二:枚举类型+When约束+Must校验

通过枚举类型标记实例选择类型,结合when控制字段可见性,must保证互斥合法性,同样支持默认场景。

YANG代码示例

container member {
  container instance {
    leaf instance-type {
      type enumeration {
        enum template;
        enum instance-id;
      }
      // 默认使用template类型,匹配无参数命令
      default "template";
    }

    leaf template-name {
      type string;
      default "default";
      // 仅当类型为template时可见
      when "../instance-type = 'template'";
    }

    leaf instance-id {
      type uint32;
      // 仅当类型为instance-id时可见
      when "../instance-type = 'instance-id'";
    }

    // 校验逻辑:保证同一时间仅存在一种有效配置
    must "(instance-type = 'template' and template-name) or (instance-type = 'instance-id' and instance-id)" {
      error-message "请根据实例类型指定对应参数:template名称或instance ID";
    }
  }
}

适配逻辑说明

  • member instance:instance-type默认是template,template-name默认是default,自动匹配等效命令
  • member instance template <name>:指定instance-type为template,并设置template-name为指定值
  • member instance <id>:指定instance-type为instance-id,并设置instance-id为指定值

关于原方案的问题说明

YANG的List要求键必须唯一且非空,双非强制键无法保证List实例的唯一性(多个无键实例会冲突),因此这种场景下List并非合适的结构,上述两种基于容器+互斥分支/约束的方案更契合CLI的互斥参数逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:44:55