如何在杨进口模块

时间:2016-12-03 11:36:59

标签: import ietf-netmod-yang

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

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。我遇到的错误是:

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

1 个答案:

答案 0 :(得分:3)

您可以使用import语句在自己的模块中导入其他模块。对于YANG 1.1,children和对于YANG 1.0的RFC 7950都有描述。在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

  •   
  • 使用导入的模块或其子模块中定义的任何extensionfeatureidentity

  •   
  • 使用mustpathwhen语句中导入的模块架构树中的任何节点,或{{1}中的目标节点}和augment陈述。

  •   

在上面的示例中,deviation模块中使用了typedef dotted-quad中的ietf-yang-types