Конечный узел "когда" или "должен" оператор Использование
Я нахожусь в процессе изучения OpenDayLight и Yang и не могу понять, как наложить ограничение на конечный узел. У меня есть листовой узел (vpn-id). Когда узел типа l3vpn равен 'bgp', я хочу, чтобы данные для него были разрешены для vpn-id. Если конечный узел не равен 'bgp' и введен vpn-id, я хочу выдать ошибку. Я проверил это в OpenDayLight, и это всегда позволяет мне сохранять данные, независимо от того, что в них есть.
Кроме того, мне трудно найти примеры Яна, чтобы я мог учиться сам. Предложения приветствуются.
module DaveTest {
namespace "urn:aaa:ddd:DaveTest";
prefix dave-module;
description "Dave testing file";
revision "2017-04-17" {
description "Initial version.";
}
container testing-vars {
list test-list {
key "vpn-transaction-id l3vpn-type";
unique "vpn-transaction-id";
leaf vpn-transaction-id {
type string;
}
leaf l3vpn-type {
type enumeration {
enum "bgp";
enum "static";
enum "gre tunnel";
}
mandatory true;
}
leaf vpn-id {
when "../l3vpn-type = 'bgp'";
type string;
}
}
}
2 ответа
Ваше использование when
утверждение верно. Вы сделали vpn-id
условно, так что разрешено появляться только если l3vpn-type
имеет значение bgp
, Возможно, он не работает должным образом из-за ошибки в ODL.
Если вы хотите узнать о YANG, то неплохо бы начать читать вики- тег /questions/tagged/ietf-netmod-yang (внизу есть ссылки). Есть репозитории модулей YANG, созданные различными группами, которые можно найти в Интернете, например, эту. Возможно, лучше начать чтение стандартных модулей, поскольку они рецензируются и следуют рекомендациям для авторов YANG. Они могут быть найдены в опубликованных RFC, обычно с их именем, содержащим фразу "YANG data model for".
Вы можете добавить оператор must следующим образом:
leaf vpn-id {
must "../l3vpn-type = 'bgp'";
type string;
}