# NOC WebCLI CLI-интерфейс для автоматизации действий через Web UI. Доступен в виде отдельного выдвижного окна и имеет вид классического терминала. ## Контекст По аналогии с текущим каталогом в shell, в WebCLI есть понятие текущего контекста - активной пользовательской области. Корневой контест - само приложениие/запускалка. По мере навигации могут открываться новые контексты. Таким образом, контексты можно считать аналогом вииртуальной файловой системы, такой как `/proc` Пример: ``` / linv/ dns/ 1024/ form/ name ``` То есть путь `/linv/dns/1024/form/name` приводит нас к полю `name` в форме редактирования зоны dns с id 1024. При этом для данного пути доступен и alias по альтернативному уникальному полю: `/linv/dns/example.com/form/name` В каждом контексте могут быть доступны свои команды, а так же все команды из вышестоящих контекстов. ## Переменные ### Built-in variables `$USER_NAME` - имя пользователя `$USER_ID` ## Таблицы ## Функции Пользователь может создавать собственные комманды в любом контексте ``` <name>(<vars>) { ... } ``` ## Команды ### Глобальный контекст * `help` * `?`` - аналог `help` * `pwd` - выводит текущий путь * `cd` - смена текущего пути * `env` - печатает список переменных * `ls` - список возможных путей * `pushd` - перейти к пути и сохранить текущий в стеке * `popd` - выдернуть верхний путь из стека и перейти по нему * `exit` - выход из shell * `shell` - запуск subshell ### Списки ресурсов * `find` - фильтр поиска * `add` - добавить новый ### Редактирование ресурса * `commit` - сохранить * `get` - получить значение поля * `set` - установить значение поля ## Скрипты ## .rc Специальные скрипты, которые срабатывают при заходе в контекст. Могут задаваться администратором или оператором ## Реализация Поля форм редактирования и просмотра, которые могут формировать путь, помечаются html-аттрибутом `noc-ctx-path` ``` <input ... noc-ctx-path="name" ....> ``` В приложении хранится стек shell'ов # Примеры ## Создание зоны dns ``` cd /linv/dns add set name "example.com" set description "Created via WebCLI" commit ``` ## Функция создания зоны ``` add_dns_zone($name, $description) { pushd /linv/dns set name $name set description $description commit popd } ``` и вызов ``` add_dns_zone "example.com" "Created via function" ```