Предположим, у меня есть два модуля, я хотел бы расширить один список новыми листами.

module A {
    list deviceList {
        key name;
        leaf name{

        }
        leaf hostname{

        }
    }
}

И я хотел бы увеличить его до другого листа

module B {
    list generalInfo{
        key customerName;
        leaf customerName{
            type string;
        }
        augment moduleA:deviceList {
            leaf ipAddress{
                
            }
        }
}

Я сделал это, используя группировку, контейнер и список внутри, но это полностью меняет нашу существующую структуру, я бы хотел опустить контейнер и группировку, если это возможно.

0
marhyno 21 Окт 2020 в 16:24

1 ответ

Лучший ответ

Похоже, вы хотите повторно использовать часть определения схемы, поместить ее в другое место в дереве схемы и добавить к ней узел.

Вы не можете сделать это так, как вы пытались, потому что оператор augment может появиться только на корневом уровне или в операторе uses.

Вы можете сделать это только с помощью grouping, но вы можете опустить container. Рефакторинг A: определите grouping, который является list. Обратитесь к нему в B и увеличьте его.

module A {
    grouping devices {
      list deviceList {
        key name;
        leaf name{
        }
        leaf hostname{
        }
      }
    }
    uses devices;
}

module B {
    list generalInfo{
        key customerName;
        leaf customerName{
            type string;
        }
        uses moduleA:devices {
          augment "deviceList" {
            leaf ipAddress{
            }
          }
        }
    }
}

Обратите внимание: если вы используете оператор augment в модуле B, это означает, что любое устройство, реализующее модуль B, должно также реализовать модуль A и его корневой уровень list deviceList. См. RFC 7950 4.2.8:

Когда сервер реализует модуль, содержащий оператор «дополнения», это означает, что реализация расширенного модуля сервером содержит дополнительные узлы.

Я не уверен, что вы этого хотите. Если нет, то переместите определение группировки в модуль, который содержит только определения группировки (без каких-либо «операторов определения данных»), и импортируйте его как из A, так и из B.

2
Piotr Babij 21 Окт 2020 в 20:40