как импортировать модуль в ян

Я пытаюсь создать CLI. Я предпочитаю использовать для этого «ян». Я новичок в этом и не могу понять, как импортировать существующие модули. В качестве примера я нашел модуль для ospf на github (https://github.com/YangModels/yang/blob/master/vendor/cisco/xe/1631/ietf-ospf.yang), и я хотел бы импортировать его в свои собственные модули. Можно ли это сделать? как?

РЕДАКТИРОВАТЬ1:

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;
 }
}

Поэтому я попытался сделать это таким образом с помощью Петра Бабия. К сожалению, это не работает. Что мне нужно изменить? area-id-type — это определение типа ietf-ospf. У меня ошибка следующая:

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

person B3th4    schedule 03.12.2016    source источник
comment
What do I need to change? Вам не хватает точки с запятой (;) в операторе revision-date. Синтаксический анализатор инструмента, который вы используете, немного запутался из-за этого, выдавая вам эти не описательные сообщения об ошибках. Кроме того, вы все еще используете неправильный prefix для ссылки на тип из импортированного модуля.   -  person predi    schedule 05.12.2016


Ответы (1)


Вы можете импортировать другие модули в свои собственные модули, используя оператор import. Это описано как в RFC 7950 для YANG 1.1, так и в RFC 6020 для YANG 1.0. В 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 или в качестве целевого узла в операторах augment и deviation.

В приведенном выше примере typedef dotted-quad из ietf-yang-types используется в модуле acme-system.

person Piotr Babij    schedule 03.12.2016
comment
спасибо за вашу помощь, но это не работает, я редактирую исходный пост. - person B3th4; 04.12.2016
comment
Я обновил ответ. Вы должны использовать префикс для ссылки на материал в импортированном модуле. - person Piotr Babij; 04.12.2016