我正在学习OpenDayLight和Yang,并且无法弄清楚如何在叶子节点上设置约束。我有一个叶节点(vpn-id)。当l3vpn类型节点等于' bgp'时,我希望vpn-id允许这个节点的数据。如果叶节点不等于' bgp'并输入vpn-id我想抛出一个错误。我已经在OpenDayLight中对此进行了测试,它总是允许我保存数据,无论数据是什么。
另外,我很难找到杨的例子,所以我可以自学。欢迎提出建议。
public class UrlWithExtensionHandler : IRouteHandler
{
#region Implementation of IRouteHandler
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
// init umbraco context
var httpContext = new HttpContextWrapper(HttpContext.Current);
UmbracoContext.EnsureContext(
httpContext,
ApplicationContext.Current,
new WebSecurity(httpContext, ApplicationContext.Current),
UmbracoConfig.For.UmbracoSettings(),
UrlProviderResolver.Current.Providers,
false);
var handler = new UrlWithExtensionVirtualNodeRouteHandler();
return handler.GetHttpHandler(requestContext);
}
#endregion
}
public class UrlWithExtensionVirtualNodeRouteHandler : UmbracoVirtualNodeRouteHandler
{
protected override IPublishedContent FindContent(RequestContext requestContext,
UmbracoContext umbracoContext)
{
return someIPublishedContent;
}
}
答案 0 :(得分:0)
您对when
声明的使用是正确的。您已将vpn-id
设置为有条件,因此仅当l3vpn-type
的值为bgp
时才允许显示。由于ODL中的错误,也许它没有按预期工作。
如果您想了解YANG,阅读ietf-netmod-yang标签wiki将是一个良好的开端(底部有链接)。有各种群组制作的YANG模块库可以在网上找到,例如this one。也许阅读标准模块将是一个更好的开始,因为他们经过同行评审并遵循杨作者的指导方针。它们可以在published RFCs内找到,通常名称中包含" YANG数据模型,用于"短语。
答案 1 :(得分:0)
您可以添加如下 must 语句:
leaf vpn-id {
must "../l3vpn-type = 'bgp'";
type string;
}