2016-12-03 90 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

我更新了答案。您應該使用前綴來引用導入模塊中的內容。 –