我正在尝试构建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
答案 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
模块的最早可用修订版。我只希望这是你真正想做的事。
无论如何,一旦导入模块,您就可以:
使用导入模块或其子模块中顶层定义的任何
grouping
和typedef
。使用导入的模块或其子模块中定义的任何
extension
,feature
和identity
。使用
must
,path
和when
语句中导入的模块架构树中的任何节点,或{{1}中的目标节点}和augment
陈述。
在上面的示例中,deviation
模块中使用了typedef dotted-quad
中的ietf-yang-types
。