homeconsole-cli 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- homeconsole_cli-0.0.1/PKG-INFO +155 -0
- homeconsole_cli-0.0.1/README.md +140 -0
- homeconsole_cli-0.0.1/hc/__init__.py +6 -0
- homeconsole_cli-0.0.1/hc/api.py +59 -0
- homeconsole_cli-0.0.1/hc/capabilities.py +41 -0
- homeconsole_cli-0.0.1/hc/client.py +631 -0
- homeconsole_cli-0.0.1/hc/commands/__init__.py +2 -0
- homeconsole_cli-0.0.1/hc/commands/_client_helpers.py +74 -0
- homeconsole_cli-0.0.1/hc/commands/_compose_helpers.py +95 -0
- homeconsole_cli-0.0.1/hc/commands/auth.py +381 -0
- homeconsole_cli-0.0.1/hc/commands/connect.py +55 -0
- homeconsole_cli-0.0.1/hc/commands/core.py +277 -0
- homeconsole_cli-0.0.1/hc/commands/deploy.py +1466 -0
- homeconsole_cli-0.0.1/hc/commands/install.py +74 -0
- homeconsole_cli-0.0.1/hc/commands/logs.py +58 -0
- homeconsole_cli-0.0.1/hc/commands/marketplace.py +113 -0
- homeconsole_cli-0.0.1/hc/commands/module.py +103 -0
- homeconsole_cli-0.0.1/hc/commands/ping.py +41 -0
- homeconsole_cli-0.0.1/hc/commands/plugin.py +453 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/__init__.py +222 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/compose.py +385 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/config.py +60 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/core.py +155 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/db.py +222 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/mode.py +36 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/redis.py +60 -0
- homeconsole_cli-0.0.1/hc/commands/recovery/ui.py +63 -0
- homeconsole_cli-0.0.1/hc/commands/remove.py +55 -0
- homeconsole_cli-0.0.1/hc/commands/reset.py +88 -0
- homeconsole_cli-0.0.1/hc/commands/search.py +42 -0
- homeconsole_cli-0.0.1/hc/commands/secrets.py +457 -0
- homeconsole_cli-0.0.1/hc/commands/setup.py +75 -0
- homeconsole_cli-0.0.1/hc/commands/setup_wizard.py +153 -0
- homeconsole_cli-0.0.1/hc/commands/status.py +64 -0
- homeconsole_cli-0.0.1/hc/commands/update.py +377 -0
- homeconsole_cli-0.0.1/hc/config.py +127 -0
- homeconsole_cli-0.0.1/hc/constants.py +33 -0
- homeconsole_cli-0.0.1/hc/core_ops.py +138 -0
- homeconsole_cli-0.0.1/hc/core_source.py +126 -0
- homeconsole_cli-0.0.1/hc/env_bootstrap.py +43 -0
- homeconsole_cli-0.0.1/hc/errors.py +85 -0
- homeconsole_cli-0.0.1/hc/main.py +105 -0
- homeconsole_cli-0.0.1/hc/marketplace_operation.py +140 -0
- homeconsole_cli-0.0.1/hc/native_core.py +369 -0
- homeconsole_cli-0.0.1/hc/repl.py +406 -0
- homeconsole_cli-0.0.1/hc/setup_runner.py +72 -0
- homeconsole_cli-0.0.1/hc/shell.py +9 -0
- homeconsole_cli-0.0.1/homeconsole_cli.egg-info/PKG-INFO +155 -0
- homeconsole_cli-0.0.1/homeconsole_cli.egg-info/SOURCES.txt +60 -0
- homeconsole_cli-0.0.1/homeconsole_cli.egg-info/dependency_links.txt +1 -0
- homeconsole_cli-0.0.1/homeconsole_cli.egg-info/entry_points.txt +2 -0
- homeconsole_cli-0.0.1/homeconsole_cli.egg-info/requires.txt +9 -0
- homeconsole_cli-0.0.1/homeconsole_cli.egg-info/top_level.txt +1 -0
- homeconsole_cli-0.0.1/pyproject.toml +39 -0
- homeconsole_cli-0.0.1/setup.cfg +4 -0
- homeconsole_cli-0.0.1/tests/test_config_roundtrip.py +68 -0
- homeconsole_cli-0.0.1/tests/test_core_ops.py +116 -0
- homeconsole_cli-0.0.1/tests/test_env_bootstrap.py +49 -0
- homeconsole_cli-0.0.1/tests/test_main_root_callback.py +14 -0
- homeconsole_cli-0.0.1/tests/test_marketplace_operation_parse.py +74 -0
- homeconsole_cli-0.0.1/tests/test_native_core_helpers.py +39 -0
- homeconsole_cli-0.0.1/tests/test_setup_runner.py +64 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: homeconsole-cli
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: HomeConsole CLI (hc) — управление платформой через HTTP API
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: typer>=0.12
|
|
8
|
+
Requires-Dist: rich>=13
|
|
9
|
+
Requires-Dist: httpx>=0.27
|
|
10
|
+
Requires-Dist: anyio>=4
|
|
11
|
+
Requires-Dist: prompt_toolkit>=3
|
|
12
|
+
Requires-Dist: tomlkit>=0.12
|
|
13
|
+
Provides-Extra: dev
|
|
14
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
15
|
+
|
|
16
|
+
# HomeConsole CLI (`hc`)
|
|
17
|
+
|
|
18
|
+
CLI-утилита для управления платформой HomeConsole **исключительно через HTTP API** CoreRuntime.
|
|
19
|
+
|
|
20
|
+
## Установка (локально)
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
cd home-console-cli
|
|
24
|
+
python -m venv .venv
|
|
25
|
+
source .venv/bin/activate
|
|
26
|
+
pip install -U pip
|
|
27
|
+
pip install -e .
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Проверка:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
hc --help
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Конфигурация
|
|
37
|
+
|
|
38
|
+
Файл: `~/.config/hc/config.toml`
|
|
39
|
+
|
|
40
|
+
```toml
|
|
41
|
+
[core]
|
|
42
|
+
host = "localhost"
|
|
43
|
+
port = 8080
|
|
44
|
+
token = "jwt-token-here"
|
|
45
|
+
verify_ssl = true
|
|
46
|
+
|
|
47
|
+
[display]
|
|
48
|
+
color = true
|
|
49
|
+
emoji = true
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Токен берётся по приоритету:
|
|
53
|
+
|
|
54
|
+
- `--token` (если у команды есть такой флаг)
|
|
55
|
+
- переменная окружения `HC_TOKEN`
|
|
56
|
+
- `config.toml`
|
|
57
|
+
|
|
58
|
+
## Быстрый старт
|
|
59
|
+
|
|
60
|
+
Подключиться и сохранить конфиг:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
hc connect localhost --port 8080
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Статус:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
hc status
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Список плагинов:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
hc plugin list
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Команды
|
|
79
|
+
|
|
80
|
+
- `hc connect <host> [--port 8080] [--token TOKEN]`
|
|
81
|
+
- `hc status`
|
|
82
|
+
- `hc install <name> [--version X.Y.Z]`
|
|
83
|
+
- `hc remove <name> [--force]`
|
|
84
|
+
- `hc plugin list|start|stop|info`
|
|
85
|
+
- `hc module list|status`
|
|
86
|
+
- `hc logs [--follow] [--module <name>] [--level debug|info|warning|error]`
|
|
87
|
+
- `hc search <query>`
|
|
88
|
+
- `hc setup`
|
|
89
|
+
- `hc deploy` (по умолчанию: build+push+rollout+wait) и `hc deploy ...` (тонкие подкоманды)
|
|
90
|
+
- `hc deploy platform` (локальный dev flow)
|
|
91
|
+
- `hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest` (image-only deploy)
|
|
92
|
+
- `hc update core ...` (обновление core-runtime до нового image:tag)
|
|
93
|
+
- `hc shell`
|
|
94
|
+
|
|
95
|
+
### Deploy “одной командой”
|
|
96
|
+
|
|
97
|
+
По умолчанию `hc deploy` делает полный жизненный цикл:
|
|
98
|
+
|
|
99
|
+
- **build**: `docker build -t <image>:<tag>`
|
|
100
|
+
- **push**: `docker push <image>:<tag>`
|
|
101
|
+
- **rollout**: `docker compose pull core-runtime && docker compose up -d`
|
|
102
|
+
- **wait**: ждёт **healthy** (проверка `curl` внутри контейнера)
|
|
103
|
+
|
|
104
|
+
Полезные флаги:
|
|
105
|
+
|
|
106
|
+
- `--no-build`, `--no-push`, `--no-rollout`
|
|
107
|
+
- `--wait/--no-wait` (по умолчанию `--wait`)
|
|
108
|
+
- `--timeout 180` (сек), `--interval 1.0` (сек)
|
|
109
|
+
- `--health-url http://localhost:8000/api/v1/monitor/health` (внутри контейнера)
|
|
110
|
+
- `--quiet` (минимальный вывод)
|
|
111
|
+
- `--json` (машинный вывод; удобно для CI/скриптов)
|
|
112
|
+
|
|
113
|
+
Логи core-runtime (для диагностики таймаута):
|
|
114
|
+
|
|
115
|
+
- `hc deploy core logs -f`
|
|
116
|
+
|
|
117
|
+
### Deploy платформы
|
|
118
|
+
|
|
119
|
+
Локальный dev flow:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
hc deploy platform
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Только подготовить статику, без запуска стека:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
hc deploy platform --no-start
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Image-only deploy через GHCR:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Этот вариант использует `platform-home-console/docker-compose.image.yml` и `PLATFORM_IMAGE`.
|
|
138
|
+
|
|
139
|
+
## Если “нет команды `hc deploy`”
|
|
140
|
+
|
|
141
|
+
Почти всегда это означает, что в окружении стоит **не тот пакет**, который предоставляет команду `hc`.
|
|
142
|
+
|
|
143
|
+
Проверка (в активированном venv):
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
python -c "import hc, inspect; print(hc.__file__)"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Должно указывать на `.../home-console-cli/hc/__init__.py` (или site-packages `homeconsole-cli`).
|
|
150
|
+
|
|
151
|
+
## Ошибки и UX
|
|
152
|
+
|
|
153
|
+
- Traceback пользователю не показывается.
|
|
154
|
+
- Все ошибки печатаются через Rich: `[red]Ошибка: ...[/red]`.
|
|
155
|
+
- При ошибке утилита завершает выполнение с кодом `1`.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# HomeConsole CLI (`hc`)
|
|
2
|
+
|
|
3
|
+
CLI-утилита для управления платформой HomeConsole **исключительно через HTTP API** CoreRuntime.
|
|
4
|
+
|
|
5
|
+
## Установка (локально)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cd home-console-cli
|
|
9
|
+
python -m venv .venv
|
|
10
|
+
source .venv/bin/activate
|
|
11
|
+
pip install -U pip
|
|
12
|
+
pip install -e .
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Проверка:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
hc --help
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Конфигурация
|
|
22
|
+
|
|
23
|
+
Файл: `~/.config/hc/config.toml`
|
|
24
|
+
|
|
25
|
+
```toml
|
|
26
|
+
[core]
|
|
27
|
+
host = "localhost"
|
|
28
|
+
port = 8080
|
|
29
|
+
token = "jwt-token-here"
|
|
30
|
+
verify_ssl = true
|
|
31
|
+
|
|
32
|
+
[display]
|
|
33
|
+
color = true
|
|
34
|
+
emoji = true
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Токен берётся по приоритету:
|
|
38
|
+
|
|
39
|
+
- `--token` (если у команды есть такой флаг)
|
|
40
|
+
- переменная окружения `HC_TOKEN`
|
|
41
|
+
- `config.toml`
|
|
42
|
+
|
|
43
|
+
## Быстрый старт
|
|
44
|
+
|
|
45
|
+
Подключиться и сохранить конфиг:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
hc connect localhost --port 8080
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Статус:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
hc status
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Список плагинов:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
hc plugin list
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Команды
|
|
64
|
+
|
|
65
|
+
- `hc connect <host> [--port 8080] [--token TOKEN]`
|
|
66
|
+
- `hc status`
|
|
67
|
+
- `hc install <name> [--version X.Y.Z]`
|
|
68
|
+
- `hc remove <name> [--force]`
|
|
69
|
+
- `hc plugin list|start|stop|info`
|
|
70
|
+
- `hc module list|status`
|
|
71
|
+
- `hc logs [--follow] [--module <name>] [--level debug|info|warning|error]`
|
|
72
|
+
- `hc search <query>`
|
|
73
|
+
- `hc setup`
|
|
74
|
+
- `hc deploy` (по умолчанию: build+push+rollout+wait) и `hc deploy ...` (тонкие подкоманды)
|
|
75
|
+
- `hc deploy platform` (локальный dev flow)
|
|
76
|
+
- `hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest` (image-only deploy)
|
|
77
|
+
- `hc update core ...` (обновление core-runtime до нового image:tag)
|
|
78
|
+
- `hc shell`
|
|
79
|
+
|
|
80
|
+
### Deploy “одной командой”
|
|
81
|
+
|
|
82
|
+
По умолчанию `hc deploy` делает полный жизненный цикл:
|
|
83
|
+
|
|
84
|
+
- **build**: `docker build -t <image>:<tag>`
|
|
85
|
+
- **push**: `docker push <image>:<tag>`
|
|
86
|
+
- **rollout**: `docker compose pull core-runtime && docker compose up -d`
|
|
87
|
+
- **wait**: ждёт **healthy** (проверка `curl` внутри контейнера)
|
|
88
|
+
|
|
89
|
+
Полезные флаги:
|
|
90
|
+
|
|
91
|
+
- `--no-build`, `--no-push`, `--no-rollout`
|
|
92
|
+
- `--wait/--no-wait` (по умолчанию `--wait`)
|
|
93
|
+
- `--timeout 180` (сек), `--interval 1.0` (сек)
|
|
94
|
+
- `--health-url http://localhost:8000/api/v1/monitor/health` (внутри контейнера)
|
|
95
|
+
- `--quiet` (минимальный вывод)
|
|
96
|
+
- `--json` (машинный вывод; удобно для CI/скриптов)
|
|
97
|
+
|
|
98
|
+
Логи core-runtime (для диагностики таймаута):
|
|
99
|
+
|
|
100
|
+
- `hc deploy core logs -f`
|
|
101
|
+
|
|
102
|
+
### Deploy платформы
|
|
103
|
+
|
|
104
|
+
Локальный dev flow:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
hc deploy platform
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Только подготовить статику, без запуска стека:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
hc deploy platform --no-start
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Image-only deploy через GHCR:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
hc deploy platform --mode image --image ghcr.io/home-console/platform-home-console --tag latest
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Этот вариант использует `platform-home-console/docker-compose.image.yml` и `PLATFORM_IMAGE`.
|
|
123
|
+
|
|
124
|
+
## Если “нет команды `hc deploy`”
|
|
125
|
+
|
|
126
|
+
Почти всегда это означает, что в окружении стоит **не тот пакет**, который предоставляет команду `hc`.
|
|
127
|
+
|
|
128
|
+
Проверка (в активированном venv):
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
python -c "import hc, inspect; print(hc.__file__)"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Должно указывать на `.../home-console-cli/hc/__init__.py` (или site-packages `homeconsole-cli`).
|
|
135
|
+
|
|
136
|
+
## Ошибки и UX
|
|
137
|
+
|
|
138
|
+
- Traceback пользователю не показывается.
|
|
139
|
+
- Все ошибки печатаются через Rich: `[red]Ошибка: ...[/red]`.
|
|
140
|
+
- При ошибке утилита завершает выполнение с кодом `1`.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
# Здесь живут все “контрактные” пути, чтобы не размазывать строки по коду.
|
|
4
|
+
# Если Core переедет на /api/v1 — клиент должен пережить это без правок команд.
|
|
5
|
+
|
|
6
|
+
API_PREFIX_CANDIDATES: tuple[str, ...] = ("/api", "/api/v1")
|
|
7
|
+
|
|
8
|
+
# Core
|
|
9
|
+
HEALTH = "/health"
|
|
10
|
+
# Current health endpoint in core-runtime-service (mounted under /api/v1/monitor).
|
|
11
|
+
MONITOR_HEALTH = "/api/v1/monitor/health"
|
|
12
|
+
# Legacy/compat (older builds).
|
|
13
|
+
MONITOR_HEALTH_LEGACY = "/monitor/health"
|
|
14
|
+
|
|
15
|
+
# Admin (core API contract)
|
|
16
|
+
ADMIN_STATUS = "/api/v1/admin/inspector/runtime"
|
|
17
|
+
ADMIN_INSPECTOR_PLUGINS = "/api/v1/admin/inspector/plugins"
|
|
18
|
+
ADMIN_AUTH_API_KEYS = "/api/v1/admin/auth/api-keys"
|
|
19
|
+
ADMIN_AUTH_API_KEYS_REVOKE = "/api/v1/admin/auth/api-keys/revoke"
|
|
20
|
+
ADMIN_AUTH_API_KEYS_ROTATE = "/api/v1/admin/auth/api-keys/rotate"
|
|
21
|
+
ADMIN_AUTH_USERS = "/api/v1/admin/auth/users"
|
|
22
|
+
ADMIN_AUTH_SESSIONS = "/api/v1/admin/auth/sessions"
|
|
23
|
+
ADMIN_AUTH_SESSIONS_REVOKE = "/api/v1/admin/auth/sessions/revoke"
|
|
24
|
+
ADMIN_AUTH_SESSIONS_REVOKE_ALL = "/api/v1/admin/auth/sessions/revoke-all"
|
|
25
|
+
|
|
26
|
+
# Marketplace admin — archive_path должен быть доступен процессу Core на сервере
|
|
27
|
+
ADMIN_MARKETPLACE_INSTALL = "/api/v1/admin/marketplace/install"
|
|
28
|
+
ADMIN_MARKETPLACE_INSTALL_UPLOAD = "/api/v1/admin/marketplace/install-upload"
|
|
29
|
+
|
|
30
|
+
# Auth v1
|
|
31
|
+
AUTH_BOOTSTRAP = "/api/v1/auth/bootstrap"
|
|
32
|
+
AUTH_INITIALIZE = "/api/v1/auth/initialize"
|
|
33
|
+
AUTH_LOGIN = "/api/v1/auth/login"
|
|
34
|
+
AUTH_LOGOUT = "/api/v1/auth/logout"
|
|
35
|
+
AUTH_REFRESH = "/api/v1/auth/refresh"
|
|
36
|
+
AUTH_ME = "/api/v1/auth/me"
|
|
37
|
+
|
|
38
|
+
# Plugins (пути относительно префикса из API_PREFIX_CANDIDATES: /api или /api/v1)
|
|
39
|
+
PLUGINS = "/plugins"
|
|
40
|
+
PLUGIN = "/plugins/{name}"
|
|
41
|
+
PLUGIN_INSTALL = "/plugins/{name}/install"
|
|
42
|
+
PLUGIN_START = "/plugins/{name}/start"
|
|
43
|
+
PLUGIN_STOP = "/plugins/{name}/stop"
|
|
44
|
+
PLUGIN_RELOAD = "/api/v1/admin/plugins/{name}/reload"
|
|
45
|
+
PLUGIN_RESTART_CONTAINER = "/api/v1/admin/plugins/{name}/restart-container"
|
|
46
|
+
|
|
47
|
+
# Modules (так же относительно префикса)
|
|
48
|
+
MODULES = "/modules"
|
|
49
|
+
MODULE_START = "/modules/{name}/start"
|
|
50
|
+
MODULE_STOP = "/modules/{name}/stop"
|
|
51
|
+
MODULE_RESTART = "/modules/{name}/restart"
|
|
52
|
+
|
|
53
|
+
# Logs
|
|
54
|
+
LOGS = "/logs"
|
|
55
|
+
|
|
56
|
+
# Marketplace
|
|
57
|
+
MARKETPLACE_INDEX = "/marketplace/index"
|
|
58
|
+
MARKETPLACE_SEARCH = "/marketplace/search"
|
|
59
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
import anyio
|
|
6
|
+
|
|
7
|
+
from hc.config import Config
|
|
8
|
+
from hc.commands._client_helpers import client_from_config
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass(slots=True)
|
|
12
|
+
class Capabilities:
|
|
13
|
+
monitor_health: bool
|
|
14
|
+
auth_bootstrap: bool
|
|
15
|
+
auth_me: bool
|
|
16
|
+
admin_status: bool
|
|
17
|
+
inspector_plugins: bool
|
|
18
|
+
api_keys: bool
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def probe(cfg: Config) -> Capabilities:
|
|
22
|
+
silent = client_from_config(cfg, silent=True)
|
|
23
|
+
|
|
24
|
+
async def _run() -> Capabilities:
|
|
25
|
+
mh = await silent.health()
|
|
26
|
+
ab = await silent.auth_bootstrap()
|
|
27
|
+
am = await silent.auth_me()
|
|
28
|
+
st = await silent.admin_status()
|
|
29
|
+
ip = await silent.inspector_plugins()
|
|
30
|
+
ak = await silent.api_keys_list()
|
|
31
|
+
return Capabilities(
|
|
32
|
+
monitor_health=bool(mh),
|
|
33
|
+
auth_bootstrap=bool(ab),
|
|
34
|
+
auth_me=bool(am),
|
|
35
|
+
admin_status=bool(st),
|
|
36
|
+
inspector_plugins=bool(ip),
|
|
37
|
+
api_keys=bool(ak),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return anyio.run(_run)
|
|
41
|
+
|