Browse Source

doc: lua plugin doc + typos

Peter Kosyh 1 year ago
parent
commit
03f5ec72ca
1 changed files with 93 additions and 17 deletions
  1. 93 17
      docs/klish3.ru.md

+ 93 - 17
docs/klish3.ru.md

@@ -39,7 +39,7 @@
 естественный способ.
 
 Какой из подходов лучше и проще в конкретном случае - определяется задачей.
-Klish в первую очередь расчитан на подход Cisco, т.е. на немедленно выполняемые
+Klish в первую очередь рассчитан на подход Cisco, т.е. на немедленно выполняемые
 команды. Однако проект имеет систему плугинов, что позволяет расширять его
 возможности. Так плугин klish-plugin-sysrepo, реализованный отдельным проектом,
 работая на основе хранилища sysrepo, позволяет организовать Juniper подход.
@@ -168,7 +168,7 @@ VIEW. Можно определить VIEW со "стандартными" ко
 ### Команды и параметры
 
 Команды (тег `COMMAND`) могут иметь параметры (тег `PARAM`). Команда определяется
-внутри какого-либо VIEW и пренадлежит ему. Параметры определяются внутри команды
+внутри какого-либо VIEW и принадлежит ему. Параметры определяются внутри команды
 и, в свою очередь, принадлежат ей. Команда может состоять только из одного слова,
 в отличие от команд в klish предыдущих версий. Если нужно определить многословную
 команду, то создаются вложенные команды. Т.е. внутри команды, идентифицируемой по
@@ -190,7 +190,7 @@ VIEW. Можно определить VIEW со "стандартными" ко
 
 Параметры могут быть обязательными, опциональными, либо являться обязательным
 выбором среди нескольких параметров - кандидатов. Таким образом при вводе команды
-оператором некорые параметры могут быть указаны, а некоторые нет. При разборе
+оператором некоторые параметры могут быть указаны, а некоторые нет. При разборе
 командной строки составляется последовательность выбранных параметров.
 
 
@@ -218,7 +218,7 @@ VIEW. Можно определить VIEW со "стандартными" ко
 скрипт, который будет выполнен символом.
 
 Результатом выполнения действия является "код возврата". Он определяет успешность
-или неуспешность выполнения команды вцелом. Если для одной команды определено
+или неуспешность выполнения команды в целом. Если для одной команды определено
 более одного действия, то вычисление кода возврата становится более сложной
 задачей. Каждое действие имеет флаг, определяющий влияет ли код возврата
 текущего действия на общий код возврата. Так же действия имеют настройки,
@@ -245,7 +245,7 @@ VIEW. Можно определить VIEW со "стандартными" ко
 
 ### Контейнеры параметров
 
-Контейнеры SWITCH и SEQ используются для аггрегации вложенных в них параметров и
+Контейнеры SWITCH и SEQ используются для агрегации вложенных в них параметров и
 определяют правила по которым происходит разбор командной строки относительно
 этих параметров.
 
@@ -255,7 +255,7 @@ VIEW. Можно определить VIEW со "стандартными" ко
 оператор ввел лишь один параметр по выбору из набора возможных параметров.
 В таком случае может использоваться контейнер SWITCH. Если при разборе командной
 строки внутри команды встречается контейнер SWITCH, то для соответствия
-следующему введенному оператором слова должет быть выбран только один параметр
+следующему введенному оператором слова должен быть выбран только один параметр
 из параметров, вложенных в SWITCH. Т.е. с помощью контейнера SWITCH происходит
 ветвление разбора.
 
@@ -285,7 +285,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 Для задания подсказок и списка возможных дополнений в конфигурации используются
 теги `HELP` и `COMPL`. Эти теги должны быть вложенными относительно
 соответствующих команд и параметров. Для простоты подсказки для параметра или
-команды могут быть заданы аттрибутом основного тега, если подказка является
+команды могут быть заданы атрибутом основного тега, если подсказка является
 статическим текстом и ее не нужно генерировать. Если подсказка динамическая, то
 ее содержимое генерируется действиями ACTION, вложенными внутрь HELP. Для
 дополнений COMPL действия ACTION генерируют список возможных значений
@@ -425,7 +425,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 ```
 
 Заголовок вводит свое пространство имен XML по умолчанию
-"https://klish.libcode.org/klish3". Заголовок стардартный и чаще всего нет смысла
+"https://klish.libcode.org/klish3". Заголовок стандартный и чаще всего нет смысла
 его менять.
 
 
@@ -460,7 +460,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 ```
 
 В первом случае klish будет искать "my_sym" во всех плугинах и использует первый
-найденый. Во втором случае поиск будет производиться только в плугине
+найденный. Во втором случае поиск будет производиться только в плугине
 "my_plugin". Кроме того, разные плугины могут содержать одноименные символы и
 указание плугина позволит узнать, какой из символов имелся в виду.
 
@@ -559,7 +559,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 ```
 
 Команда, используемая в качестве значения атрибута `cmd` должно быть определена
-в файлай конфигурации. Приведенный пример выполнит ранее определенную команду
+в файлах конфигурации. Приведенный пример выполнит ранее определенную команду
 `exit` при нажатии сочетания клавиш "Ctrl^Z".
 
 
@@ -590,7 +590,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 Внутри одной команды может быть определено несколько блоков действий. Это
 возможно, если команда имеет ветвление параметров или опциональные параметры.
 Блоком считаются действия, определенные внутри одного элемента. Действия,
-определенные в разных элементах, включая вложенные, пренадлежат разным блокам.
+определенные в разных элементах, включая вложенные, принадлежат разным блокам.
 Всегда выполняется только один блок действий.
 
 ```
