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

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 нельзя.