Модуль klish-plugin-sysrepo предназначен для работы с хранилищем конфигурации Sysrepo из программы Klish версии 3. Klish позволяет организовать интерфейс командной строки, содержащий только команды, заданные пользователем при конфигурировании klish. Хранилище Sysrepo использует язык моделирования данных YANG для формирования схемы хранимой конфигурации, а также хранит саму конфигурацию. Обычно хранимая конфигурация относится к какой-либо встроенной системе, например к маршрутизатору. Принцип хранения и управления конфигурацией, используемый в klish-plugin-sysrepo, похож на подход, применяемый в маршрутизаторах "Juniper".
Схема конфигурация описана YANG файлами, а доступ и редактирование элементов конфигурации осуществляется с помощью специальных команд, доступных из klish.
Проект содержит файл xml/sysrepo.xml
, который, будучи добавленным к файлам
конфигурации klish, объявляет новый VIEW
с именем "sysrepo". Этот VIEW
содержит готовые команды для редактирования конфигурации Sysrepo. Вся работа
модуля с Sysrepo осуществляется с помощью библиотечных функций Sysrepo и
библиотеки libyang
. Проекты Sysrepo,
libyang и klish требуются для сборки и работы модуля klish-plugin-sysrepo.
Далее будут описаны команды работы с конфигурацией, объявленные в
xml/sysrepo.xml
.
Система Sysrepo поддерживает четыре хранилища конфигурации.
running
- текущая действующая конфигурация. Состояние системы соответствует
этой конфигурации. Но эта не та конфигурация, которую редактирует администратор.candidate
- редактируемая конфигурация. "Кандидат" на то, чтобы стать
действующей конфигурацией. Однако изменения в candidate
никак не влияют на
реальное состояние системы. Только по факту того, что администратор, специальной
командой, записывает содержимое candidate
в running
будут происходить
изменения в системе. Т.е. изменения применяются не по одному, а "все разом".
Таким образом поддерживается целостность и непротиворечивость действующей
конфигурации. Все описанные ниже команды работают с candidate
конфигурацией,
если не указано иное.startup
- конфигурация, сохраненная на диске. Только эта конфигурация
может пережить перезагрузку системы. В случае модуля klish-plugin-sysrepo
хранилища startup
и running
всегда идут в паре. Т.е. модуль поддерживает их
состояние одинаковым.operational
- это хранилище не имеет прямого отношение к обсуждаемой теме и
упоминаться тут больше не будет.Многие команды для работы с конфигурацией используют "путь". Это путь в YANG схеме или вернее в заполненной значениями конфигурации, построенной по YANG схеме. YANG схема является ветвистой и многоуровневой. Схема может содержать "списки", в которых элементы идентифицируются по "ключу". Элементами пути могут быть как узлы YANG схемы, так и ключи, потому что конфигурация ветвится в зависимости от этих ключей. Проекты Sysrepo и libyang используют "XPath" для доступа к элементам конфигурации. Несмотря на то, что XPath имеет развитый синтаксис и возможности, он не подходит для использования в интерфейсе командной строки. XPath довольно сложен и не будет интуитивно понятен оператору. Поэтому для доступа к элементам конфигурации в klish-plugin-sysrepo используется упрощенный вариант пути. Для определенности, назовем его "KPath" (Klish path), чтобы потом ссылаться на его формат и не путать с другими разновидностями путей.
Элементы пути в KPath отделяются друг от друга пробелами. Элементами пути
являются узлы YANG схемы, значения ключей и элементы leaf-list
(см. YANG).
Если значение ключа или элемент leaf-list
содержит пробелы, то они заключаются
в кавычки.
Предположим есть такой фрагмент YANG схемы:
module ttt {
namespace "urn:ttt";
prefix ttt;
container test {
list iface {
key "name";
leaf name {
type string;
}
leaf comment {
type string;
}
leaf type {
type enumeration {
enum ethernet;
enum ppp;
enum dummy;
}
}
}
}
}
Корректный KPath до элемента, определяющего тип "интерфейса" будет таким:
test iface eth0 type
, где "eth0" - ключ списка "iface", соответствующий
элементу "name".
KPath до поля комментария для интерфейса "eth1" будет таким:
test iface eth1 comment
.
В командах, где требуется ввести путь до элемента конфигурации, KPath будет
таким, как описано выше. Для команды set
, которая устанавливает значение
элемента конфигурации, существует расширение формата KPath, так называемые
"однострочники". Однострочники позволяют задать значения нескольким элементам
конфигурации (leaf
) одной строкой. Команда set
вместе с аргументами может
выглядеть так:
# set test iface eth0 type ethernet comment "Comment with space"
set
del
edit
top
up
exit
insert
commit
check
rollback
show
diff
do
При подключении модуля к системе klish элементом PLUGIN
, в теле элемента
PLUGIN
можно задать настройки для модуля. Настройки регулируют некоторые
особенности поведения модуля.
JuniperLikeShow
FirstKeyWithStatement
MultiKeysWithStatement
Colorize
<PLUGIN name="sysrepo">
JuniperLikeShow = y
FirstKeyWithStatement = n
MultiKeysWithStatement = y
Colorize = y
</PLUGIN>