@@ -645,7 +645,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 поиск символа будет проходить немного быстрее. С другой стороны, можно написать
 некие универсальные команды, в которых указываются символы без принадлежности к
 плугину. Тогда несколько плугинов могут реализовать "интерфейс", т.е. все
-используемые символы, а их реальное содержание будет зависить от того, какой
+используемые символы, а их реальное содержание будет зависеть от того, какой
 плугин загружен.
 
 
@@ -733,7 +733,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 
 В одной команде может содержаться несколько элементов `ACTION`. Это называется
 "блок действий". Каждое из действий имеет свой код
-возврата. Однако команда вцелом тоже должна иметь код возврата и этот код
+возврата. Однако команда в целом тоже должна иметь код возврата и этот код
 должен быть одним значением, а не массивом.
 
 По умолчанию действия `ACTION` выполняются последовательно и как только одно из
@@ -873,7 +873,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 * [`SWITCH`](#switch)
 * [`SEQ`](#seq)
 
-В данном разделе будут довольно подробно рассмотрены атрибуты элемена `ENTRY`,
+В данном разделе будут довольно подробно рассмотрены атрибуты элемента `ENTRY`,
 зачастую являющиеся атрибутами также и других элементов. Другие элементы будут
 ссылаться на эти описания в разделе `ENTRY`. Примеры конфигурации, при описании
 атрибутов, не обязательно основаны на элементе `ENTRY`, а используют другие,
@@ -1143,7 +1143,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 что это эквивалентно созданию копии элемента "#2" на том месте, где определен
 элемент "#1".
 
-Если элемент являетя ссылкой, то в нем определен атрибут `ref`. Значение атрибута
+Если элемент является ссылкой, то в нем определен атрибут `ref`. Значение атрибута
 - ссылка на целевой элемент схемы.
 
 ```
@@ -1192,7 +1192,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 тега `PTYPE`, который является ссылкой на ранее объявленный `PTYPE`. В итоге
 типы двух объявленных параметров полностью эквивалентны.
 
-В последне примере ссылка на `VIEW` заключена внутрь тега `COMMAND`. В данном
+В последнем примере ссылка на `VIEW` заключена внутрь тега `COMMAND`. В данном
 случае это будет означать, что если мы работаем с "view4", то команды из
 "view1" будут доступны с префиксом "do". Т.е. если оператор находится во
 `VIEW` с именем "view4", то он должен написать в командной строке `do cmd1`,
@@ -1206,7 +1206,7 @@ SEQ сам может быть элементом контейнера SWITCH.
 #### Атрибут `restore`
 
 Предположим текущий путь состоит из нескольких уровней. Т.е. оператор вошел во
-вложеный `VIEW`. Находясь во вложенном `VIEW`, оператору доступны команды не
+вложенный `VIEW`. Находясь во вложенном `VIEW`, оператору доступны команды не
 только текущего `VIEW`, но и всех родительских. Оператор вводит команду,
 определенную в родительском `VIEW`. Атрибут `restore` определяет, будет ли
 изменен текущий путь перед выполнением команды.
@@ -2082,3 +2082,79 @@ push /view_name1
 ```
 <PLUGIN name="lua"/>
 ```
+
+Содержимое тега может задавать конфигурацию.
+
+Рассмотрим параметры конфигурации.
+
+### Параметр autostart
+
+```
+autostart="/usr/share/lua/klish/autostart.lua"
+```
+
+Когда плугин инициализируется, создаётся состояние Lua-машины которое (после fork)
+и будет использоваться для вызова Lua `ACTION` кода. Если необходимо загрузить
+какие-то библиотеки, это можно сделать за счёт задания autostart файла. Параметр
+может быть только один.
+
+
+### Параметр package.path
+
+```
+package.path="/usr/lib/lua/clish/?.lua;/usr/lib/lua/?.lua"
+```
+
+Задаёт Lua package.path (пути по которым идёт поиск модулей). Параметр может
+быть только один.
+
+### Параметр backtrace
+
+```
+backtrace=1
+```
+
+Показывать ли backtrace при падениях Lua кода. 0 или 1.
+
+### API
+
+При выполнении Lua `ACTION` доступны следующие функции:
+
+#### klish.par()
+
+Возвращает информацию о параметрах. Возможно два варианта применения этой
+функции.
+
+```
+local pars = klish.par()
+for k, v in ipairs(pars) do
+  for i, p in ipairs(pars[v]) do
+    print(string.format("%s[%d] = %s", v, i, p)
+  end
+end
+```
+
+Получение информации о всех параметрах. В таком случае функция вызывается без
+аргументов и возвращает таблицу всех параметров. Таблица содержит как список
+имён, так и массив значений для каждого имени. В примере выше показан итератор
+по всем параметрам с выводом их значений.
+
+Кроме того, klish.par может быть вызван для взятия значений конкретного
+параметра, например:
+
+```
+print("int_val = ", klish.par('int_val')[1])
+```
+
+#### klish.ppar()
+
+Работает точно так же как и `klish.par()`, но только для родительских
+параметров, если они есть в данном контексте.
+
+#### klish.path()
+
+Возвращает текущий путь в виде массива строк. Например:
+
+```
+print(table.concat(klish.path(), "/"))
+```