apply, delete, transfer, invoke, kinds
Эти глаголы создают записи, меняют их жизнь и показывают словарь инсталляции.
Цель везде записывается как <kind> <id> или kind/id.
Клиент не хранит собственный список kinds и команд: он читает его из записей
kind/* (см. kinds). Поэтому kind из манифеста пайплайна появляется в completion и
интерактивных формах без пересборки graphenectl.
apply
graphenectl apply <kind> <id> [--spec JSON] [-f file.yaml] [-l k=v]
Команда объявляет запись любого declarable kind. Сервер проверяет spec по схеме kind до запуска workflow.
| Флаг | Что делает |
|---|---|
--spec | объявление как inline JSON |
-f, --file | одно или несколько объявлений из YAML/JSON |
-l, --label | повторяемая label записи |
В терминале apply <kind> <id> без spec пошагово спрашивает поля из схемы:
$ graphenectl apply gitsource main
gitsource spec (an empty answer skips an optional field):
pipelineId (string, required): perf-nightly
url (string, required): https://github.com/acme/pipelines
ref (string): main
subdir (string): full
runtime (string): go
gitsource/main applied
Роли, bindings, service accounts, переменные, namespaces и sources используют тот же глагол:
$ graphenectl apply role ci-reader --spec '{"rules":[{"verbs":["get","list"],"kinds":["pipeline","run"]}]}'
$ graphenectl apply var yc-zone --spec '{"value":"ru-central1-a"}'
$ graphenectl apply namespace team-b --spec '{"retentionDays":14}'
delete
graphenectl delete <kind> <id> [--wait]
Команда сигнализирует удаление. Finalize удаляет реальный ресурс и blobs самой
записи; удаление владельца каскадно проходит детей от листьев к корню. Удаление
run отменяет его и даёт ему завершить teardown.
| Флаг | Что делает |
|---|---|
--wait | ждать фазы deleted или полного исчезновения записи; для run — пока он не остановится |
Команда сначала смотрит, потом сигнализирует, и говорит, что нашла:
$ graphenectl delete agent vm-e2e --wait
agent/vm-e2e: deleting...
agent/vm-e2e: deleted
$ graphenectl delete agent vm-e2e
agent/vm-e2e: already deleted
$ graphenectl delete agent vm-e3e
graphenectl: no record agent/vm-e3e
$ graphenectl delete run watch-demo
run/watch-demo: already finished (completed) — nothing to cancel, the record stays as history
Завершившийся run — это история, а не ресурс: он уходит по retention
namespace, а не по delete.
transfer
graphenectl transfer <kind> <id> <new-owner> [--keep <duration>]
Ресурс можно отдать, но нельзя присвоить. Передача в
stand/<pipelineId> позволяет пережить run; --keep ограничивает этот срок
и допустим только для stand:
$ graphenectl transfer docker-volume cache-v1 stand/perf-nightly --keep 72h
docker-volume/cache-v1 -> stand/perf-nightly
invoke
graphenectl invoke <kind> <id> <command> [--data JSON | --data-file f.yaml]
Команда отправляет записи один из глаголов, опубликованных её kind. Payload проверяет сама запись. Completion и интерактивная форма берут имя команды и схему из словаря:
$ graphenectl invoke pipeline perf-nightly activate --data '{"revisionId":"a9bf6299f2d5b3b3"}'
{"digest":"sha256:6e803c…","changed":true}
$ graphenectl invoke gitsource main sync
{"treeDigest":"sha256:2a5531…","commit":"4f2b8f98…","generation":2}
kinds
graphenectl kinds [-v]
Словарь в читаемом виде. Те же данные доступны как обычные записи:
get kind показывает список, get kind/docker — origin, declarability,
схемы и число живых записей:
$ graphenectl kinds
KIND ORIGIN APPLY RECORDS COMMANDS
agent system * 1 entity-set-labels
docker brought 0 entity-set-labels
gitsource system * 2 sync, entity-set-labels
pipeline system * 2 fire, publish-manifest, activate, entity-set-labels
…
-v добавляет колонку DESCRIPTION: для чего нужен каждый kind.
ORIGIN brought означает, что определение kind живёт в binary пайплайна.
Сервер показывает и маршрутизирует такие записи, но исполняет их команды worker
конкретного run, поэтому вручную объявить их через apply нельзя.