Контексты
Контекст именует одну инсталляцию: адрес двери, токен, неймспейс.
Контексты живут в одном файле, общем для graphenectl и каждого
бинаря пайплайна (push/run резолвятся так же) — репозиторий никогда
не носит токены.
Цепочка разрешения
Форма kubeconfig, три слоя:
- Файл:
--config <path>, иначе$GRAPHENE_CONFIG, иначе~/.config/graphene/config.yaml(пишется с правами0600). - Контекст: явный
--context <name>, иначе$GRAPHENE_CONTEXT, иначеcurrentиз файла. - Оверлей полей поверх — те же wire-имена, что говорят
воркер-роли:
$GRAPHENE_ADDRESS,$GRAPHENE_TOKEN,$GRAPHENE_NAMESPACE,$GRAPHENE_INSECURE.
С сервером и токеном в окружении файл не нужен вовсе —
синтетический контекст называется env. Это режим CI:
$ GRAPHENE_ADDRESS=ci:7233 GRAPHENE_TOKEN=$CI_TOKEN graphenectl run list
Явно названный контекст обязан существовать — окружение никогда не
маскирует опечатку в --context.
login — настройка одним шагом
graphenectl login --server host:port (--token-stdin | --token <t>)
[--name <ctx>] [--namespace <ns>] [--insecure]
[--base-image <ref>]
| Флаг | Дефолт | Что делает |
|---|---|---|
--server | обязателен | единственная дверь инсталляции, host:port |
--token-stdin | — | читать токен со stdin (предпочтительно: не светится в истории шелла) |
--token | — | токен строкой |
--name | хост сервера | имя контекста |
--namespace | скоуп самого токена | неймспейс работы |
--insecure | выкл | нешифрованное соединение (dev-контуры) |
--base-image | встроенный | базовый образ для self-build воркеров |
login делает рукопожатие Whoami до записи чего-либо: битый
сервер или токен никогда не попадают в файл. Токен с неймспейсом
пинит контекст к своему скоупу; кластерный токен (*) уважает ваш
--namespace (или спросит). Контекст становится текущим.
$ echo dev-run-token | graphenectl login --server localhost:7233 --insecure --token-stdin --name demo
logged in: context demo, role run, namespace default (current)
Интерактивный login
В терминале login спрашивает только недостающее — любой флаг
гасит свой вопрос. Токен вводится скрыто: не эхается и не попадает в
историю шелла. Первая попытка соединения — честный TLS; plaintext —
только после явного согласия:
$ graphenectl login
server (host:port): localhost:7233
token:
verifying…
TLS handshake with localhost:7233 failed: http: server gave HTTP response to HTTPS client
retry over plaintext? — dev contours only [y/N]: y
✓ role admin, namespace *
namespace to work in [default]: team-b
context name [localhost]: dev
logged in: context dev, role admin, namespace team-b (current)
Вопрос про неймспейс появляется только у кластерного токена — неймспейсный пинится сам. Существующее имя контекста, смотрящее на другой сервер, переспрашивает перед перезаписью. Вне терминала ничего не спрашивается: недостающее падает обычными ошибками — CI не виснет.
ctx — управление контекстами
graphenectl ctx list | show | current
graphenectl ctx use <name>
graphenectl ctx set <name> --server host:port [--token-stdin] ...
graphenectl ctx delete <name> | rename <old> <new>
Каждый глагол уважает --config.
list
$ graphenectl ctx list
NAME SERVER NAMESPACE
* dev-admin localhost:7233 default
dev localhost:7233 default
* помечает текущий контекст.
show — ЭФФЕКТИВНОЕ подключение
show печатает то, что команда реально использует: файл плюс
оверлеи окружения. Токен печатается маской, всегда:
$ graphenectl ctx show
context dev-admin
config /home/me/.config/graphene/config.yaml
server localhost:7233
namespace default
insecure true
token dev-…en
current
Голое имя, для скриптов:
$ graphenectl ctx current
dev-admin
use
$ graphenectl ctx use dev
current context: dev
set — создать или обновить
set меняет только переданные флаги; обновление сохраняет
остальное. Самый первый контекст файла автоматически становится
текущим; --use делает текущим любой.
| Флаг | Что делает |
|---|---|
--server | дверь, host:port (обязателен при создании) |
--token-stdin / --token | токен (stdin предпочтительнее) |
--namespace | неймспейс контекста |
--insecure | нешифрованное соединение |
--base-image | базовый образ self-build воркеров (air-gap зеркалирует свой) |
--use | заодно переключиться на него |
$ echo $TOKEN | graphenectl ctx set prod --server prod.example:7233 --token-stdin --namespace team --use
context prod created
delete, rename
$ graphenectl ctx rename prod production
context prod -> production
$ graphenectl ctx delete production
context production deleted
Удаление текущего контекста очищает current — следующая команда
попросит выбрать.