# 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"
```