Моделирование Ян Установить поле на основе другого поля

Я пишу модель Янга. Можно ли установить лист (строку или перечисление) со значением, основанным на другом поле. Так, например, я хочу сказать, что если x, то значение поля a равно b, если z, то значение поля a равно c.

Редактировать: я новичок в ян и все еще пытаюсь изучить его, если есть какие-либо другие идеи или операторы, которые я могу использовать для решения этой проблемы, пожалуйста, не стесняйтесь поделиться. :D Большое спасибо.


person A.J    schedule 27.11.2017    source источник
comment
Вы не можете сделать это в YANG - то, что вы описываете, является условным значением по умолчанию значение. Однако вы можете ограничить допустимый набор значений узла на основе значения другого, например, предложенного @Ariel.   -  person predi    schedule 28.11.2017


Ответы (1)


Вы можете использовать конструкции when и must: YANG 1.1, раздел 7.5.3 говорит:

Необязательный оператор must принимает в качестве аргумента строку, содержащую выражение XPath (см. раздел 6.4). Он используется для формального объявления ограничения допустимых данных. Ограничение применяется в соответствии с правилами раздела 8.

И Раздел 7.5.4.3 излагает это:

 container interface {
   leaf ifType {
     type enumeration {
       enum ethernet;
       enum atm;
     }
   }
   leaf ifMTU {
     type uint32;
   }
   must 'ifType != "ethernet" or ifMTU = 1500' {
     error-message "An Ethernet MTU must be 1500";
   }
   must 'ifType != "atm" or'
      + ' (ifMTU <= 17966 and ifMTU >= 64)' {
     error-message "An ATM MTU must be 64 .. 17966";
   }
 }

when раздел 7.21.5 гласит:

Оператор when делает родительский оператор определения данных условным. Узел, определенный оператором определения родительских данных, действителен только в том случае, если выполняется условие, указанное оператором when. Аргументом оператора является выражение XPath (см. Раздел 6.4), которое используется для формального определения этого условия.

ConfD содержит руководство по XPath в NETCONF и YANG; этот пример выходит из него:

augment /system/login/user {
  when “class != ’wheel’”;
  leaf uid {
    type uint16 {
    range “1000 .. 30000”;
    }
  }
}
person Ariel Otilibili    schedule 28.11.2017