imgctl


Nameimgctl JSON
Version 3.0.10 PyPI version JSON
download
home_pageNone
SummaryКонсольная утилита для управления контейнерной платформой Imagenarium
upload_time2025-11-02 20:30:18
maintainer@koden8
docs_urlNone
author@koden8
requires_python>=3.8
licenseMIT License (non-commercial) / Commercial License
keywords docker containers orchestration cli imagenarium
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # imgctl

Консольная утилита для управления контейнерной платформой «Imagenarium».

## Описание

imgctl представляет собой консольную утилиту для управления контейнерной платформой «Imagenarium».

## Содержание

- [Описание](#описание)
- [Установка](#установка)
- [Быстрый старт](#быстрый-старт)
- [Конфигурация](#конфигурация)
- [Параметры подключения](#параметры-подключения)
- [Команды](#команды)
- [Заголовок консоли](#заголовок-консоли)
- [Использование в CI/CD](#использование-в-cicd)
- [Кэширование](#кэширование)
- [Управление колонками](#управление-колонками)
- [Форматы вывода](#форматы-вывода)
- [Фильтрация данных](#фильтрация-данных)
- [Безопасность](#безопасность)
- [Устранение неполадок](#устранение-неполадок)
- [Bash Completion](#bash-completion)

## Установка

### Системные требования

Для корректной работы imgctl необходимо обеспечить выполнение следующих системных требований:

- **Python**: версия 3.8 или выше (для установки через pip)
- **Сетевое подключение**: доступ к API-эндпоинтам «Imagenarium»
- **Операционная система**: Linux, macOS, Windows

### Способы установки

#### 1. Установка через Homebrew (macOS)

```bash
# Добавить tap
brew tap koden8/homebrew-imgctl https://gitlab.com/koden8/homebrew-imgctl.git

# Установить imgctl
brew install imgctl

# Обновить
brew upgrade imgctl
```

#### 2. Установка через Docker

```bash
# Запуск последней версии
docker run --rm -it registry.gitlab.com/koden8/imgctl:latest

# Запуск конкретной версии
docker run --rm -it registry.gitlab.com/koden8/imgctl:3.0.9

# Создать алиас для удобства
alias imgctl='docker run --rm -it -v ~/.config/imgctl:/home/imgctl/.config/imgctl registry.gitlab.com/koden8/imgctl:latest'
```

**Примечание:** В Docker контейнерах imgctl автоматически использует `PlaintextKeyring` из `keyrings.alt.file` для сохранения паролей, так как системный keyring недоступен. Пароли хранятся в `~/.config/imgctl/keyring_pass.cfg` с правами доступа 600. Работает полностью автоматически без запросов пароля.

#### 3. Установка через pip (рекомендуется)

**С PyPI:**
```bash
# Обновить pip
pip install --upgrade pip

# Установить последнюю версию с PyPI
pip install imgctl

# Или установить конкретную версию
pip install imgctl==3.0.9
```

**Из исходников GitLab:**
```bash
# Скачать и установить из архивов GitLab
pip install https://gitlab.com/koden8/imgctl/-/archive/main/imgctl-main.tar.gz

# Или из релизов
pip install https://gitlab.com/koden8/imgctl/-/archive/v3.0.9/imgctl-v3.0.9.tar.gz
```

**Установка bash completion после установки через pip:**

```bash
# Найти и установить bash completion
COMPLETION_FILE=$(python3 -c "import os, imgctl; print(os.path.join(os.path.dirname(imgctl.__file__), 'imgctl-completion.bash'))")
bash "$COMPLETION_FILE" install

# Перезагрузите bash или выполните:
source ~/.bashrc
```

Или добавьте вручную в `~/.bashrc`:

```bash
# Добавить в ~/.bashrc
source $(python3 -c "import os, imgctl; print(os.path.join(os.path.dirname(imgctl.__file__), 'imgctl-completion.bash'))")
```

### Проверка установки

После завершения установки выполните проверку корректности установки:

```bash
# Проверка доступности команд
imgctl --help
```

### Устранение проблем установки

В случае возникновения проблем при установке:

1. **Проверьте версию Python**: `python3 --version` (требуется 3.8+)
2. **Обновите pip**: `pip install --upgrade pip`
3. **Установите зависимости вручную**: `pip install -e .`

#### Решение проблем с установкой

**Проблема: "No module named 'imgctl'"**
```bash
# Решение: переустановите пакет
pip uninstall imgctl
pip install --no-cache-dir imgctl
```

**Проблема: "Permission denied" при установке**
```bash
# Решение: используйте флаг --user
pip install --user imgctl
```

**Проблема: Устаревшая версия**
```bash
# Решение: обновите до последней версии
pip install --upgrade imgctl
```

## Быстрый старт

Данный раздел содержит пошаговое руководство по началу работы с imgctl.

### Этап 1: Настройка серверного подключения

Первоначальная настройка включает добавление сервера «Imagenarium» и настройку подключения:

```bash
# Добавление сервера с указанием параметров подключения
imgctl servers add dev \
  --url http://your-server:5555 \
  --username admin \
  --password your-password \
  --description "Development environment"

# Установка сервера по умолчанию для упрощения работы
imgctl servers set-default dev
```

### Этап 2: Проверка подключения и доступности ресурсов

После настройки сервера выполните проверку подключения и доступности ресурсов:

```bash
# Проверка подключения к серверу
imgctl servers test dev

# Получение списка доступных узлов
imgctl nodes list

# Проверка статуса реестров
imgctl registries list
```

### Этап 3: Управление компонентами и стеками

```bash
# Список всех компонентов
imgctl components list

# Детальная информация о компоненте
imgctl components get my-component

# Просмотр логов
imgctl logs my-component --follow
```

## Конфигурация

imgctl поддерживает несколько способов определения сервера (в порядке приоритета):

1. **Параметры командной строки** (высший приоритет): `--server`, `--username`, `--password`
2. **Переменные окружения**: `IMG_SERVER`, `IMG_USERNAME`, `IMG_PASSWORD`
3. **Файл конфигурации**: стандартный путь или через `--config`
4. **Сервер по умолчанию** из сохраненных серверов

### Примеры использования

```bash
# Через параметры командной строки (высший приоритет)
imgctl --server dev components list
imgctl --server http://server:5555 --username admin --password pass components list

# Через переменные окружения
IMG_SERVER=dev imgctl components list
IMG_SERVER=http://server:5555 IMG_USERNAME=admin IMG_PASSWORD=pass imgctl components list

# Через файл конфигурации
imgctl --config /path/to/config.yaml components list

# Через сервер по умолчанию (низший приоритет)
imgctl components list
```

### Пути к файлу конфигурации

imgctl автоматически ищет файл конфигурации в следующих местах:

| ОС | Путь | Пример полного пути |
|----|------|---------------------|
| **Linux** | `~/.config/imgctl/config.yaml` | `/home/username/.config/imgctl/config.yaml` |
| **macOS** | `~/.config/imgctl/config.yaml` | `/Users/username/.config/imgctl/config.yaml` |
| **Windows** | `%APPDATA%/imgctl/config.yaml` | `C:\Users\username\AppData\Roaming\imgctl\config.yaml` |

### Пример содержимого файла конфигурации

```yaml
server: "http://your-imagenarium-server:5555"
username: "your-username"
password: "your-password"
timeout: 30
verify_ssl: true
```

## Параметры подключения

### Параметры командной строки

| Параметр | Короткая форма | Описание | Пример |
|----------|----------------|----------|---------|
| `--server` | `-s` | Имя сервера или URL для подключения | `--server dev` или `--server http://server:5555` |
| `--username` | `-u` | Имя пользователя (для прямого подключения) | `--username admin` |
| `--password` | `-p` | Пароль (для прямого подключения) | `--password secret` |
| `--config` | `-c` | Путь к файлу конфигурации | `--config /path/to/config.yml` |
| `--verbose` | `-v` | Подробный вывод | `--verbose` |

### Переменные окружения

| Переменная | Описание | Пример |
|------------|----------|---------|
| `IMG_SERVER` | Имя сервера или URL для подключения | `IMG_SERVER=dev` или `IMG_SERVER=http://server:5555` |
| `IMG_USERNAME` | Имя пользователя (для прямого подключения) | `IMG_USERNAME=admin` |
| `IMG_PASSWORD` | Пароль (для прямого подключения) | `IMG_PASSWORD=secret` |

### Правила использования

1. **Приоритет**: Параметры командной строки имеют приоритет над переменными окружения
2. **URL vs имя сервера**: 
   - Если `IMG_SERVER` или `--server` содержит URL (начинается с `http://` или `https://`), то требуются `IMG_USERNAME` и `IMG_PASSWORD`
   - Если это имя сервера, то используются сохраненные учетные данные
3. **Безопасность**: Пароли в переменных окружения более безопасны, чем в командной строке

### Примеры конфигурации

```bash
# Использование имени сервера (используются сохраненные учетные данные)
imgctl --server dev components list
IMG_SERVER=dev imgctl components list

# Прямое подключение через URL
imgctl --server http://server:5555 --username admin --password secret components list
IMG_SERVER=http://server:5555 IMG_USERNAME=admin IMG_PASSWORD=secret imgctl components list

# Смешанное использование (сервер из переменной, учетные данные из параметров)
IMG_SERVER=http://server:5555 imgctl --username admin --password secret components list
```

## Команды

- `imgctl servers` - управление серверами
- `imgctl nodes` - управление нодами
- `imgctl stacks` - управление стеками
- `imgctl components` - управление компонентами
- `imgctl logs` - просмотр логов компонентов
- `imgctl registries` - управление реестрами
- `imgctl repositories` - управление репозиториями
- `imgctl shell` - интерактивная оболочка (REPL режим)

### Управление серверами

Команды для управления настройками серверов подключения.

#### Доступные команды

- `imgctl servers list` - список серверов
- `imgctl servers add <name>` - добавить новый сервер
- `imgctl servers get <name>` - информация о сервере
- `imgctl servers update <name>` - обновить настройки сервера
- `imgctl servers remove <name>` - удалить сервер
- `imgctl servers set-default <name>` - установить сервер по умолчанию
- `imgctl servers test <name>` - тестировать подключение

#### Доступные столбцы для `list`

- **NAME**: Имя сервера
- **URL**: URL сервера
- **USERNAME**: Имя пользователя
- **DESCRIPTION**: Описание сервера
- **DEFAULT**: Отметка сервера по умолчанию (✓)
- **PASSWORD**: Пароль (только с --show-passwords)

По умолчанию: NAME, URL, USERNAME, DESCRIPTION, DEFAULT

#### Параметры `servers list`

- `--columns <COLUMNS>` - список столбцов для отображения
- `--filter <FILTER>` - фильтр данных
- `--no-headers` - не показывать заголовки
- `--show-passwords` - показать пароли (не рекомендуется)
- `--output <FORMAT>` - формат вывода (table, json, yaml, tsv)

#### Примеры

```bash
# Список серверов
imgctl servers list

# Список с дополнительными столбцами
imgctl servers list --columns "NAME,URL,USERNAME,DESCRIPTION"

# Фильтр по имени
imgctl servers list --filter NAME=dev

# Фильтр по URL (регулярное выражение)
imgctl servers list --filter URL~registry

# Показать пароли (не рекомендуется)
imgctl servers list --show-passwords

# Добавление нового сервера
imgctl servers add dev --url http://dev.example.com:5555 --username admin --password secret

# Добавление сервера с настройками TTL
imgctl servers add prod \
  --url http://prod.example.com:5555 \
  --username admin \
  --password secret \
  --description "Production environment" \
  --ttl /deployments/list:10 \
  --ttl /deployments/tags:60

# Просмотр информации о сервере
imgctl servers get dev

# Просмотр с настройками TTL
imgctl servers get prod --format json

# Установка сервера по умолчанию
imgctl servers set-default dev

# Обновление сервера с новыми настройками TTL
imgctl servers update prod \
  --description "Updated production environment" \
  --ttl /api/v3/nodes:5 \
  --ttl /deployments/list:15

# Тестирование подключения
imgctl servers test dev

# Удаление сервера
imgctl servers remove dev
```

### Управление нодами

Команды для управления нодами (узлами) кластера.

#### Доступные команды

- `imgctl nodes list` - список нод
- `imgctl nodes get <name>` - детальная информация о ноде

#### Доступные столбцы для `list`

- **NAME**: Имя ноды
- **IP**: IP адрес  
- **ROLE**: Роль (manager/worker)
- **AVAILABILITY**: Доступность (ACTIVE/DRAIN/PAUSE)
- **STATUS**: Статус (READY/UNHEALTHY)
- **DC**: Дата-центр
- **DOCKER_VERSION**: Версия Docker
- **TOTAL_MEMORY**: Общий объем памяти (GB)
- **SSH_PORT**: SSH порт
- **SSH_USER**: SSH пользователь
- **EXTERNAL_URL**: Внешний URL
- **ID**: Уникальный идентификатор

По умолчанию: NAME, IP, ROLE, AVAILABILITY, STATUS

#### Параметры `nodes list`

- `--columns <COLUMNS>` - список столбцов для отображения
- `--filter <FILTER>` - фильтр данных  
- `--no-headers` - не показывать заголовки
- `--output <FORMAT>` - формат вывода (table, json, yaml, tsv)
- `--limit <N>` - ограничить количество записей

#### Примеры

```bash
# Список нод
imgctl nodes list

# Список нод с дополнительными столбцами
imgctl nodes list --columns "NAME,IP,DC,DOCKER_VERSION,TOTAL_MEMORY"

# Добавить/удалить столбцы
imgctl nodes list --columns "+TOTAL_MEMORY,-ID"

# Фильтр по статусу
imgctl nodes list --filter STATUS=READY

# Фильтр по роли
imgctl nodes list --filter ROLE=manager

# Фильтр по IP (регулярное выражение)
imgctl nodes list --filter IP~10.9

# Вывод без заголовков
imgctl nodes list --no-headers

# Детальная информация о ноде
imgctl nodes get node-01

# Обновление ноды
imgctl nodes update node-01 --role worker --availability drain
```

### Управление стеками

Команды для управления стеками развертываний.

#### Формат имен

Все имена стеков отображаются в формате `stack@namespace`:
- `database@production` - стек database в namespace production
- `web-api@staging` - стек web-api в namespace staging

Имена имеют цветовую подсветку: имя стека отображается белым, а `@namespace` - серым цветом для лучшей читаемости.

#### Доступные команды

- `imgctl stacks list` - список стеков
- `imgctl stacks get <stack>@<namespace>` - детальная информация о стеке
- `imgctl stacks template <stack>` - просмотр шаблонов стека
- `imgctl stacks diff <stack1> <stack2>` - сравнение шаблонов

#### Доступные столбцы для `list`

- **NAME**: Название стека (в формате stack@namespace)
- **NAMESPACE**: Пространство имен
- **VERSION**: Версия стека
- **STATUS**: Статус стека
- **REPO**: Репозиторий
- **COMMIT**: Git коммит
- **TIME**: Время развертывания
- **TAG**: Тег версии
- **PARAMETERS**: Параметры
- **COMPONENTS**: Компоненты

По умолчанию: NAME, NAMESPACE, VERSION, STATUS

#### Параметры `stacks list`

- `--columns <COLUMNS>` - список столбцов для отображения
- `--filter <FILTER>` - фильтр данных
- `--no-headers` - не показывать заголовки
- `--output <FORMAT>` - формат вывода (table, json, yaml, tsv)
- `--limit <N>` - ограничить количество записей

#### Примеры

```bash
# Список стеков
imgctl stacks list

# Список с дополнительными столбцами
imgctl stacks list --columns "NAME,NAMESPACE,VERSION,STATUS,REPO,COMMIT,TIME,TAG"

# Фильтр по статусу
imgctl stacks list --filter STATUS=deployed

# Фильтр по namespace
imgctl stacks list --filter NAMESPACE=production

# Фильтр по имени (регулярное выражение)
imgctl stacks list --filter NAME~database

# Вывод без заголовков
imgctl stacks list --no-headers

# Детальная информация о стеке
imgctl stacks get database@production
```

### Управление компонентами

Команды для управления компонентами развертываний.

#### Формат имен

Компоненты связаны со стеками в формате `stack@namespace`. В поле **STACK** отображается идентификатор стека в этом формате.

#### Доступные команды

- `imgctl components list` - список компонентов
- `imgctl components get <name>` - детальная информация о компоненте
- `imgctl components start <name>` - запуск компонента
- `imgctl components stop <name>` - остановка компонента
- `imgctl components upgrade` - обновление компонентов
- `imgctl components tags <name>` - список тегов компонента
- `imgctl components logs <name>` - просмотр логов

#### Доступные столбцы для `list`

- **NAME**: Имя компонента
- **NAMESPACE**: Пространство имен
- **STACK**: ID стека (в формате stack@namespace)
- **IMAGE**: Образ Docker
- **TAG**: Тег образа
- **STACK_VERSION**: Версия стека
- **STATUS**: Статус компонента
- **REPLICAS**: Количество реплик
- **PORTS**: Маппинг портов
- **UPDATED**: Дата обновления
- **CREATED**: Дата создания
- **REPO**: Репозиторий
- **COMMIT**: Git коммит
- **ADMIN_MODE**: Режим администратора
- **RUN_APP**: Запуск приложения
- **SHOW_ADMIN_MODE**: Показ режима администратора
- **OFF**: Выключен
- **NETWORKS**: Сетевые подключения

По умолчанию: NAME, NAMESPACE, IMAGE, TAG, UPDATED, STATUS

#### Статусы компонентов

- **RUNNING**: Компонент работает (все реплики запущены) - зеленый
- **STOPPED**: Компонент остановлен - серый
- **STARTING**: Компонент запускается - желтый
- **PARTIAL**: Частично работает (запущено меньше реплик чем желается) - желтый
- **OFF**: Компонент выключен - серый
- **BROKEN**: Компонент сломан (несоответствие версий между component и task) - желтый
- **CANCELED**: Операция отменена - красный

#### Параметры `components list`

- `--columns <COLUMNS>` - список столбцов для отображения
- `--filter <FILTER>` - фильтр данных
- `--no-headers` - не показывать заголовки
- `--output <FORMAT>` - формат вывода (table, json, yaml, tsv)
- `--limit <N>` - ограничить количество записей
- `--no-cache` - не использовать кэш

#### Параметры `components upgrade`

- `<component>[:tag]` - имена компонентов для обновления (по умолчанию обновляются все)
- `--filter <FILTER>` - фильтр компонентов для обновления
- `--to-tag <TAG>` - обновить до указанного тега
- `--from-file <FILE>` - загрузить список обновлений из файла
- `--check` - показать план обновления без выполнения
- `--dry-run` - предварительный просмотр без выполнения
- `--confirm` - подтвердить обновления без запроса (только с фильтрами)
- `--force` - принудительное обновление без проверки доступности тега
- `--no-cache` - не использовать кэш
- `--export-current` - экспорт текущих версий
- `--export-latest` - экспорт последних версий
- `--export-upgradable` - экспорт компонентов для обновления
- `--verbose` - подробный вывод HTTP запросов

#### Примеры

```bash
# Список компонентов
imgctl components list

# Список с дополнительными столбцами
imgctl components list --custom-columns "NAME,NAMESPACE,STACK,CREATED,REPO,COMMIT,PORTS"

# Фильтр по имени
imgctl components list --filter NAME~web-api-

# Фильтр по namespace
imgctl components list --filter NAMESPACE=production

# Фильтр по статусу
imgctl components list --filter STATUS=RUNNING

# Детальная информация о компоненте
imgctl components get web-api-staging

# Детальная информация без кэша
imgctl components get web-api-staging --no-cache

# Запуск компонента
imgctl components start web-api-staging

# Остановка компонента
imgctl components stop web-api-staging

# Обновление всех компонентов до последних тегов (по умолчанию)
imgctl components upgrade

# Обновление одного компонента до последнего тега
imgctl components upgrade web-api-staging

# Обновление до конкретного тега
imgctl components upgrade web-api-staging:v1.2.3

# Обновление нескольких компонентов
imgctl components upgrade web-api-staging db-staging:latest

# Обновление из файла (tab-separated формат)
imgctl components upgrade --from-file upgrades.txt

# Массовое обновление с фильтрами
imgctl components upgrade --filter NAME~^web-api- --to-tag v1.2.3

# Обновление всех компонентов в namespace staging до latest
imgctl components upgrade --filter NAMESPACE=staging --to-tag latest

# Обновление всех RUNNING компонентов
imgctl components upgrade --filter STATUS=RUNNING --to-tag v1.2.3

# Проверка плана обновления без выполнения
imgctl components upgrade --filter NAME~^web-api- --to-tag v1.2.3 --check

# Предварительный просмотр (dry-run)
imgctl components upgrade --filter NAMESPACE=production --to-tag latest --dry-run

# Подтверждение без интерактивного запроса
imgctl components upgrade web-api-staging --confirm
imgctl components upgrade --filter STATUS=RUNNING --to-tag v1.2.3 --confirm

# Принудительное обновление без проверки доступности тега
imgctl components upgrade --filter NAME~^web-api- --to-tag v1.2.3 --force

# Экспорт текущих версий
imgctl components upgrade --export-current

# Экспорт последних версий
imgctl components upgrade --export-latest

# Экспорт компонентов для обновления
imgctl components upgrade --export-upgradable
```

### Просмотр логов

Команда для просмотра логов компонентов.

#### Доступные команды

- `imgctl logs <component_name>` - просмотр логов компонента

#### Параметры

- `component_name` - имя компонента
- `--browser`, `-b` - открыть логи в браузере
- `--follow`, `-f` - следить за логами в реальном времени
- `--lines`, `-n <N>` - количество строк логов (по умолчанию: 50)
- `--tail`, `-t <N>` - количество последних записей для показа
- `--no-cache` - отключить кэширование
- `--no-headers` - не показывать заголовок консоли
- `--verbose`, `-v` - подробный вывод HTTP запросов

#### Примеры

```bash
# Показать последние 50 строк логов
imgctl logs web-service-production

# Открыть логи в браузере
imgctl logs web-service-production --browser

# Показать последние 100 строк
imgctl logs web-service-production --lines 100

# Следить за логами в реальном времени
imgctl logs web-service-production --follow

# Показать последние 20 записей
imgctl logs web-service-production --tail 20

# Просмотр логов без кэша
imgctl logs web-service-production --no-cache
```

### Управление реестрами

Команды для управления реестрами образов.

#### Доступные команды

- `imgctl registries list` - список реестров

#### Параметры `registries list`

- `--no-headers` - не показывать заголовки
- `--output <FORMAT>` - формат вывода (table, json, yaml, tsv)

#### Примеры

```bash
# Список реестров
imgctl registries list

# Список реестров без заголовков
imgctl registries list --no-headers
```

### Управление репозиториями

Команды для управления репозиториями образов.

#### Доступные команды

- `imgctl repositories list` - список репозиториев

#### Параметры `repositories list`

- `--no-headers` - не показывать заголовки
- `--output <FORMAT>` - формат вывода (table, json, yaml, tsv)

#### Примеры

```bash
# Список репозиториев
imgctl repositories list

# Список репозиториев без заголовков
imgctl repositories list --no-headers
```

### Управление тегами развертываний

Команда для просмотра доступных тегов для компонента.

#### Доступные команды

- `imgctl components tags <name>` - список тегов компонента

#### Параметры

- `<name>` - имя компонента (например, "web-api-staging")
- `--limit <N>` - ограничить количество записей
- `--no-cache` - не использовать кеш

#### Примеры

```bash
# Список тегов развертываний для компонента
imgctl components tags web-api-staging

# Список тегов с ограничением количества
imgctl components tags web-api-staging --limit 10

# Список тегов без кэша (принудительное обновление)
imgctl components tags web-api-staging --no-cache
```

Команда автоматически извлекает репозиторий и образ из информации о компоненте. Используется двухуровневое кэширование: информация о компоненте кэшируется на 1 час, теги на 5 минут.

### Интерактивная оболочка (REPL)

Команда для запуска интерактивной оболочки imgctl (REPL режим).

#### Доступные команды

- `imgctl shell` - запустить интерактивную оболочку
- `imgctl shell <server>` - запустить с указанием сервера

#### Возможности shell

- **Автодополнение**: полное автодополнение команд, опций и имен ресурсов по Tab
- **История команд**: сохранение истории между сессиями в `~/.imgctl_history`
- **Цветовой промпт**: динамический промпт с именем консоли и цветом из конфигурации
- **Фоновое обновление кэша**: автоматическое обновление кэша в фоне для быстрого автодополнения
- **Быстрые команды**: `exit`, `quit`, `help`, `clear`
- **Сохранение контекста**: все команды выполняются в контексте shell

#### Параметры

- `<server>` - имя сервера для использования (опционально)
- Свертывающееся меню автодополнения не отображается
- История команд работает между сессиями

#### Примеры

```bash
# Запуск shell с текущим сервером
imgctl shell

# Запуск shell с указанием сервера dev
imgctl shell dev

# Запуск shell с сервером stage
imgctl shell stage
```

#### Использование внутри shell

```bash
# Вход в shell (промпт содержит имя консоли из конфигурации)
$ imgctl shell
dev> 

# Выполнение команд внутри shell
dev> components list
dev> components get web-api-staging
dev> nodes list --filter STATUS=READY

# Использование автодополнения (Tab)
dev> components get web-api-<TAB>
# → web-api-staging web-api-production

# Быстрые команды
dev> help          # Показать справку
dev> clear         # Очистить экран
dev> exit          # Выйти из shell
dev> quit          # Выйти из shell
```

#### Особенности

- **Без выпадающего меню**: автодополнение по Tab без визуального меню
- **Цветовой промпт**: показывает имя консоли из конфигурации сервера
- **Фоновое обновление**: кэш компонентов обновляется в фоне для актуального автодополнения
- **История команд**: используйте стрелки вверх/вниз для навигации по истории
- **Контекст сервера**: при указании сервера все команды выполняются в его контексте

#### Кэширование в shell

- Компоненты кэшируются на 5 минут для быстрого автодополнения
- Кэш автоматически обновляется в фоне
- Принудительное обновление: используйте `--no-cache` внутри команд

## Заголовок консоли

imgctl автоматически отображает персонализированный заголовок консоли для визуальной идентификации сервера. Заголовок содержит название консоли и версию системы, отображается цветом, настроенным в конфигурации сервера.

### Формат заголовка

```
᪣ Imagenarium: NEW PRE-PROD                                             v3.2.1
```

- **Левая часть**: `᪣ Imagenarium: {consoleName}` - название консоли из конфигурации
- **Правая часть**: `v{version}` - версия системы
- **Цвет**: Заливка цветом `consoleColor` из конфигурации сервера
- **Адаптивность**: Цвет текста автоматически адаптируется под фон терминала (черный для светлых терминалов, белый для темных)
- **Ширина**: Растягивается на всю ширину терминала
- **Совместимость**: Автоматически определяет тип терминала и его цветовую схему

### Управление отображением

Заголовок автоматически скрывается в следующих случаях:

```bash
# Отключение заголовка и заголовков колонок
imgctl components list --no-headers

# Программный вывод (JSON, YAML, TSV)
imgctl components list --output json
imgctl components list --output yaml
imgctl components list --output tsv

# Комбинированное использование
imgctl components list --no-headers --output json
```

### Кэширование конфигурации

- **Конфиг консоли**: Кэшируется на 24 часа для оптимизации производительности
- **Версия системы**: Кэшируется на 1 час, но в заголовке консоли всегда получается актуальная версия
- **Fallback**: При ошибках отображается заголовок по умолчанию

## Использование в CI/CD

### Docker образ для CI/CD

imgctl предоставляет готовый Docker образ для использования в CI/CD пайплайнах, что позволяет выполнять операции управления компонентами без установки Python окружения.

#### Получение Docker образа

```bash
# Официальный образ из GitLab Container Registry
docker pull registry.gitlab.com/koden8/imgctl:latest

# Или с Docker Hub (если опубликован)
docker pull your-org/imgctl:latest
```

### GitLab CI/CD пример

#### Обновление компонентов в production

```yaml
# .gitlab-ci.yml
stages:
  - deploy

deploy_production:
  stage: deploy
  image: registry.gitlab.com/koden8/imgctl:latest
  variables:
    IMG_SERVER: production
    IMG_USERNAME: $CI_DEPLOY_USER
    IMG_PASSWORD: $CI_DEPLOY_PASSWORD
  script:
    # Обновление компонента до новой версии
    - imgctl components upgrade my-app --to-tag $CI_COMMIT_TAG
  only:
    - tags
  when: manual
```

### Переменные окружения

```bash
# Подключение к серверу
IMG_SERVER=production                    # Имя сервера или URL
IMG_USERNAME=ci-user                     # Пользователь для CI
IMG_PASSWORD=secure-password             # Пароль (используйте GitLab Variables)
```

### Безопасность

Используйте GitLab Variables для хранения паролей:
- `IMG_PASSWORD`: secure-password (Masked)
- `IMG_USERNAME`: ci-user (Protected)

## Кэширование

imgctl использует кэширование для ускорения работы:

### Стратегия кэширования:

- **`components list`** - TTL 5 секунд (быстрое обновление данных)
- **`components get`** - TTL 5 секунд (быстрое обновление данных)  
- **`components start`** - поиск ID кэшируется на 1 час
- **`components tags`** - информация о компоненте кэшируется на 1 час, теги на 5 минут
- **`logs`** - поиск ID компонента кэшируется на 1 час
- **`nodes`, `repositories`, `registries`** - без кэша (всегда свежие данные)

### Параметр `--no-cache`:

Все команды, использующие кэш, поддерживают параметр `--no-cache` для принудительной инвалидации кэша и загрузки свежих данных:

```bash
# Принудительно загрузить свежие данные
imgctl components list --no-cache
imgctl components get web-api-staging --no-cache
imgctl components start web-api-staging --no-cache
imgctl components tags web-api-staging --no-cache
imgctl logs web-api-staging --no-cache
```

### Управление кэшем:

Кэш автоматически управляется системой. Для принудительного обновления данных используйте параметр `--no-cache` в соответствующих командах.

## Управление колонками

imgctl предоставляет гибкую систему управления отображаемыми колонками для всех команд `list`. Вы можете явно указать нужные колонки или модифицировать набор колонок по умолчанию.

### Способы указания колонок

#### 1. Явное указание (замена набором по умолчанию)

Указываете полный список колонок через запятую:

```bash
# Показать только имя и статус
imgctl components list --columns "NAME,STATUS"

# Несколько колонок
imgctl nodes list --columns "NAME,IP,ROLE,STATUS"
imgctl stacks list --columns "NAME,NAMESPACE,VERSION,STATUS,REPO"
```

#### 2. Добавление/удаление колонок относительно набора по умолчанию

Используйте префиксы `+` для добавления и `-` для удаления:

```bash
# Добавить колонку REPLICAS к набору по умолчанию
imgctl components list --columns "+REPLICAS"

# Удалить колонку NAMESPACE из набора по умолчанию
imgctl components list --columns "-NAMESPACE"

# Добавить несколько колонок
imgctl components list --columns "+REPLICAS,+PORTS"

# Удалить несколько колонок
imgctl components list --columns "-UPDATED,-TAG"

# Комбинированное: добавить REPLICAS и удалить NAMESPACE
imgctl components list --columns "+REPLICAS,-NAMESPACE"

# Добавить STACK и REPLICAS
imgctl components list --columns "+STACK,+REPLICAS"

# Убрать UPDATED и STATUS
imgctl components list --columns "-UPDATED,-STATUS"
```

### Доступные колонки по командам

#### Components

**Колонки по умолчанию:** NAME, NAMESPACE, IMAGE, TAG, UPDATED, STATUS

**Доступные колонки:**
- NAME, NAMESPACE, STACK, IMAGE, TAG, STACK_VERSION
- STATUS, REPLICAS, PORTS, UPDATED, CREATED
- REPO, COMMIT, ADMIN_MODE, RUN_APP
- SHOW_ADMIN_MODE, OFF, NETWORKS, ENV
- ENV.<переменная> (динамические переменные окружения)

#### Nodes

**Колонки по умолчанию:** NAME, IP, ROLE, AVAILABILITY, STATUS

**Доступные колонки:**
- NAME, IP, ROLE, AVAILABILITY, STATUS
- DC, DOCKER_VERSION, TOTAL_MEMORY
- SSH_PORT, SSH_USER, EXTERNAL_URL, ID

#### Stacks

**Колонки по умолчанию:** NAME, NAMESPACE, VERSION, STATUS

**Доступные колонки:**
- NAME, NAMESPACE, VERSION, STATUS
- REPO, COMMIT, TIME, TAG, PARAMS
- COMPONENTS, PARAMS.<параметр> (динамические параметры)

#### Servers

**Колонки по умолчанию:** NAME, URL, USERNAME, DESCRIPTION, DEFAULT

**Доступные колонки:**
- NAME, URL, USERNAME, DESCRIPTION, DEFAULT, PASSWORD

### Примеры использования

```bash
# Только имя и статус для быстрого просмотра
imgctl components list --columns "NAME,STATUS"

# Расширенный набор колонок
imgctl components list --columns "NAME,NAMESPACE,IMAGE,TAG,STATUS,REPLICAS,PORTS"

# Добавить REPLICAS к набору по умолчанию
imgctl components list --columns "+REPLICAS"

# Убрать TAG и NAMESPACE, оставить остальное
imgctl components list --columns "-TAG,-NAMESPACE"

# Полный набор для детального анализа
imgctl components list --columns "NAME,NAMESPACE,STACK,IMAGE,TAG,STATUS,REPLICAS,PORTS,UPDATED"

# Строки вывода без лишних деталей
imgctl components list --columns "NAME,IMAGE,TAG"
imgctl nodes list --columns "NAME,IP,STATUS"
imgctl stacks list --columns "NAME,NAMESPACE,STATUS"

# Показать переменные окружения для компонентов
imgctl components list --columns "+ENV"

# Показать конкретную переменную окружения
imgctl components list --columns "+ENV.DB_HOST,+ENV.DB_PORT"
```

### Динамические колонки

#### Переменные окружения (ENV)

Компоненты могут иметь динамические переменные окружения, доступные как отдельные колонки:

```bash
# Показать все переменные окружения
imgctl components list --columns "+ENV"

# Показать конкретные переменные
imgctl components list --columns "NAME,STATUS,+ENV.DB_HOST,+ENV.DB_PORT,+ENV.APP_NAME"

# Фильтрация по переменным окружения
imgctl components list --filter ENV.DB_HOST=localhost --columns "+ENV.DB_HOST"
```

#### Параметры стека (PARAMS)

Стеки могут содержать динамические параметры:

```bash
# Показать все параметры
imgctl stacks list --columns "+PARAMS"

# Показать конкретные параметры
imgctl stacks list --columns "NAME,VERSION,+PARAMS.database,+PARAMS.version"
```

### Сочетание с другими опциями

Колонки можно комбинировать с фильтрацией, форматами вывода и другими опциями:

```bash
# Фильтр + выбор колонок
imgctl components list --filter STATUS=RUNNING --columns "NAME,STATUS,REPLICAS"

# Выбор колонок + JSON
imgctl components list --columns "NAME,STATUS" --output json

# Ограничение + колонки + фильтр
imgctl components list --limit 5 --columns "NAME,STATUS" --filter NAMESPACE=production

# Без заголовков + выбор колонок
imgctl components list --columns "NAME,STATUS" --no-headers

# YAML + выбор колонок
imgctl stacks list --columns "NAME,NAMESPACE,VERSION" --output yaml
```

### Советы по использованию

1. **Быстрый просмотр**: Используйте `--columns "NAME,STATUS"` для компактного вывода
2. **Добавление деталей**: Используйте префикс `+` для добавления колонок к набору по умолчанию
3. **Минималистичный вывод**: Используйте `--columns "-TAG,-UPDATED"` для упрощения
4. **Автоматизация**: Комбинируйте с `--no-headers --output json` для скриптов
5. **Экспорт**: Для программной обработки используйте фиксированный набор колонок

**Примечание:** Компоненты, начинающиеся с "monitor-", автоматически исключаются из вывода для упрощения отображения.

## Форматы вывода

imgctl предоставляет комплексную систему форматирования вывода данных, обеспечивающую интеграцию с различными инструментами и системами.

### Обзор поддерживаемых форматов

Система поддерживает следующие форматы вывода, оптимизированные для различных сценариев использования:

| Формат | Назначение | Особенности |
|--------|------------|-------------|
| `table` | Интерактивный просмотр | Цветовое кодирование, адаптивная ширина |
| `json` | Программная обработка | Атрибуты в lowercase, структурированные данные |
| `yaml` | Конфигурационные файлы | Человекочитаемый формат, атрибуты в lowercase |
| `tsv` | Экспорт без заголовков колонок | Табуляция как разделитель, без заголовков |
| `"{COLUMN}..."` | Пользовательские шаблоны | Гибкое форматирование, синтаксис `{NAME}` |

### Детальное описание форматов

#### Табличный формат (по умолчанию)
- **Назначение**: Интерактивный просмотр и анализ данных
- **Особенности**: 
  - Цветовое кодирование статусов и состояний
  - Адаптивная ширина под размер терминала
  - Визуальное выделение совпадений при фильтрации
  - Форматирование заголовков

#### JSON формат
- **Назначение**: Программная обработка и интеграция с API
- **Особенности**:
  - Атрибуты в lowercase для соответствия стандартам JSON
  - Полное удаление Rich markup для чистых данных
  - Структурированный формат для автоматизированной обработки
  - Совместимость с инструментами типа jq, yq

#### YAML формат
- **Назначение**: Конфигурационные файлы и документирование
- **Особенности**:
  - Человекочитаемый формат с отступами
  - Атрибуты в lowercase для стандартизации
  - Поддержка Unicode и специальных символов
  - Идеален для версионирования конфигураций

#### TSV формат
- **Назначение**: Экспорт без заголовков колонок для автоматизированной обработки
- **Особенности**:
  - Без заголовков колонок (только данные)
  - Табуляция как разделитель
  - Идеален для скриптов и автоматизации
  - Поддержка импорта в Google Sheets, LibreOffice

#### Пользовательские шаблоны
- **Назначение**: Гибкое форматирование под специфические требования
- **Особенности**:
  - Синтаксис `{COLUMN}` для простоты использования
  - Поддержка многострочных шаблонов с `\n`
  - UPPERCASE имена столбцов для консистентности
  - Полное удаление Rich markup в выводе

### Практические примеры использования

#### Сценарий 1: Программная обработка данных
```bash
# Получение данных в JSON формате для автоматизированной обработки
imgctl components list --output json --limit 5

# Фильтрация и обработка с помощью jq
imgctl components list --output json | jq '.[] | select(.status=="RUNNING")'

# Экспорт в файл для дальнейшего анализа
imgctl components list --output json > components.json
```

#### Сценарий 2: Конфигурационное управление
```bash
# Генерация YAML конфигурации для систем управления
imgctl stacks list --output yaml

# Создание конфигурационных файлов
imgctl servers list --output yaml > servers-config.yaml
```

#### Сценарий 3: Отчетность и аналитика
```bash
# Экспорт данных в TSV для автоматизированной обработки
imgctl nodes list --output tsv > infrastructure-report.tsv

# Создание отчетов с фильтрацией
imgctl components list --filter STATUS=RUNNING --output tsv > running-components.tsv
```

#### Сценарий 4: Пользовательские форматы вывода
```bash
# Простое форматирование для скриптов
imgctl components list --output "{NAME} - {STATUS}"

# Многострочные шаблоны для детальной информации
imgctl servers list --output "Server: {NAME}\nURL: {URL}\nDefault: {DEFAULT}"

# Комбинирование с фильтрацией
imgctl components list --filter NAMESPACE=production --output "{NAME}: {STATUS}"
```

#### Сценарий 5: Интеграция с системами
```bash
# Комбинирование фильтрации и форматирования
imgctl components list --filter STATUS=RUNNING --output json
imgctl stacks list --filter NAMESPACE=production --output yaml
imgctl nodes list --columns "NAME,IP,STATUS" --output tsv
```

### Шаблоны (template формат):

Шаблоны используют синтаксис `{COLUMN}`, где `COLUMN` - имя столбца в UPPERCASE:

```bash
# Простой шаблон
--output "{NAME}: {STATUS}"

# Многострочный шаблон
--output "Component: {NAME}\nNamespace: {NAMESPACE}\nImage: {IMAGE}:{TAG}"

# С дополнительным текстом
--output "Component {NAME} in {NAMESPACE} is {STATUS}"
```

## Фильтрация данных

Система фильтрации поддерживает следующие возможности:

- **Множественные фильтры**: возможность применения нескольких условий одновременно
- **Визуальное выделение**: автоматическая подсветка совпадающих результатов
- **Гибкие операторы**: поддержка различных типов сравнения
- **Регулярные выражения**: продвинутый поиск по шаблонам
- **Типизированные сравнения**: автоматическое определение типов данных

### Поддерживаемые операторы фильтрации

| Оператор | Описание | Пример использования |
|----------|----------|---------------------|
| `=` | Точное совпадение | `STATUS=RUNNING` |
| `!=` | Не равно | `NAMESPACE!=test` |
| `~` | Регулярное выражение | `NAME~database` |
| `>` | Больше (для дат/чисел) | `REPLICAS>1` |
| `<` | Меньше (для дат/чисел) | `UPDATED<2025-01-01` |
| `>=` | Больше или равно | `REPLICAS>=2` |
| `<=` | Меньше или равно | `UPDATED<=2025-12-31` |

### Система визуального выделения совпадений

При использовании фильтров в табличном выводе система автоматически применяет визуальное выделение:

- **Оператор точного совпадения (`=`)**: выделяет весь текст при полном соответствии
- **Оператор регулярного выражения (`~`)**: выделяет только совпадающие фрагменты
- **Универсальность**: работает со всеми типами столбцов (NAME, STATUS, NAMESPACE и др.) для всех команд (components, stacks, nodes и др.)
- **Цветовое кодирование**: использует желтый цвет для оптимальной видимости
- **Сохранение базовой подсветки**: основная подсветка статусов и имен сохраняется, совпадения фильтров подсвечиваются дополнительно

### Примеры использования:

```bash
# Простые фильтры
imgctl components list --filter STATUS=RUNNING
imgctl components list --filter NAMESPACE=production
imgctl components list --filter NAME~database

# Исключение тестовых namespace
imgctl components list --filter NAMESPACE!=test

# Множественные фильтры
imgctl components list --filter STATUS=RUNNING --filter NAMESPACE=production

# Поиск по прокси (proxy компоненты)
imgctl components list --filter NAME~proxy

# Фильтрация по датам
imgctl components list --filter UPDATED>2025-01-01

# Фильтрация по числовым значениям
imgctl components list --filter REPLICAS>1

# Комбинирование с другими опциями
imgctl components list --filter STATUS=RUNNING --columns "NAME,STATUS" --limit 5

# Практические сценарии
imgctl components list --filter NAMESPACE=production --filter STATUS=RUNNING  # Все работающие компоненты в production
imgctl components list --filter NAME~api --filter NAMESPACE=production        # API компоненты в production
imgctl components list --filter STATUS=OFF                                 # Остановленные компоненты

# Примеры с подсветкой совпадений (в табличном выводе)
imgctl components list --filter NAME=database-production --columns NAME       # Подсветит "database-production"
imgctl components list --filter NAME~database --columns NAME               # Подсветит "database" в именах
imgctl components list --filter STATUS=RUNNING --columns NAME,STATUS       # Подсветит "RUNNING" в статусах
imgctl stacks list --filter NAME~api --columns NAME                        # Подсветит "api" в именах стеков
imgctl stacks list --filter STATUS=deployed --columns NAME,STATUS          # Подсветит "deployed" в статусах
```

### Доступные колонки для фильтрации:

Список доступных колонок для фильтрации см. в разделе [Управление колонками](#управление-колонками).

## TTL кэширования

imgctl использует кэширование для ускорения работы:

### TTL для команд:

- **`components list`** - TTL 5 секунд (быстрое обновление данных)
- **`components get`** - TTL 5 секунд (быстрое обновление данных)  
- **`components start`** - поиск ID кэшируется на 1 час
- **`components tags`** - информация о компоненте кэшируется на 1 час, теги на 5 минут
- **`logs`** - поиск ID компонента кэшируется на 1 час
- **`nodes`, `repositories`, `registries`** - без кэша (всегда свежие данные)

### Параметр `--no-cache`:

Все команды, использующие кэш, поддерживают параметр `--no-cache` для принудительной инвалидации кэша и загрузки свежих данных:

```bash
# Принудительно загрузить свежие данные
imgctl components list --no-cache
imgctl components get web-api-staging --no-cache
imgctl components start web-api-staging --no-cache
imgctl components tags web-api-staging --no-cache
imgctl logs web-api-staging --no-cache
```

### Управление кэшем:

Кэш автоматически управляется системой. Для принудительного обновления данных используйте параметр `--no-cache` в соответствующих командах.

## Безопасность

imgctl реализует комплексные меры безопасности для защиты чувствительных данных и обеспечения безопасной работы с контейнерной платформой «Imagenarium».

### Обзор безопасности

imgctl обрабатывает чувствительные данные, включая:
- **Cookies сессий** для аутентификации
- **Кеш API запросов** с потенциально чувствительной информацией
- **Конфигурацию серверов** с учетными данными
- **Пароли** для доступа к серверам

Все эти данные защищены многоуровневой системой безопасности.

### Защита файлов данных

#### Расположение файлов

imgctl хранит данные в стандартных директориях согласно канонам операционных систем:

**Linux/macOS:**
- Конфигурация: `~/.config/imgctl/`
- Кеш: `~/.cache/imgctl/`

**Windows:**
- Конфигурация: `%APPDATA%/imgctl/`
- Кеш: `%LOCALAPPDATA%/imgctl/cache/`

#### Типы защищаемых файлов

| Файл | Содержимое | Защита |
|------|------------|--------|
| `servers.json` | Конфигурация серверов | Права доступа + атомарная запись |
| `cookies.json` | Cookies сессий | Права доступа + атомарная запись |
| `cache.json` | Кеш API запросов | Права доступа + атомарная запись |
| `cache_config.json` | Настройки кеширования | Права доступа + атомарная запись |

### Меры безопасности

#### Права доступа к файлам

**Директории:**
- `0o700` (rwx------) - только владелец может читать/писать/выполнять

**Файлы:**
- `0o600` (rw-------) - только владелец может читать/писать

#### Атомарная запись файлов

- **Предотвращение повреждения** файлов при сбоях
- **Исключение race conditions** при одновременном доступе
- **Обеспечение консистентности** данных
- **Использование временных файлов** с последующим атомарным перемещением

#### Шифрование чувствительных данных

- **PBKDF2** с SHA-256 для генерации ключей
- **Fernet** (AES 128 в CBC режиме) для симметричного шифрования
- **100,000 итераций** PBKDF2 для защиты от атак перебора
- **Уникальные ключи** на основе данных пользователя и машины

#### Безопасное хранение паролей

- **Системный keyring** для хранения паролей (macOS Keychain, Windows Credential Manager, SecretService) - используется автоматически если доступен
- **Автоматическое переключение** на `PlaintextKeyring` из `keyrings.alt.file` при недоступности системного keyring
- **В контейнерах и окружениях без GUI:**
  - Автоматически используется `PlaintextKeyring` (без пароля, без запросов)
  - Пароли хранятся в файле `~/.config/imgctl/keyring_pass.cfg` (права доступа 600)
  - Защита обеспечивается правами файловой системы
  - Пароли сохраняются в base64-кодированном виде
- **Простота и надежность:**
  - Минимальная зависимость от внешних библиотек
  - Автоматическое определение и использование доступного бэкенда
  - Работает везде: локально, в контейнерах, без дополнительных настроек

### Рекомендации по безопасности

#### Для пользователей

1. **Регулярно обновляйте** imgctl до последней версии
2. **Не передавайте** файлы конфигурации другим пользователям
3. **Используйте сильные пароли** для серверов
4. **Используйте параметр `--no-cache`** при работе на общих машинах для принудительного обновления данных:
   ```bash
   imgctl components list --no-cache
   imgctl components get web-api-staging --no-cache
   ```

#### Для системных администраторов

1. **Мониторьте права доступа** к директориям imgctl
2. **Настройте ротацию логов** для отслеживания доступа
3. **Используйте SELinux/AppArmor** для дополнительной защиты
4. **Регулярно проверяйте** целостность файлов конфигурации

### Проверка прав доступа

```bash
# Проверка прав доступа к директории кеша
ls -la ~/.cache/imgctl/
# drwx------ 2 user user 4096 Jan 15 10:00 .

# Проверка прав доступа к файлам
ls -la ~/.cache/imgctl/cache.json
# -rw------- 1 user user 1024 Jan 15 10:00 cache.json
```

### Устранение проблем безопасности

#### Неправильные права доступа

**Симптомы:**
- Ошибки доступа к файлам
- Предупреждения о небезопасных правах

**Решение:**
```bash
# Исправление прав доступа к директории
chmod 700 ~/.cache/imgctl
chmod 700 ~/.config/imgctl

# Исправление прав доступа к файлам
chmod 600 ~/.cache/imgctl/*.json
chmod 600 ~/.config/imgctl/*.json
```

#### Поврежденные файлы

**Симптомы:**
- Ошибки при загрузке конфигурации
- Некорректная работа кеша

**Решение:**
```bash
# Удаление поврежденных файлов
rm ~/.cache/imgctl/cache.json
rm ~/.config/imgctl/servers.json

# Пересоздание конфигурации
imgctl servers add my-server --url https://example.com --username admin --password secret
```

### Отладка проблем безопасности

```bash
# Включение подробного вывода для отладки
imgctl --verbose components list

# Проверка прав доступа
ls -la ~/.cache/imgctl/ ~/.config/imgctl/

# Проверка содержимого файлов (осторожно!)
file ~/.cache/imgctl/cache.json
```

## Устранение неполадок

### Проблемы с подключением

**Ошибка: "Не удалось определить конфигурацию сервера"**
```bash
# Решение: добавьте сервер
imgctl servers add dev --url http://your-server:5555 --username admin --password your-password
imgctl servers set-default dev
```

**Ошибка: "Ошибка API: 401 Unauthorized"**
```bash
# Решение: проверьте учетные данные
imgctl servers test dev
# Или обновите пароль
imgctl servers add dev --url http://your-server:5555 --username admin --password new-password
```

**Ошибка: "Connection refused"**
```bash
# Решение: проверьте URL сервера и доступность
curl -I http://your-server:5555
```

**Ошибка: "No recommended backend was available" при сохранении пароля в контейнере**
```bash
# Решение: imgctl автоматически использует PlaintextKeyring из keyrings.alt
# Все необходимые зависимости включены в пакет imgctl

# Проверьте что пароль сохранен:
ls -la ~/.config/imgctl/keyring_pass.cfg
# Файл должен существовать с правами 600
```

### Проблемы с кэшем

**Устаревшие данные в выводе команд**
```bash
# Решение: принудительно обновите кэш
imgctl components list --no-cache
imgctl components get my-component --no-cache
```

**Ошибка: "Компонент не найден в кэше"**
```bash
# Решение: обновите кэш и повторите попытку
imgctl components list --no-cache
imgctl logs my-component --no-cache
```

### Проблемы с логами

**Логи не отображаются или показывают ошибку 404**
```bash
# Решение: обновите кэш компонентов
imgctl logs my-component --no-cache
```

**Медленная загрузка логов**
```bash
# Решение: используйте фильтрацию или ограничение строк
imgctl logs my-component --lines 50
imgctl logs my-component --level ERROR
```

### Проблемы с Bash Completion

**Автодополнение не работает**
```bash
# Решение: переустановите completion
./imgctl-completion.bash uninstall
./imgctl-completion.bash install
source ~/.bashrc
```

**Автодополнение показывает устаревшие данные**
```bash
# Решение: очистите кэш completion
rm -rf ~/.cache/imgctl/
./imgctl-completion.bash test
```

### Отладка

**Включите подробный вывод**
```bash
imgctl --verbose components list
```

**Проверьте конфигурацию**
```bash
imgctl servers list
imgctl servers test dev
```

## Bash Completion

imgctl поддерживает полное автодополнение для всех команд, параметров и имен ресурсов.

### Установка completion

```bash
# Установить completion (по умолчанию в ~/.bashrc)
./imgctl-completion.bash install

# Установить в ~/.bashrc
./imgctl-completion.bash install --bashrc

# Установить в ~/.bash_profile
./imgctl-completion.bash install --profile

# Проверить установку
./imgctl-completion.bash test

# Удалить completion
./imgctl-completion.bash uninstall

# Показать справку
./imgctl-completion.bash help
```

### Возможности completion

- **Команды и подкоманды**: автодополнение всех команд
- **Параметры**: все опции командной строки
- **Имена ресурсов**: компоненты, стеки, ноды, серверы, репозитории, реестры
- **Колонки**: для команд `list` с `--columns`
- **Кэширование**: быстрая работа благодаря локальному кэшу
- **Работа в контексте сервера**: через `--server` или переменные окружения
- **Скрытие служебных компонентов**: компоненты, начинающиеся с `monitor-`

### Примеры использования

```bash
# Автодополнение команд
imgctl <TAB>
# → servers nodes stacks components registries repositories logs

# Автодополнение компонентов
imgctl components get <TAB>
# → web-api-staging database-production ...

# Автодополнение параметров
imgctl components list --<TAB>
# → --limit --no-cache --columns --filter --no-headers ...

# Автодополнение с сервером
imgctl --server dev components get <TAB>
# → database-production cache-production ...

# Автодополнение с переменными окружения
IMG_SERVER=dev imgctl components get <TAB>
# → database-production cache-production ...

# Автодополнение колонок
imgctl components list --custom-columns <TAB>
# → NAME NAMESPACE STACK IMAGE TAG STATUS ...
```

### Кэширование

Completion использует кэширование для быстрой работы:
- Кэш создается отдельно для каждого сервера
- Данные кэшируются в `~/.cache/imgctl/<server_name>/`
- Кэш автоматически обновляется при необходимости
- Поддерживает работу с переменными окружения `IMG_SERVER`, `IMG_USERNAME`, `IMG_PASSWORD`

### Управление completion

```bash
./imgctl-completion.bash test      # Тестирование
./imgctl-completion.bash install   # Установка
./imgctl-completion.bash uninstall # Удаление
./imgctl-completion.bash help      # Справка
```


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "imgctl",
    "maintainer": "@koden8",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "docker, containers, orchestration, cli, imagenarium",
    "author": "@koden8",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/aa/ee/f1220d0c83859bc884c46d9ea129b232362a3710d937f89f0c19570c9f6a/imgctl-3.0.10.tar.gz",
    "platform": null,
    "description": "# imgctl\n\n\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u00abImagenarium\u00bb.\n\n## \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\n\nimgctl \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u00abImagenarium\u00bb.\n\n## \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\n\n- [\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435](#\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435)\n- [\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430](#\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430)\n- [\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442](#\u0431\u044b\u0441\u0442\u0440\u044b\u0439-\u0441\u0442\u0430\u0440\u0442)\n- [\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f](#\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f)\n- [\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f](#\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f)\n- [\u041a\u043e\u043c\u0430\u043d\u0434\u044b](#\u043a\u043e\u043c\u0430\u043d\u0434\u044b)\n- [\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u0438](#\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a-\u043a\u043e\u043d\u0441\u043e\u043b\u0438)\n- [\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 CI/CD](#\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-\u0432-cicd)\n- [\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435](#\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)\n- [\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438](#\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435-\u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438)\n- [\u0424\u043e\u0440\u043c\u0430\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430](#\u0444\u043e\u0440\u043c\u0430\u0442\u044b-\u0432\u044b\u0432\u043e\u0434\u0430)\n- [\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445](#\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f-\u0434\u0430\u043d\u043d\u044b\u0445)\n- [\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c](#\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c)\n- [\u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043e\u043a](#\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435-\u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043e\u043a)\n- [Bash Completion](#bash-completion)\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n### \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\n\n\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b imgctl \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439:\n\n- **Python**: \u0432\u0435\u0440\u0441\u0438\u044f 3.8 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435 (\u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 pip)\n- **\u0421\u0435\u0442\u0435\u0432\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435**: \u0434\u043e\u0441\u0442\u0443\u043f \u043a API-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u043c \u00abImagenarium\u00bb\n- **\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430**: Linux, macOS, Windows\n\n### \u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\n\n#### 1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Homebrew (macOS)\n\n```bash\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c tap\nbrew tap koden8/homebrew-imgctl https://gitlab.com/koden8/homebrew-imgctl.git\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c imgctl\nbrew install imgctl\n\n# \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\nbrew upgrade imgctl\n```\n\n#### 2. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 Docker\n\n```bash\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438\ndocker run --rm -it registry.gitlab.com/koden8/imgctl:latest\n\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438\ndocker run --rm -it registry.gitlab.com/koden8/imgctl:3.0.9\n\n# \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043b\u0438\u0430\u0441 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430\nalias imgctl='docker run --rm -it -v ~/.config/imgctl:/home/imgctl/.config/imgctl registry.gitlab.com/koden8/imgctl:latest'\n```\n\n**\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:** \u0412 Docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 imgctl \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 `PlaintextKeyring` \u0438\u0437 `keyrings.alt.file` \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 keyring \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u041f\u0430\u0440\u043e\u043b\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 `~/.config/imgctl/keyring_pass.cfg` \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 600. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0430\u0440\u043e\u043b\u044f.\n\n#### 3. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 pip (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)\n\n**\u0421 PyPI:**\n```bash\n# \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c pip\npip install --upgrade pip\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441 PyPI\npip install imgctl\n\n# \u0418\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e\npip install imgctl==3.0.9\n```\n\n**\u0418\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 GitLab:**\n```bash\n# \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u043e\u0432 GitLab\npip install https://gitlab.com/koden8/imgctl/-/archive/main/imgctl-main.tar.gz\n\n# \u0418\u043b\u0438 \u0438\u0437 \u0440\u0435\u043b\u0438\u0437\u043e\u0432\npip install https://gitlab.com/koden8/imgctl/-/archive/v3.0.9/imgctl-v3.0.9.tar.gz\n```\n\n**\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 bash completion \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 pip:**\n\n```bash\n# \u041d\u0430\u0439\u0442\u0438 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c bash completion\nCOMPLETION_FILE=$(python3 -c \"import os, imgctl; print(os.path.join(os.path.dirname(imgctl.__file__), 'imgctl-completion.bash'))\")\nbash \"$COMPLETION_FILE\" install\n\n# \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 bash \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435:\nsource ~/.bashrc\n```\n\n\u0418\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 `~/.bashrc`:\n\n```bash\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 ~/.bashrc\nsource $(python3 -c \"import os, imgctl; print(os.path.join(os.path.dirname(imgctl.__file__), 'imgctl-completion.bash'))\")\n```\n\n### \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\n\n\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438:\n\n```bash\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\nimgctl --help\n```\n\n### \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\n\n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435:\n\n1. **\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e Python**: `python3 --version` (\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 3.8+)\n2. **\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 pip**: `pip install --upgrade pip`\n3. **\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e**: `pip install -e .`\n\n#### \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439\n\n**\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \"No module named 'imgctl'\"**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u043a\u0435\u0442\npip uninstall imgctl\npip install --no-cache-dir imgctl\n```\n\n**\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \"Permission denied\" \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u043b\u0430\u0433 --user\npip install --user imgctl\n```\n\n**\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438\npip install --upgrade imgctl\n```\n\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n\u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 imgctl.\n\n### \u042d\u0442\u0430\u043f 1: \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\n\n\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u00abImagenarium\u00bb \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:\n\n```bash\n# \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\nimgctl servers add dev \\\n  --url http://your-server:5555 \\\n  --username admin \\\n  --password your-password \\\n  --description \"Development environment\"\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b\nimgctl servers set-default dev\n```\n\n### \u042d\u0442\u0430\u043f 2: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\n\n\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432:\n\n```bash\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443\nimgctl servers test dev\n\n# \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432\nimgctl nodes list\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432\nimgctl registries list\n```\n\n### \u042d\u0442\u0430\u043f 3: \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u0442\u0435\u043a\u0430\u043c\u0438\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl components list\n\n# \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435\nimgctl components get my-component\n\n# \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432\nimgctl logs my-component --follow\n```\n\n## \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\n\nimgctl \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430):\n\n1. **\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438** (\u0432\u044b\u0441\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442): `--server`, `--username`, `--password`\n2. **\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f**: `IMG_SERVER`, `IMG_USERNAME`, `IMG_PASSWORD`\n3. **\u0424\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438**: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 `--config`\n4. **\u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e** \u0438\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432\n\n### \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n```bash\n# \u0427\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0432\u044b\u0441\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442)\nimgctl --server dev components list\nimgctl --server http://server:5555 --username admin --password pass components list\n\n# \u0427\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\nIMG_SERVER=dev imgctl components list\nIMG_SERVER=http://server:5555 IMG_USERNAME=admin IMG_PASSWORD=pass imgctl components list\n\n# \u0427\u0435\u0440\u0435\u0437 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\nimgctl --config /path/to/config.yaml components list\n\n# \u0427\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043d\u0438\u0437\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442)\nimgctl components list\n```\n\n### \u041f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\nimgctl \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0449\u0435\u0442 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445:\n\n| \u041e\u0421 | \u041f\u0443\u0442\u044c | \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 |\n|----|------|---------------------|\n| **Linux** | `~/.config/imgctl/config.yaml` | `/home/username/.config/imgctl/config.yaml` |\n| **macOS** | `~/.config/imgctl/config.yaml` | `/Users/username/.config/imgctl/config.yaml` |\n| **Windows** | `%APPDATA%/imgctl/config.yaml` | `C:\\Users\\username\\AppData\\Roaming\\imgctl\\config.yaml` |\n\n### \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\n```yaml\nserver: \"http://your-imagenarium-server:5555\"\nusername: \"your-username\"\npassword: \"your-password\"\ntimeout: 30\nverify_ssl: true\n```\n\n## \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\n\n### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438\n\n| \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 | \u041a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 | \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 | \u041f\u0440\u0438\u043c\u0435\u0440 |\n|----------|----------------|----------|---------|\n| `--server` | `-s` | \u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 URL \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f | `--server dev` \u0438\u043b\u0438 `--server http://server:5555` |\n| `--username` | `-u` | \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f) | `--username admin` |\n| `--password` | `-p` | \u041f\u0430\u0440\u043e\u043b\u044c (\u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f) | `--password secret` |\n| `--config` | `-c` | \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 | `--config /path/to/config.yml` |\n| `--verbose` | `-v` | \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 | `--verbose` |\n\n### \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\n\n| \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f | \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 | \u041f\u0440\u0438\u043c\u0435\u0440 |\n|------------|----------|---------|\n| `IMG_SERVER` | \u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 URL \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f | `IMG_SERVER=dev` \u0438\u043b\u0438 `IMG_SERVER=http://server:5555` |\n| `IMG_USERNAME` | \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f) | `IMG_USERNAME=admin` |\n| `IMG_PASSWORD` | \u041f\u0430\u0440\u043e\u043b\u044c (\u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f) | `IMG_PASSWORD=secret` |\n\n### \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n1. **\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442**: \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\n2. **URL vs \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430**: \n   - \u0415\u0441\u043b\u0438 `IMG_SERVER` \u0438\u043b\u0438 `--server` \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 URL (\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 `http://` \u0438\u043b\u0438 `https://`), \u0442\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f `IMG_USERNAME` \u0438 `IMG_PASSWORD`\n   - \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\n3. **\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c**: \u041f\u0430\u0440\u043e\u043b\u0438 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b, \u0447\u0435\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435\n\n### \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\n```bash\n# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435)\nimgctl --server dev components list\nIMG_SERVER=dev imgctl components list\n\n# \u041f\u0440\u044f\u043c\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 URL\nimgctl --server http://server:5555 --username admin --password secret components list\nIMG_SERVER=http://server:5555 IMG_USERNAME=admin IMG_PASSWORD=secret imgctl components list\n\n# \u0421\u043c\u0435\u0448\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 (\u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432)\nIMG_SERVER=http://server:5555 imgctl --username admin --password secret components list\n```\n\n## \u041a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl servers` - \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438\n- `imgctl nodes` - \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0434\u0430\u043c\u0438\n- `imgctl stacks` - \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430\u043c\u0438\n- `imgctl components` - \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438\n- `imgctl logs` - \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\n- `imgctl registries` - \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u043c\u0438\n- `imgctl repositories` - \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438\n- `imgctl shell` - \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 (REPL \u0440\u0435\u0436\u0438\u043c)\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl servers list` - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432\n- `imgctl servers add <name>` - \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\n- `imgctl servers get <name>` - \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0435\n- `imgctl servers update <name>` - \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- `imgctl servers remove <name>` - \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\n- `imgctl servers set-default <name>` - \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n- `imgctl servers test <name>` - \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f `list`\n\n- **NAME**: \u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- **URL**: URL \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- **USERNAME**: \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\n- **DESCRIPTION**: \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- **DEFAULT**: \u041e\u0442\u043c\u0435\u0442\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u2713)\n- **PASSWORD**: \u041f\u0430\u0440\u043e\u043b\u044c (\u0442\u043e\u043b\u044c\u043a\u043e \u0441 --show-passwords)\n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: NAME, URL, USERNAME, DESCRIPTION, DEFAULT\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `servers list`\n\n- `--columns <COLUMNS>` - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\n- `--filter <FILTER>` - \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445\n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\n- `--show-passwords` - \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u0438 (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)\n- `--output <FORMAT>` - \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 (table, json, yaml, tsv)\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432\nimgctl servers list\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c\u0438\nimgctl servers list --columns \"NAME,URL,USERNAME,DESCRIPTION\"\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0438\u043c\u0435\u043d\u0438\nimgctl servers list --filter NAME=dev\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e URL (\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435)\nimgctl servers list --filter URL~registry\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u0438 (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)\nimgctl servers list --show-passwords\n\n# \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\nimgctl servers add dev --url http://dev.example.com:5555 --username admin --password secret\n\n# \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 TTL\nimgctl servers add prod \\\n  --url http://prod.example.com:5555 \\\n  --username admin \\\n  --password secret \\\n  --description \"Production environment\" \\\n  --ttl /deployments/list:10 \\\n  --ttl /deployments/tags:60\n\n# \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0435\nimgctl servers get dev\n\n# \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 TTL\nimgctl servers get prod --format json\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\nimgctl servers set-default dev\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 TTL\nimgctl servers update prod \\\n  --description \"Updated production environment\" \\\n  --ttl /api/v3/nodes:5 \\\n  --ttl /deployments/list:15\n\n# \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\nimgctl servers test dev\n\n# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\nimgctl servers remove dev\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0434\u0430\u043c\u0438\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0434\u0430\u043c\u0438 (\u0443\u0437\u043b\u0430\u043c\u0438) \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl nodes list` - \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0434\n- `imgctl nodes get <name>` - \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u043e\u0434\u0435\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f `list`\n\n- **NAME**: \u0418\u043c\u044f \u043d\u043e\u0434\u044b\n- **IP**: IP \u0430\u0434\u0440\u0435\u0441  \n- **ROLE**: \u0420\u043e\u043b\u044c (manager/worker)\n- **AVAILABILITY**: \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c (ACTIVE/DRAIN/PAUSE)\n- **STATUS**: \u0421\u0442\u0430\u0442\u0443\u0441 (READY/UNHEALTHY)\n- **DC**: \u0414\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\n- **DOCKER_VERSION**: \u0412\u0435\u0440\u0441\u0438\u044f Docker\n- **TOTAL_MEMORY**: \u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438 (GB)\n- **SSH_PORT**: SSH \u043f\u043e\u0440\u0442\n- **SSH_USER**: SSH \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\n- **EXTERNAL_URL**: \u0412\u043d\u0435\u0448\u043d\u0438\u0439 URL\n- **ID**: \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: NAME, IP, ROLE, AVAILABILITY, STATUS\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `nodes list`\n\n- `--columns <COLUMNS>` - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\n- `--filter <FILTER>` - \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445  \n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\n- `--output <FORMAT>` - \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 (table, json, yaml, tsv)\n- `--limit <N>` - \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0434\nimgctl nodes list\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0434 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c\u0438\nimgctl nodes list --columns \"NAME,IP,DC,DOCKER_VERSION,TOTAL_MEMORY\"\n\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b\nimgctl nodes list --columns \"+TOTAL_MEMORY,-ID\"\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443\nimgctl nodes list --filter STATUS=READY\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0440\u043e\u043b\u0438\nimgctl nodes list --filter ROLE=manager\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e IP (\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435)\nimgctl nodes list --filter IP~10.9\n\n# \u0412\u044b\u0432\u043e\u0434 \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\nimgctl nodes list --no-headers\n\n# \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u043e\u0434\u0435\nimgctl nodes get node-01\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0434\u044b\nimgctl nodes update node-01 --role worker --availability drain\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430\u043c\u0438\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430\u043c\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0439.\n\n#### \u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u043c\u0435\u043d\n\n\u0412\u0441\u0435 \u0438\u043c\u0435\u043d\u0430 \u0441\u0442\u0435\u043a\u043e\u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 `stack@namespace`:\n- `database@production` - \u0441\u0442\u0435\u043a database \u0432 namespace production\n- `web-api@staging` - \u0441\u0442\u0435\u043a web-api \u0432 namespace staging\n\n\u0418\u043c\u0435\u043d\u0430 \u0438\u043c\u0435\u044e\u0442 \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443: \u0438\u043c\u044f \u0441\u0442\u0435\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u043b\u044b\u043c, \u0430 `@namespace` - \u0441\u0435\u0440\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl stacks list` - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0435\u043a\u043e\u0432\n- `imgctl stacks get <stack>@<namespace>` - \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0442\u0435\u043a\u0435\n- `imgctl stacks template <stack>` - \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0441\u0442\u0435\u043a\u0430\n- `imgctl stacks diff <stack1> <stack2>` - \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f `list`\n\n- **NAME**: \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 (\u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 stack@namespace)\n- **NAMESPACE**: \u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d\n- **VERSION**: \u0412\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0435\u043a\u0430\n- **STATUS**: \u0421\u0442\u0430\u0442\u0443\u0441 \u0441\u0442\u0435\u043a\u0430\n- **REPO**: \u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\n- **COMMIT**: Git \u043a\u043e\u043c\u043c\u0438\u0442\n- **TIME**: \u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f\n- **TAG**: \u0422\u0435\u0433 \u0432\u0435\u0440\u0441\u0438\u0438\n- **PARAMETERS**: \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\n- **COMPONENTS**: \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: NAME, NAMESPACE, VERSION, STATUS\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `stacks list`\n\n- `--columns <COLUMNS>` - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\n- `--filter <FILTER>` - \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445\n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\n- `--output <FORMAT>` - \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 (table, json, yaml, tsv)\n- `--limit <N>` - \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0435\u043a\u043e\u0432\nimgctl stacks list\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c\u0438\nimgctl stacks list --columns \"NAME,NAMESPACE,VERSION,STATUS,REPO,COMMIT,TIME,TAG\"\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443\nimgctl stacks list --filter STATUS=deployed\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e namespace\nimgctl stacks list --filter NAMESPACE=production\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 (\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435)\nimgctl stacks list --filter NAME~database\n\n# \u0412\u044b\u0432\u043e\u0434 \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\nimgctl stacks list --no-headers\n\n# \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0442\u0435\u043a\u0435\nimgctl stacks get database@production\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0439.\n\n#### \u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u043c\u0435\u043d\n\n\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e \u0441\u0442\u0435\u043a\u0430\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 `stack@namespace`. \u0412 \u043f\u043e\u043b\u0435 **STACK** \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0442\u0435\u043a\u0430 \u0432 \u044d\u0442\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl components list` - \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\n- `imgctl components get <name>` - \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435\n- `imgctl components start <name>` - \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n- `imgctl components stop <name>` - \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n- `imgctl components upgrade` - \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\n- `imgctl components tags <name>` - \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n- `imgctl components logs <name>` - \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f `list`\n\n- **NAME**: \u0418\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n- **NAMESPACE**: \u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d\n- **STACK**: ID \u0441\u0442\u0435\u043a\u0430 (\u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 stack@namespace)\n- **IMAGE**: \u041e\u0431\u0440\u0430\u0437 Docker\n- **TAG**: \u0422\u0435\u0433 \u043e\u0431\u0440\u0430\u0437\u0430\n- **STACK_VERSION**: \u0412\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0435\u043a\u0430\n- **STATUS**: \u0421\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n- **REPLICAS**: \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043f\u043b\u0438\u043a\n- **PORTS**: \u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u043f\u043e\u0440\u0442\u043e\u0432\n- **UPDATED**: \u0414\u0430\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n- **CREATED**: \u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\n- **REPO**: \u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\n- **COMMIT**: Git \u043a\u043e\u043c\u043c\u0438\u0442\n- **ADMIN_MODE**: \u0420\u0435\u0436\u0438\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\n- **RUN_APP**: \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\n- **SHOW_ADMIN_MODE**: \u041f\u043e\u043a\u0430\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\n- **OFF**: \u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\n- **NETWORKS**: \u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: NAME, NAMESPACE, IMAGE, TAG, UPDATED, STATUS\n\n#### \u0421\u0442\u0430\u0442\u0443\u0441\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\n\n- **RUNNING**: \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u0432\u0441\u0435 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b) - \u0437\u0435\u043b\u0435\u043d\u044b\u0439\n- **STOPPED**: \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d - \u0441\u0435\u0440\u044b\u0439\n- **STARTING**: \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f - \u0436\u0435\u043b\u0442\u044b\u0439\n- **PARTIAL**: \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0435\u043f\u043b\u0438\u043a \u0447\u0435\u043c \u0436\u0435\u043b\u0430\u0435\u0442\u0441\u044f) - \u0436\u0435\u043b\u0442\u044b\u0439\n- **OFF**: \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d - \u0441\u0435\u0440\u044b\u0439\n- **BROKEN**: \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u043b\u043e\u043c\u0430\u043d (\u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 component \u0438 task) - \u0436\u0435\u043b\u0442\u044b\u0439\n- **CANCELED**: \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u0430 - \u043a\u0440\u0430\u0441\u043d\u044b\u0439\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `components list`\n\n- `--columns <COLUMNS>` - \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\n- `--filter <FILTER>` - \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445\n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\n- `--output <FORMAT>` - \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 (table, json, yaml, tsv)\n- `--limit <N>` - \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439\n- `--no-cache` - \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u044d\u0448\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `components upgrade`\n\n- `<component>[:tag]` - \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435)\n- `--filter <FILTER>` - \u0444\u0438\u043b\u044c\u0442\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n- `--to-tag <TAG>` - \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0433\u0430\n- `--from-file <FILE>` - \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430\n- `--check` - \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043b\u0430\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\n- `--dry-run` - \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0431\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\n- `--confirm` - \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438)\n- `--force` - \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0433\u0430\n- `--no-cache` - \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u044d\u0448\n- `--export-current` - \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439\n- `--export-latest` - \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439\n- `--export-upgradable` - \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n- `--verbose` - \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl components list\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c\u0438\nimgctl components list --custom-columns \"NAME,NAMESPACE,STACK,CREATED,REPO,COMMIT,PORTS\"\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0438\u043c\u0435\u043d\u0438\nimgctl components list --filter NAME~web-api-\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e namespace\nimgctl components list --filter NAMESPACE=production\n\n# \u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443\nimgctl components list --filter STATUS=RUNNING\n\n# \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435\nimgctl components get web-api-staging\n\n# \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0431\u0435\u0437 \u043a\u044d\u0448\u0430\nimgctl components get web-api-staging --no-cache\n\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\nimgctl components start web-api-staging\n\n# \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\nimgctl components stop web-api-staging\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0442\u0435\u0433\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\nimgctl components upgrade\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0442\u0435\u0433\u0430\nimgctl components upgrade web-api-staging\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u0433\u0430\nimgctl components upgrade web-api-staging:v1.2.3\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl components upgrade web-api-staging db-staging:latest\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 (tab-separated \u0444\u043e\u0440\u043c\u0430\u0442)\nimgctl components upgrade --from-file upgrades.txt\n\n# \u041c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438\nimgctl components upgrade --filter NAME~^web-api- --to-tag v1.2.3\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432 namespace staging \u0434\u043e latest\nimgctl components upgrade --filter NAMESPACE=staging --to-tag latest\n\n# \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 RUNNING \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl components upgrade --filter STATUS=RUNNING --to-tag v1.2.3\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043b\u0430\u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\nimgctl components upgrade --filter NAME~^web-api- --to-tag v1.2.3 --check\n\n# \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 (dry-run)\nimgctl components upgrade --filter NAMESPACE=production --to-tag latest --dry-run\n\n# \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430\nimgctl components upgrade web-api-staging --confirm\nimgctl components upgrade --filter STATUS=RUNNING --to-tag v1.2.3 --confirm\n\n# \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0433\u0430\nimgctl components upgrade --filter NAME~^web-api- --to-tag v1.2.3 --force\n\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439\nimgctl components upgrade --export-current\n\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439\nimgctl components upgrade --export-latest\n\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\nimgctl components upgrade --export-upgradable\n```\n\n### \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043b\u043e\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl logs <component_name>` - \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\n\n- `component_name` - \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n- `--browser`, `-b` - \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u043e\u0433\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n- `--follow`, `-f` - \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043b\u043e\u0433\u0430\u043c\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\n- `--lines`, `-n <N>` - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043b\u043e\u0433\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 50)\n- `--tail`, `-t <N>` - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430\n- `--no-cache` - \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u0438\n- `--verbose`, `-v` - \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 50 \u0441\u0442\u0440\u043e\u043a \u043b\u043e\u0433\u043e\u0432\nimgctl logs web-service-production\n\n# \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043b\u043e\u0433\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\nimgctl logs web-service-production --browser\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 100 \u0441\u0442\u0440\u043e\u043a\nimgctl logs web-service-production --lines 100\n\n# \u0421\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043b\u043e\u0433\u0430\u043c\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\nimgctl logs web-service-production --follow\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20 \u0437\u0430\u043f\u0438\u0441\u0435\u0439\nimgctl logs web-service-production --tail 20\n\n# \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u043e\u0432 \u0431\u0435\u0437 \u043a\u044d\u0448\u0430\nimgctl logs web-service-production --no-cache\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u043c\u0438\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl registries list` - \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `registries list`\n\n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\n- `--output <FORMAT>` - \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 (table, json, yaml, tsv)\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432\nimgctl registries list\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432 \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\nimgctl registries list --no-headers\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl repositories list` - \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b `repositories list`\n\n- `--no-headers` - \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\n- `--output <FORMAT>` - \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430 (table, json, yaml, tsv)\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432\nimgctl repositories list\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\nimgctl repositories list --no-headers\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0433\u0430\u043c\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0439\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0442\u0435\u0433\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl components tags <name>` - \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\n\n- `<name>` - \u0438\u043c\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"web-api-staging\")\n- `--limit <N>` - \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439\n- `--no-cache` - \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0435\u0448\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\nimgctl components tags web-api-staging\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430\nimgctl components tags web-api-staging --limit 10\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0431\u0435\u0437 \u043a\u044d\u0448\u0430 (\u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435)\nimgctl components tags web-api-staging --no-cache\n```\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441, \u0442\u0435\u0433\u0438 \u043d\u0430 5 \u043c\u0438\u043d\u0443\u0442.\n\n### \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 (REPL)\n\n\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 imgctl (REPL \u0440\u0435\u0436\u0438\u043c).\n\n#### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\n\n- `imgctl shell` - \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0443\n- `imgctl shell <server>` - \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n\n#### \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 shell\n\n- **\u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435**: \u043f\u043e\u043b\u043d\u043e\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434, \u043e\u043f\u0446\u0438\u0439 \u0438 \u0438\u043c\u0435\u043d \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e Tab\n- **\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434**: \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 \u0432 `~/.imgctl_history`\n- **\u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043c\u043f\u0442**: \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u043c\u043f\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n- **\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u044d\u0448\u0430**: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u044d\u0448\u0430 \u0432 \u0444\u043e\u043d\u0435 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\n- **\u0411\u044b\u0441\u0442\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b**: `exit`, `quit`, `help`, `clear`\n- **\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430**: \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 shell\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\n\n- `<server>` - \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)\n- \u0421\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u043c\u0435\u043d\u044e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f\n- \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440\u044b\n\n```bash\n# \u0417\u0430\u043f\u0443\u0441\u043a shell \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c\nimgctl shell\n\n# \u0417\u0430\u043f\u0443\u0441\u043a shell \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 dev\nimgctl shell dev\n\n# \u0417\u0430\u043f\u0443\u0441\u043a shell \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c stage\nimgctl shell stage\n```\n\n#### \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 shell\n\n```bash\n# \u0412\u0445\u043e\u0434 \u0432 shell (\u043f\u0440\u043e\u043c\u043f\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043c\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438)\n$ imgctl shell\ndev> \n\n# \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 shell\ndev> components list\ndev> components get web-api-staging\ndev> nodes list --filter STATUS=READY\n\n# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (Tab)\ndev> components get web-api-<TAB>\n# \u2192 web-api-staging web-api-production\n\n# \u0411\u044b\u0441\u0442\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\ndev> help          # \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443\ndev> clear         # \u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u044d\u043a\u0440\u0430\u043d\ndev> exit          # \u0412\u044b\u0439\u0442\u0438 \u0438\u0437 shell\ndev> quit          # \u0412\u044b\u0439\u0442\u0438 \u0438\u0437 shell\n```\n\n#### \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438\n\n- **\u0411\u0435\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0435\u043d\u044e**: \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e Tab \u0431\u0435\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e\n- **\u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u043c\u043f\u0442**: \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- **\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435**: \u043a\u044d\u0448 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u043d\u0435 \u0434\u043b\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\n- **\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434**: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u0432\u0435\u0440\u0445/\u0432\u043d\u0438\u0437 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438\n- **\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430**: \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435\n\n#### \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 shell\n\n- \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 5 \u043c\u0438\u043d\u0443\u0442 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\n- \u041a\u044d\u0448 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u043e\u043d\u0435\n- \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 `--no-cache` \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\n\n## \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u0438\n\nimgctl \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n\n### \u0424\u043e\u0440\u043c\u0430\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\n\n```\n\u1aa3 Imagenarium: NEW PRE-PROD                                             v3.2.1\n```\n\n- **\u041b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c**: `\u1aa3 Imagenarium: {consoleName}` - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n- **\u041f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c**: `v{version}` - \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b\n- **\u0426\u0432\u0435\u0442**: \u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u0446\u0432\u0435\u0442\u043e\u043c `consoleColor` \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- **\u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c**: \u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0444\u043e\u043d \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 (\u0447\u0435\u0440\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u0432\u0435\u0442\u043b\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u0432, \u0431\u0435\u043b\u044b\u0439 \u0434\u043b\u044f \u0442\u0435\u043c\u043d\u044b\u0445)\n- **\u0428\u0438\u0440\u0438\u043d\u0430**: \u0420\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430\n- **\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c**: \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0438 \u0435\u0433\u043e \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u0441\u0445\u0435\u043c\u0443\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c\n\n\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445:\n\n```bash\n# \u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --no-headers\n\n# \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 (JSON, YAML, TSV)\nimgctl components list --output json\nimgctl components list --output yaml\nimgctl components list --output tsv\n\n# \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\nimgctl components list --no-headers --output json\n```\n\n### \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\n- **\u041a\u043e\u043d\u0444\u0438\u0433 \u043a\u043e\u043d\u0441\u043e\u043b\u0438**: \u041a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 24 \u0447\u0430\u0441\u0430 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\n- **\u0412\u0435\u0440\u0441\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b**: \u041a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441, \u043d\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f\n- **Fallback**: \u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n\n## \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 CI/CD\n\n### Docker \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f CI/CD\n\nimgctl \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Docker \u043e\u0431\u0440\u0430\u0437 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 CI/CD \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430\u0445, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Python \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.\n\n#### \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 Docker \u043e\u0431\u0440\u0430\u0437\u0430\n\n```bash\n# \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0438\u0437 GitLab Container Registry\ndocker pull registry.gitlab.com/koden8/imgctl:latest\n\n# \u0418\u043b\u0438 \u0441 Docker Hub (\u0435\u0441\u043b\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d)\ndocker pull your-org/imgctl:latest\n```\n\n### GitLab CI/CD \u043f\u0440\u0438\u043c\u0435\u0440\n\n#### \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432 production\n\n```yaml\n# .gitlab-ci.yml\nstages:\n  - deploy\n\ndeploy_production:\n  stage: deploy\n  image: registry.gitlab.com/koden8/imgctl:latest\n  variables:\n    IMG_SERVER: production\n    IMG_USERNAME: $CI_DEPLOY_USER\n    IMG_PASSWORD: $CI_DEPLOY_PASSWORD\n  script:\n    # \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043e \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438\n    - imgctl components upgrade my-app --to-tag $CI_COMMIT_TAG\n  only:\n    - tags\n  when: manual\n```\n\n### \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\n\n```bash\n# \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443\nIMG_SERVER=production                    # \u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 URL\nIMG_USERNAME=ci-user                     # \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043b\u044f CI\nIMG_PASSWORD=secure-password             # \u041f\u0430\u0440\u043e\u043b\u044c (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 GitLab Variables)\n```\n\n### \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 GitLab Variables \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439:\n- `IMG_PASSWORD`: secure-password (Masked)\n- `IMG_USERNAME`: ci-user (Protected)\n\n## \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n\nimgctl \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b:\n\n### \u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:\n\n- **`components list`** - TTL 5 \u0441\u0435\u043a\u0443\u043d\u0434 (\u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445)\n- **`components get`** - TTL 5 \u0441\u0435\u043a\u0443\u043d\u0434 (\u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445)  \n- **`components start`** - \u043f\u043e\u0438\u0441\u043a ID \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441\n- **`components tags`** - \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441, \u0442\u0435\u0433\u0438 \u043d\u0430 5 \u043c\u0438\u043d\u0443\u0442\n- **`logs`** - \u043f\u043e\u0438\u0441\u043a ID \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441\n- **`nodes`, `repositories`, `registries`** - \u0431\u0435\u0437 \u043a\u044d\u0448\u0430 (\u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0432\u0435\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435)\n\n### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache`:\n\n\u0412\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u043a\u044d\u0448, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache` \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043a\u044d\u0448\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0432\u0435\u0436\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:\n\n```bash\n# \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0432\u0435\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\nimgctl components list --no-cache\nimgctl components get web-api-staging --no-cache\nimgctl components start web-api-staging --no-cache\nimgctl components tags web-api-staging --no-cache\nimgctl logs web-api-staging --no-cache\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u044d\u0448\u0435\u043c:\n\n\u041a\u044d\u0448 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0414\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache` \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445.\n\n## \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438\n\nimgctl \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0438\u0431\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u043c\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 `list`. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438\u043b\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.\n\n### \u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u043e\u043d\u043e\u043a\n\n#### 1. \u042f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 (\u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\n\n\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e:\n\n```bash\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\nimgctl components list --columns \"NAME,STATUS\"\n\n# \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl nodes list --columns \"NAME,IP,ROLE,STATUS\"\nimgctl stacks list --columns \"NAME,NAMESPACE,VERSION,STATUS,REPO\"\n```\n\n#### 2. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b `+` \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 `-` \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f:\n\n```bash\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0443 REPLICAS \u043a \u043d\u0430\u0431\u043e\u0440\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\nimgctl components list --columns \"+REPLICAS\"\n\n# \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0443 NAMESPACE \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\nimgctl components list --columns \"-NAMESPACE\"\n\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --columns \"+REPLICAS,+PORTS\"\n\n# \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --columns \"-UPDATED,-TAG\"\n\n# \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c REPLICAS \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c NAMESPACE\nimgctl components list --columns \"+REPLICAS,-NAMESPACE\"\n\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c STACK \u0438 REPLICAS\nimgctl components list --columns \"+STACK,+REPLICAS\"\n\n# \u0423\u0431\u0440\u0430\u0442\u044c UPDATED \u0438 STATUS\nimgctl components list --columns \"-UPDATED,-STATUS\"\n```\n\n### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\n\n#### Components\n\n**\u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:** NAME, NAMESPACE, IMAGE, TAG, UPDATED, STATUS\n\n**\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:**\n- NAME, NAMESPACE, STACK, IMAGE, TAG, STACK_VERSION\n- STATUS, REPLICAS, PORTS, UPDATED, CREATED\n- REPO, COMMIT, ADMIN_MODE, RUN_APP\n- SHOW_ADMIN_MODE, OFF, NETWORKS, ENV\n- ENV.<\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f> (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f)\n\n#### Nodes\n\n**\u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:** NAME, IP, ROLE, AVAILABILITY, STATUS\n\n**\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:**\n- NAME, IP, ROLE, AVAILABILITY, STATUS\n- DC, DOCKER_VERSION, TOTAL_MEMORY\n- SSH_PORT, SSH_USER, EXTERNAL_URL, ID\n\n#### Stacks\n\n**\u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:** NAME, NAMESPACE, VERSION, STATUS\n\n**\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:**\n- NAME, NAMESPACE, VERSION, STATUS\n- REPO, COMMIT, TIME, TAG, PARAMS\n- COMPONENTS, PARAMS.<\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440> (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b)\n\n#### Servers\n\n**\u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:** NAME, URL, USERNAME, DESCRIPTION, DEFAULT\n\n**\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:**\n- NAME, URL, USERNAME, DESCRIPTION, DEFAULT, PASSWORD\n\n### \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n```bash\n# \u0422\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f \u0438 \u0441\u0442\u0430\u0442\u0443\u0441 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430\nimgctl components list --columns \"NAME,STATUS\"\n\n# \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --columns \"NAME,NAMESPACE,IMAGE,TAG,STATUS,REPLICAS,PORTS\"\n\n# \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c REPLICAS \u043a \u043d\u0430\u0431\u043e\u0440\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\nimgctl components list --columns \"+REPLICAS\"\n\n# \u0423\u0431\u0440\u0430\u0442\u044c TAG \u0438 NAMESPACE, \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435\nimgctl components list --columns \"-TAG,-NAMESPACE\"\n\n# \u041f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\nimgctl components list --columns \"NAME,NAMESPACE,STACK,IMAGE,TAG,STATUS,REPLICAS,PORTS,UPDATED\"\n\n# \u0421\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439\nimgctl components list --columns \"NAME,IMAGE,TAG\"\nimgctl nodes list --columns \"NAME,IP,STATUS\"\nimgctl stacks list --columns \"NAME,NAMESPACE,STATUS\"\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl components list --columns \"+ENV\"\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\nimgctl components list --columns \"+ENV.DB_HOST,+ENV.DB_PORT\"\n```\n\n### \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438\n\n#### \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (ENV)\n\n\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:\n\n```bash\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\nimgctl components list --columns \"+ENV\"\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\nimgctl components list --columns \"NAME,STATUS,+ENV.DB_HOST,+ENV.DB_PORT,+ENV.APP_NAME\"\n\n# \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\nimgctl components list --filter ENV.DB_HOST=localhost --columns \"+ENV.DB_HOST\"\n```\n\n#### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0435\u043a\u0430 (PARAMS)\n\n\u0421\u0442\u0435\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:\n\n```bash\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\nimgctl stacks list --columns \"+PARAMS\"\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b\nimgctl stacks list --columns \"NAME,VERSION,+PARAMS.database,+PARAMS.version\"\n```\n\n### \u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438\n\n\u041a\u043e\u043b\u043e\u043d\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0435\u0439, \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438:\n\n```bash\n# \u0424\u0438\u043b\u044c\u0442\u0440 + \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --filter STATUS=RUNNING --columns \"NAME,STATUS,REPLICAS\"\n\n# \u0412\u044b\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a + JSON\nimgctl components list --columns \"NAME,STATUS\" --output json\n\n# \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 + \u043a\u043e\u043b\u043e\u043d\u043a\u0438 + \u0444\u0438\u043b\u044c\u0442\u0440\nimgctl components list --limit 5 --columns \"NAME,STATUS\" --filter NAMESPACE=production\n\n# \u0411\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 + \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --columns \"NAME,STATUS\" --no-headers\n\n# YAML + \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl stacks list --columns \"NAME,NAMESPACE,VERSION\" --output yaml\n```\n\n### \u0421\u043e\u0432\u0435\u0442\u044b \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e\n\n1. **\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440**: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 `--columns \"NAME,STATUS\"` \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430\n2. **\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439**: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 `+` \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043a \u043d\u0430\u0431\u043e\u0440\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n3. **\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434**: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 `--columns \"-TAG,-UPDATED\"` \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f\n4. **\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f**: \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0441 `--no-headers --output json` \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\n5. **\u042d\u043a\u0441\u043f\u043e\u0440\u0442**: \u0414\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\n\n**\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:** \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 \"monitor-\", \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.\n\n## \u0424\u043e\u0440\u043c\u0430\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430\n\nimgctl \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438.\n\n### \u041e\u0431\u0437\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\n\n\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:\n\n| \u0424\u043e\u0440\u043c\u0430\u0442 | \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 | \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 |\n|--------|------------|-------------|\n| `table` | \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 | \u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 |\n| `json` | \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 | \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 lowercase, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 |\n| `yaml` | \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b | \u0427\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 lowercase |\n| `tsv` | \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043a\u043e\u043b\u043e\u043d\u043e\u043a | \u0422\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u044f \u043a\u0430\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c, \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 |\n| `\"{COLUMN}...\"` | \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b | \u0413\u0438\u0431\u043a\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 `{NAME}` |\n\n### \u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\n\n#### \u0422\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\n- **\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435**: \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445\n- **\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438**: \n  - \u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439\n  - \u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430\n  - \u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438\n  - \u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\n\n#### JSON \u0444\u043e\u0440\u043c\u0430\u0442\n- **\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435**: \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 API\n- **\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438**:\n  - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 lowercase \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c JSON\n  - \u041f\u043e\u043b\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 Rich markup \u0434\u043b\u044f \u0447\u0438\u0441\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445\n  - \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\n  - \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 jq, yq\n\n#### YAML \u0444\u043e\u0440\u043c\u0430\u0442\n- **\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435**: \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n- **\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438**:\n  - \u0427\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438\n  - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 lowercase \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438\n  - \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Unicode \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\n  - \u0418\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439\n\n#### TSV \u0444\u043e\u0440\u043c\u0430\u0442\n- **\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435**: \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\n- **\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438**:\n  - \u0411\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043a\u043e\u043b\u043e\u043d\u043e\u043a (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435)\n  - \u0422\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u044f \u043a\u0430\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\n  - \u0418\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438\n  - \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 Google Sheets, LibreOffice\n\n#### \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b\n- **\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435**: \u0413\u0438\u0431\u043a\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\n- **\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438**:\n  - \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 `{COLUMN}` \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n  - \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0441 `\\n`\n  - UPPERCASE \u0438\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438\n  - \u041f\u043e\u043b\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 Rich markup \u0432 \u0432\u044b\u0432\u043e\u0434\u0435\n\n### \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n#### \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 1: \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n```bash\n# \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 JSON \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\nimgctl components list --output json --limit 5\n\n# \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e jq\nimgctl components list --output json | jq '.[] | select(.status==\"RUNNING\")'\n\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\nimgctl components list --output json > components.json\n```\n\n#### \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 2: \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\n```bash\n# \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f YAML \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\nimgctl stacks list --output yaml\n\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\nimgctl servers list --output yaml > servers-config.yaml\n```\n\n#### \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 3: \u041e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430\n```bash\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 TSV \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\nimgctl nodes list --output tsv > infrastructure-report.tsv\n\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u043e\u0432 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0435\u0439\nimgctl components list --filter STATUS=RUNNING --output tsv > running-components.tsv\n```\n\n#### \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 4: \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0432\u044b\u0432\u043e\u0434\u0430\n```bash\n# \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\nimgctl components list --output \"{NAME} - {STATUS}\"\n\n# \u041c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438\nimgctl servers list --output \"Server: {NAME}\\nURL: {URL}\\nDefault: {DEFAULT}\"\n\n# \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0435\u0439\nimgctl components list --filter NAMESPACE=production --output \"{NAME}: {STATUS}\"\n```\n\n#### \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 5: \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438\n```bash\n# \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\nimgctl components list --filter STATUS=RUNNING --output json\nimgctl stacks list --filter NAMESPACE=production --output yaml\nimgctl nodes list --columns \"NAME,IP,STATUS\" --output tsv\n```\n\n### \u0428\u0430\u0431\u043b\u043e\u043d\u044b (template \u0444\u043e\u0440\u043c\u0430\u0442):\n\n\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 `{COLUMN}`, \u0433\u0434\u0435 `COLUMN` - \u0438\u043c\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432 UPPERCASE:\n\n```bash\n# \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\n--output \"{NAME}: {STATUS}\"\n\n# \u041c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\n--output \"Component: {NAME}\\nNamespace: {NAMESPACE}\\nImage: {IMAGE}:{TAG}\"\n\n# \u0421 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c\n--output \"Component {NAME} in {NAMESPACE} is {STATUS}\"\n```\n\n## \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\n\n\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:\n\n- **\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b**: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\n- **\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435**: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\n- **\u0413\u0438\u0431\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b**: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f\n- **\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f**: \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\n- **\u0422\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f**: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445\n\n### \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438\n\n| \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 | \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 | \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f |\n|----------|----------|---------------------|\n| `=` | \u0422\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 | `STATUS=RUNNING` |\n| `!=` | \u041d\u0435 \u0440\u0430\u0432\u043d\u043e | `NAMESPACE!=test` |\n| `~` | \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 | `NAME~database` |\n| `>` | \u0411\u043e\u043b\u044c\u0448\u0435 (\u0434\u043b\u044f \u0434\u0430\u0442/\u0447\u0438\u0441\u0435\u043b) | `REPLICAS>1` |\n| `<` | \u041c\u0435\u043d\u044c\u0448\u0435 (\u0434\u043b\u044f \u0434\u0430\u0442/\u0447\u0438\u0441\u0435\u043b) | `UPDATED<2025-01-01` |\n| `>=` | \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e | `REPLICAS>=2` |\n| `<=` | \u041c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e | `UPDATED<=2025-12-31` |\n\n### \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439\n\n\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435:\n\n- **\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f (`=`)**: \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438\n- **\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f (`~`)**: \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b\n- **\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c**: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 (NAME, STATUS, NAMESPACE \u0438 \u0434\u0440.) \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 (components, stacks, nodes \u0438 \u0434\u0440.)\n- **\u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435**: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\n- **\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0438**: \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u0438 \u0438\u043c\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f, \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\n\n### \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:\n\n```bash\n# \u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b\nimgctl components list --filter STATUS=RUNNING\nimgctl components list --filter NAMESPACE=production\nimgctl components list --filter NAME~database\n\n# \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 namespace\nimgctl components list --filter NAMESPACE!=test\n\n# \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b\nimgctl components list --filter STATUS=RUNNING --filter NAMESPACE=production\n\n# \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u0440\u043e\u043a\u0441\u0438 (proxy \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b)\nimgctl components list --filter NAME~proxy\n\n# \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0434\u0430\u0442\u0430\u043c\nimgctl components list --filter UPDATED>2025-01-01\n\n# \u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\nimgctl components list --filter REPLICAS>1\n\n# \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438\nimgctl components list --filter STATUS=RUNNING --columns \"NAME,STATUS\" --limit 5\n\n# \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438\nimgctl components list --filter NAMESPACE=production --filter STATUS=RUNNING  # \u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 production\nimgctl components list --filter NAME~api --filter NAMESPACE=production        # API \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 production\nimgctl components list --filter STATUS=OFF                                 # \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\n\n# \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 (\u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0435)\nimgctl components list --filter NAME=database-production --columns NAME       # \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \"database-production\"\nimgctl components list --filter NAME~database --columns NAME               # \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \"database\" \u0432 \u0438\u043c\u0435\u043d\u0430\u0445\nimgctl components list --filter STATUS=RUNNING --columns NAME,STATUS       # \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \"RUNNING\" \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u0445\nimgctl stacks list --filter NAME~api --columns NAME                        # \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \"api\" \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u0441\u0442\u0435\u043a\u043e\u0432\nimgctl stacks list --filter STATUS=deployed --columns NAME,STATUS          # \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \"deployed\" \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u0445\n```\n\n### \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438:\n\n\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u043c. \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 [\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438](#\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435-\u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438).\n\n## TTL \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n\nimgctl \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b:\n\n### TTL \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434:\n\n- **`components list`** - TTL 5 \u0441\u0435\u043a\u0443\u043d\u0434 (\u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445)\n- **`components get`** - TTL 5 \u0441\u0435\u043a\u0443\u043d\u0434 (\u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445)  \n- **`components start`** - \u043f\u043e\u0438\u0441\u043a ID \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441\n- **`components tags`** - \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441, \u0442\u0435\u0433\u0438 \u043d\u0430 5 \u043c\u0438\u043d\u0443\u0442\n- **`logs`** - \u043f\u043e\u0438\u0441\u043a ID \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 1 \u0447\u0430\u0441\n- **`nodes`, `repositories`, `registries`** - \u0431\u0435\u0437 \u043a\u044d\u0448\u0430 (\u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0432\u0435\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435)\n\n### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache`:\n\n\u0412\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u043a\u044d\u0448, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache` \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043a\u044d\u0448\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0432\u0435\u0436\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:\n\n```bash\n# \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0432\u0435\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\nimgctl components list --no-cache\nimgctl components get web-api-staging --no-cache\nimgctl components start web-api-staging --no-cache\nimgctl components tags web-api-staging --no-cache\nimgctl logs web-api-staging --no-cache\n```\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u044d\u0448\u0435\u043c:\n\n\u041a\u044d\u0448 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0414\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache` \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445.\n\n## \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\n\nimgctl \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u043c\u0435\u0440\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u00abImagenarium\u00bb.\n\n### \u041e\u0431\u0437\u043e\u0440 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\n\nimgctl \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f:\n- **Cookies \u0441\u0435\u0441\u0441\u0438\u0439** \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\n- **\u041a\u0435\u0448 API \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432** \u0441 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439\n- **\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432** \u0441 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438\n- **\u041f\u0430\u0440\u043e\u043b\u0438** \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\n\n\u0412\u0441\u0435 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.\n\n### \u0417\u0430\u0449\u0438\u0442\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445\n\n#### \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\n\nimgctl \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u0430\u043d\u043e\u043d\u0430\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c:\n\n**Linux/macOS:**\n- \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f: `~/.config/imgctl/`\n- \u041a\u0435\u0448: `~/.cache/imgctl/`\n\n**Windows:**\n- \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f: `%APPDATA%/imgctl/`\n- \u041a\u0435\u0448: `%LOCALAPPDATA%/imgctl/cache/`\n\n#### \u0422\u0438\u043f\u044b \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\n\n| \u0424\u0430\u0439\u043b | \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 | \u0417\u0430\u0449\u0438\u0442\u0430 |\n|------|------------|--------|\n| `servers.json` | \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 | \u041f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 + \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c |\n| `cookies.json` | Cookies \u0441\u0435\u0441\u0441\u0438\u0439 | \u041f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 + \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c |\n| `cache.json` | \u041a\u0435\u0448 API \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 | \u041f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 + \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c |\n| `cache_config.json` | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f | \u041f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 + \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c |\n\n### \u041c\u0435\u0440\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\n\n#### \u041f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c\n\n**\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:**\n- `0o700` (rwx------) - \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043c\u043e\u0436\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c/\u043f\u0438\u0441\u0430\u0442\u044c/\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\n\n**\u0424\u0430\u0439\u043b\u044b:**\n- `0o600` (rw-------) - \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u043c\u043e\u0436\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c/\u043f\u0438\u0441\u0430\u0442\u044c\n\n#### \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u043e\u0432\n\n- **\u041f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f** \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438 \u0441\u0431\u043e\u044f\u0445\n- **\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 race conditions** \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\n- **\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438** \u0434\u0430\u043d\u043d\u044b\u0445\n- **\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432** \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c\n\n#### \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445\n\n- **PBKDF2** \u0441 SHA-256 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439\n- **Fernet** (AES 128 \u0432 CBC \u0440\u0435\u0436\u0438\u043c\u0435) \u0434\u043b\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n- **100,000 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439** PBKDF2 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0430\u0442\u0430\u043a \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430\n- **\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438** \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043c\u0430\u0448\u0438\u043d\u044b\n\n#### \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u0435\u0439\n\n- **\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 keyring** \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439 (macOS Keychain, Windows Credential Manager, SecretService) - \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d\n- **\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435** \u043d\u0430 `PlaintextKeyring` \u0438\u0437 `keyrings.alt.file` \u043f\u0440\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e keyring\n- **\u0412 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u0445 \u0431\u0435\u0437 GUI:**\n  - \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f `PlaintextKeyring` (\u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f, \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432)\n  - \u041f\u0430\u0440\u043e\u043b\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 `~/.config/imgctl/keyring_pass.cfg` (\u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 600)\n  - \u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\n  - \u041f\u0430\u0440\u043e\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 base64-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435\n- **\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c:**\n  - \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\n  - \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430\n  - \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e, \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445, \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a\n\n### \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\n\n#### \u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\n\n1. **\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0439\u0442\u0435** imgctl \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438\n2. **\u041d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435** \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\n3. **\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u043e\u043b\u0438** \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432\n4. **\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `--no-cache`** \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 \u043e\u0431\u0449\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445:\n   ```bash\n   imgctl components list --no-cache\n   imgctl components get web-api-staging --no-cache\n   ```\n\n#### \u0414\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432\n\n1. **\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u044c\u0442\u0435 \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430** \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u043c imgctl\n2. **\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0440\u043e\u0442\u0430\u0446\u0438\u044e \u043b\u043e\u0433\u043e\u0432** \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430\n3. **\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 SELinux/AppArmor** \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u044b\n4. **\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435** \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\n### \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\n\n```bash\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a\u0435\u0448\u0430\nls -la ~/.cache/imgctl/\n# drwx------ 2 user user 4096 Jan 15 10:00 .\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c\nls -la ~/.cache/imgctl/cache.json\n# -rw------- 1 user user 1024 Jan 15 10:00 cache.json\n```\n\n### \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\n\n#### \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\n\n**\u0421\u0438\u043c\u043f\u0442\u043e\u043c\u044b:**\n- \u041e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c\n- \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043e \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0430\u0445\n\n**\u0420\u0435\u0448\u0435\u043d\u0438\u0435:**\n```bash\n# \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\nchmod 700 ~/.cache/imgctl\nchmod 700 ~/.config/imgctl\n\n# \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c\nchmod 600 ~/.cache/imgctl/*.json\nchmod 600 ~/.config/imgctl/*.json\n```\n\n#### \u041f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b\n\n**\u0421\u0438\u043c\u043f\u0442\u043e\u043c\u044b:**\n- \u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n- \u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043a\u0435\u0448\u0430\n\n**\u0420\u0435\u0448\u0435\u043d\u0438\u0435:**\n```bash\n# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\nrm ~/.cache/imgctl/cache.json\nrm ~/.config/imgctl/servers.json\n\n# \u041f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\nimgctl servers add my-server --url https://example.com --username admin --password secret\n```\n\n### \u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\n\n```bash\n# \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438\nimgctl --verbose components list\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\nls -la ~/.cache/imgctl/ ~/.config/imgctl/\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432 (\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e!)\nfile ~/.cache/imgctl/cache.json\n```\n\n## \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043e\u043a\n\n### \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c\n\n**\u041e\u0448\u0438\u0431\u043a\u0430: \"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\"**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\nimgctl servers add dev --url http://your-server:5555 --username admin --password your-password\nimgctl servers set-default dev\n```\n\n**\u041e\u0448\u0438\u0431\u043a\u0430: \"\u041e\u0448\u0438\u0431\u043a\u0430 API: 401 Unauthorized\"**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\nimgctl servers test dev\n# \u0418\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c\nimgctl servers add dev --url http://your-server:5555 --username admin --password new-password\n```\n\n**\u041e\u0448\u0438\u0431\u043a\u0430: \"Connection refused\"**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 URL \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\ncurl -I http://your-server:5555\n```\n\n**\u041e\u0448\u0438\u0431\u043a\u0430: \"No recommended backend was available\" \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u043e\u043b\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: imgctl \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 PlaintextKeyring \u0438\u0437 keyrings.alt\n# \u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u043f\u0430\u043a\u0435\u0442 imgctl\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0447\u0442\u043e \u043f\u0430\u0440\u043e\u043b\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d:\nls -la ~/.config/imgctl/keyring_pass.cfg\n# \u0424\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 600\n```\n\n### \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u044d\u0448\u0435\u043c\n\n**\u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043a\u044d\u0448\nimgctl components list --no-cache\nimgctl components get my-component --no-cache\n```\n\n**\u041e\u0448\u0438\u0431\u043a\u0430: \"\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u043a\u044d\u0448\u0435\"**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043a\u044d\u0448 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443\nimgctl components list --no-cache\nimgctl logs my-component --no-cache\n```\n\n### \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043b\u043e\u0433\u0430\u043c\u0438\n\n**\u041b\u043e\u0433\u0438 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0438\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 404**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u043a\u044d\u0448 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl logs my-component --no-cache\n```\n\n**\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043b\u043e\u0433\u043e\u0432**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\nimgctl logs my-component --lines 50\nimgctl logs my-component --level ERROR\n```\n\n### \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 Bash Completion\n\n**\u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 completion\n./imgctl-completion.bash uninstall\n./imgctl-completion.bash install\nsource ~/.bashrc\n```\n\n**\u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435**\n```bash\n# \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u0435 \u043a\u044d\u0448 completion\nrm -rf ~/.cache/imgctl/\n./imgctl-completion.bash test\n```\n\n### \u041e\u0442\u043b\u0430\u0434\u043a\u0430\n\n**\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434**\n```bash\nimgctl --verbose components list\n```\n\n**\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e**\n```bash\nimgctl servers list\nimgctl servers test dev\n```\n\n## Bash Completion\n\nimgctl \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0438\u043c\u0435\u043d \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\n\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 completion\n\n```bash\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c completion (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 ~/.bashrc)\n./imgctl-completion.bash install\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 ~/.bashrc\n./imgctl-completion.bash install --bashrc\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 ~/.bash_profile\n./imgctl-completion.bash install --profile\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443\n./imgctl-completion.bash test\n\n# \u0423\u0434\u0430\u043b\u0438\u0442\u044c completion\n./imgctl-completion.bash uninstall\n\n# \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443\n./imgctl-completion.bash help\n```\n\n### \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 completion\n\n- **\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043f\u043e\u0434\u043a\u043e\u043c\u0430\u043d\u0434\u044b**: \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\n- **\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b**: \u0432\u0441\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438\n- **\u0418\u043c\u0435\u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432**: \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0441\u0442\u0435\u043a\u0438, \u043d\u043e\u0434\u044b, \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0440\u0435\u0435\u0441\u0442\u0440\u044b\n- **\u041a\u043e\u043b\u043e\u043d\u043a\u0438**: \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434 `list` \u0441 `--columns`\n- **\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435**: \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u044d\u0448\u0443\n- **\u0420\u0430\u0431\u043e\u0442\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430**: \u0447\u0435\u0440\u0435\u0437 `--server` \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\n- **\u0421\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432**: \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 `monitor-`\n\n### \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n```bash\n# \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\nimgctl <TAB>\n# \u2192 servers nodes stacks components registries repositories logs\n\n# \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\nimgctl components get <TAB>\n# \u2192 web-api-staging database-production ...\n\n# \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432\nimgctl components list --<TAB>\n# \u2192 --limit --no-cache --columns --filter --no-headers ...\n\n# \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c\nimgctl --server dev components get <TAB>\n# \u2192 database-production cache-production ...\n\n# \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\nIMG_SERVER=dev imgctl components get <TAB>\n# \u2192 database-production cache-production ...\n\n# \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043e\u043a\nimgctl components list --custom-columns <TAB>\n# \u2192 NAME NAMESPACE STACK IMAGE TAG STATUS ...\n```\n\n### \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n\nCompletion \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b:\n- \u041a\u044d\u0448 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n- \u0414\u0430\u043d\u043d\u044b\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 `~/.cache/imgctl/<server_name>/`\n- \u041a\u044d\u0448 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f `IMG_SERVER`, `IMG_USERNAME`, `IMG_PASSWORD`\n\n### \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 completion\n\n```bash\n./imgctl-completion.bash test      # \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n./imgctl-completion.bash install   # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n./imgctl-completion.bash uninstall # \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435\n./imgctl-completion.bash help      # \u0421\u043f\u0440\u0430\u0432\u043a\u0430\n```\n\n",
    "bugtrack_url": null,
    "license": "MIT License (non-commercial) / Commercial License",
    "summary": "\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 Imagenarium",
    "version": "3.0.10",
    "project_urls": {
        "Changelog": "https://gitlab.com/koden8/imgctl/-/blob/main/CHANGELOG.md",
        "Documentation": "https://gitlab.com/koden8/imgctl#readme",
        "Homepage": "https://gitlab.com/koden8/imgctl",
        "Issues": "https://gitlab.com/koden8/imgctl/-/issues",
        "Repository": "https://gitlab.com/koden8/imgctl"
    },
    "split_keywords": [
        "docker",
        " containers",
        " orchestration",
        " cli",
        " imagenarium"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f0f73e7dd9cfb69d297ce927844548c0417bf8fcb87e467ae22bada3805d31ec",
                "md5": "a29c0361516f0d4988a67e0bf1822823",
                "sha256": "5c6af3002f702f09917c0cb48916d5e0901f7523cef59bb86debe182e6244c6b"
            },
            "downloads": -1,
            "filename": "imgctl-3.0.10-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a29c0361516f0d4988a67e0bf1822823",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 142720,
            "upload_time": "2025-11-02T20:30:17",
            "upload_time_iso_8601": "2025-11-02T20:30:17.069112Z",
            "url": "https://files.pythonhosted.org/packages/f0/f7/3e7dd9cfb69d297ce927844548c0417bf8fcb87e467ae22bada3805d31ec/imgctl-3.0.10-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "aaeef1220d0c83859bc884c46d9ea129b232362a3710d937f89f0c19570c9f6a",
                "md5": "fef2bcc25952ccfa99dfcf70ffb4ae6d",
                "sha256": "55802fadf947b1b4b6894ec4d9087d4837bf05cfbdb6e31a3870d07b181aa3ec"
            },
            "downloads": -1,
            "filename": "imgctl-3.0.10.tar.gz",
            "has_sig": false,
            "md5_digest": "fef2bcc25952ccfa99dfcf70ffb4ae6d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 155739,
            "upload_time": "2025-11-02T20:30:18",
            "upload_time_iso_8601": "2025-11-02T20:30:18.644155Z",
            "url": "https://files.pythonhosted.org/packages/aa/ee/f1220d0c83859bc884c46d9ea129b232362a3710d937f89f0c19570c9f6a/imgctl-3.0.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-02 20:30:18",
    "github": false,
    "gitlab": true,
    "bitbucket": false,
    "codeberg": false,
    "gitlab_user": "koden8",
    "gitlab_project": "imgctl",
    "lcname": "imgctl"
}
        
Elapsed time: 0.93828s