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

Формы вывода

Каждая читающая команда рендерится одними и теми же флагами. Эта страница показывает каждую форму один раз, на реальных командах; остальной гайд пишется дефолтной таблицей и называет другие формы только там, где они — суть примера.

ФлагЗначенияДефолтЧто делает
-o, --outputtable | wide | name | json | yamltableформа ответа
--colorauto | always | neverautoоформление; auto включено в терминале и выключено в пайпе, в файле и при заданном NO_COLOR
--jq <expr>jq-выражение—прогнать JSON-форму через gojq; подразумевает JSON
-w, --watchboolвыклнаблюдать список: снапшот, дальше только изменения
--chunk-size <n>int500размер страницы списка; страницы идут незаметно; 0 — один непагинированный запрос

-o table — дефолт​

$ graphenectl get run -p terminated
RUN PIPELINE STATUS STARTED TOOK LABELS
watch-demo perf-nightly terminated 2h14m ago 1m48s team=perf
val-c perf-nightly terminated 1d3h ago 42s

Строки идут в стабильном порядке — записи по ref, прогоны от новых к старым, — а лейблы в порядке ключей. Колонка LABELS показывает лейблы, заданные человеком; собственные лейблы инсталляции (graphene.io/…: образ, триггер, прогон) видны с -o wide и в json/yaml.

-o wide — больше колонок​

Записи получают счётчик ожидающих команд и метку удаления, а LABELS несёт и собственные лейблы инсталляции:

$ graphenectl get agent -o wide
REF PHASE OWNER AGE PENDING DELETING LABELS
agent/vm-e2e ready run/run-e2e 3m12s 0 false graphene.io/run=run-e2e,role=e2e

-o name — только ref'ы, под xargs​

$ graphenectl get run -o name
watch-demo
val-c
val-b
$ graphenectl get docker-volume -o name | xargs -I{} graphenectl delete {}

-o json​

Форма protojson, стабильные имена полей. Bytes-поля, несущие JSON по контракту — spec и state записи, manifest пайплайна, params/result прогона, payload'ы событий — декодируются в настоящие объекты, а не в base64, который печатал бы protojson:

$ graphenectl get run watch-demo -o json
{
"status": "terminated"
}

-o yaml​

Те же поля через YAML-маппинг:

$ graphenectl get run watch-demo -o yaml
status: terminated

--jq — скриптовая форма​

Одно выражение поверх JSON-формы; строки печатаются сырыми (поведение jq -r). На стримах выражение выполняется на каждое сообщение. Встроенные поля уже декодированы — путь достаёт их напрямую:

$ graphenectl get pipeline perf-nightly --jq '.resource.state.manifest.kinds'
["docker","docker-network","docker-volume"]
$ graphenectl get run --jq '.runs[].runId'
watch-demo
val-c
val-b
$ graphenectl get pipeline/perf-nightly --jq .resource.state.image
localhost:7233/default/perf-nightly:4f925b8c6e5fff45
$ graphenectl events run demo --jq 'select(.kind == "activity-failed")'

-w — наблюдение списка​

Первый кадр печатается целиком, дальше только строки, которые появились, изменились или исчезли (помечаются deleted). Наблюдение сообщает об изменениях, поэтому колонки, которые тикают сами (AGE, STARTED, TOOK), в него не входят:

$ graphenectl get run -w
RUN PIPELINE STATUS LABELS
watch-demo perf-nightly terminated
demo-2 perf-nightly running
demo-2 perf-nightly completed

-w совместим с -o json и --jq: каждое изменение приходит одним сообщением.

--chunk-size — пагинация​

Списки обходят сервер страницами по --chunk-size (дефолт 500) — незаметно: страницы складываются в один ответ для любой формы вывода, включая -w. --chunk-size 0 просит всё одним запросом.

$ graphenectl get run --chunk-size 100 -o name | wc -l
1187

Цвет​

graphenectl — это обычный текст: экран не захватывается, любой вид передаётся в пайп, грепается и прокручивается. В терминале он оформлен по смыслу:

ЦветЗначит
зелёныйв порядке — ready, completed, завершённая активность
жёлтыйв движении — creating, running, повторная попытка, предупреждение
красныйплохо — failed, timed-out, строка ошибки
фиолетовыйостанавливается — deleting, canceled, terminated
серыйзакончилось или второстепенно — deleted, префикс kind, лейблы, оси

Цвет — свойство места назначения, поэтому скрипту не приходится вырезать escape-коды: в пайпе и в файле их нет. --color always включает оформление принудительно (для less -R), --color never или NO_COLOR=1 выключает его. Используются только восемь базовых цветов — они следуют теме терминала.

Таблица вписывается в терминал, обрезая свою единственную неограниченную колонку (лейблы, серии метрики) и помечая обрез знаком …; в пайпе ничего не обрезается.

Коды возврата​

КодЗначит
0сделано — включая пустой ответ о том, что существует
1команда не удалась: неверный флаг, отклонённый запрос, сеть
2такого нет: no record <ref>, no run <id>
3команда отработала, а прогон — нет: run start --watch и run watch прогона, который закончился иначе, чем completed