2016-12-03 75 views
0

我想建立一个CLI。我选择使用'杨'来做到这一点。我是新手,无法找到如何导入现有的模块。例如,我在github上找到了一个用于ospf的模块(https://github.com/YangModels/yang/blob/master/vendor/cisco/xe/1631/ietf-ospf.yang),我想用我自己的模块导入它。这可以做到吗?怎么样?如何导入一个模块在杨

EDIT1:

module mininet { 

/* name space */ 
namespace "http://tail-f.com/ns/example/mininet"; 
prefix mininet; 

import ietf-ospf { 
    prefix ospf; 
    revision-date 2015-03-09 
} 

leaf area-id-type { 
    type yang:area-id-type; 
} 
} 

于是,我就这样做了Piotr使用帮助Babij这种方式。不幸的是,这是行不通的。我需要改变什么? area-id-type是ietf-ospf的typedef。我有误差TE下列之一:

mininet.yang:12:3: error: trailing garbage after module 
mininet.yang:12:3: error: unterminated statement 
+0

'我需要改变什么呢?''''''''''''revision-date'语句缺少分号(';')。你正在使用的工具的解析器有点困惑,因为它会给你那些非描述性的错误信息。另外,您仍然使用错误的'prefix'作为导入模块的类型引用。 – predi

回答

3

您可以通过使用import声明导入自己的模块等模块。在Yang1.1中描述了RFC 7950并且在Yang1.0中描述了RFC 6020。在YANG 1.1中,您可以导入同一模块的两个不同版本。除此之外,import声明在两个版本中都是相同的。

在实践中,基本进口看起来像这样:

module acme-system { 
    namespace "http://acme.example.com/system"; 
    prefix "acme"; 

    import ietf-yang-types { 
     prefix "yang"; 
     revision-date 2013-07-15; 
    } 

    leaf acme-ip-address { 
     type yang:dotted-quad; 
    } 
} 

如果省略可选revision-date声明则未定义的模块版本是进口的。所以,一般来说,使用它是一个很好的例子。

必需的prefix语句可让您引用导入模块中的内容。在该示例中,导入的ietf-yang-types模块的前缀为yang,并且,由此明确指出yang:dotted-quad指的是来自该模块的类型。在你的情况下,你已经将前缀设置为ospf,所以你应该有ospf:area-id-type引用该模块的类型定义。如果你导入多个模块,你需要确保它们的前缀是唯一的。

此外,您正在导入ietf-ospf模块的最旧版本。我只是希望这是你真正想做的事情。

无论如何,一旦你导入模块允许您:

  • 使用任何groupingtypedef在导入模块或者其子模块的在顶级定义。

  • 使用在导入的模块或其子模块中定义的任何extension,featureidentity

  • 使用导入的模块的架构树中的任何节点mustpathwhen报表,或作为augmentdeviation语句目标节点。

在上面的例子中typedef dotted-quadietf-yang-typesacme-system模块中被使用。

+0

感谢您的帮助,但它不起作用,我在编辑原文。 – B3th4

+0

我更新了答案。您应该使用前缀来引用导入模块中的内容。 –