Условное присвоение значений по умолчанию в ян

У меня есть два свойства в модели:

  • протокол листа,
  • листовой порт.

Я хочу указать, что:

  • если protocol = 'ssh', то значение порта по умолчанию равно 22,
  • если protocol = 'http', то значение порта по умолчанию равно 80,
  • и т.п.

Как я могу выразить это в ян?

1 ответ

Решение

Там нет никаких условных default значения в ЯНГ - нужно два default заявления для двоих defaults с разными значениями и одним leaf может иметь только один default подоператор. Вы можете обойти это, однако. Возможно, используя presence container вместо вашего протокола leaf:

module conditional-default {
  namespace "http://example.com/conditional-default";
  prefix "excd";

  grouping common {
    leaf port {
      type int32;
    }
  }

  container config {

    container ssh {
      presence "If this container is present, ssh is configured.";
      uses common {
        refine port {
          default 22;
        }
      }
    }
    container http {
      presence "If this container is present, http is configured.";
      uses common {
        refine port {
          default 80;
        }
      }
    }

  }

}

От RFC6020, 7.5.5.:

Оператор "присутствии" присваивает значение присутствию контейнера в дереве данных. В качестве аргумента она принимает строку, содержащую текстовое описание значения присутствия узла.

Другие вопросы по тегам