Перейти к основному содержимому

Контексты

Контекст именует одну инсталляцию: адрес двери, токен, неймспейс. Контексты живут в одном файле, общем для graphenectl и каждого бинаря пайплайна (push/run резолвятся так же) — репозиторий никогда не носит токены.

Цепочка разрешения

Форма kubeconfig, три слоя:

  1. Файл: --config <path>, иначе $GRAPHENE_CONFIG, иначе ~/.config/graphene/config.yaml (пишется с правами 0600).
  2. Контекст: явный --context <name>, иначе $GRAPHENE_CONTEXT, иначе current из файла.
  3. Оверлей полей поверх — те же 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 — следующая команда попросит выбрать.