---
# System prepended metadata

title: NOC WebCLI

---

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