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

Ресурсы и агенты

Объявление ресурса возвращает хэндл; выходы доступны только через Ready. Механика — запись, фазы, дерево владения — в Концепциях; эта страница — кодовая поверхность.

Объявление агентов

// Запись ждёт подключения агента (свежая VM приносит его
// через user-data).
vmAgent := pipeline.NewAgent(ctx, "edge-1",
pipeline.WithLabels(map[string]string{"role": "edge"}))

// Машина уже существует: единственное касание системы — установка
// по ssh. Ключ — ИМЯ секрета; host key обязателен: control plane,
// открывающий root-шелл, не работает по trust-on-first-use.
bareAgent := pipeline.NewAgentViaSSH(ctx, "bare-1", pipeline.SSHInstall{
Address: params.BareHost,
User: params.BareUser,
KeyRef: pipeline.Secret(ctx, "bare-ssh-key"),
HostKey: params.BareHostKey,
}, pipeline.WithLabels(map[string]string{"role": "edge"}))

vmAgent.CloudInit() отдаёт identity для user-data свежей VM — так агент попадает на машину, которую пайплайн вот-вот создаст:

vm := k8slib.Resource(ctx, k8sClient, "vm-1", &compute.Instance{
...
Metadata: map[string]*string{"user-data": ptr(vmAgent.CloudInit())},
}, k8slib.WithResourceOption[compute.Instance](pipeline.Children(vmAgent)))

Опции объявления

ОпцияСмысл
Parent(h)ресурс умирает вместе с h, а не с раном
Children(h...)ресурс забирает во владение уже существующие
WithLabels(m)метки записи — выборка по равенству
Need(name, WhereLabel(k,v), WhereIn(k, v...))требование возможности; готовность его ждёт

Выборка

edges, err := pipeline.SelectAgents(ctx,
pipeline.WithLabels(map[string]string{"role": "edge"}),
pipeline.Need("docker"))

Снапшот подходящих агентов; выборка — чужая: владение не берётся.

Чужие ресурсы

foreign := pipeline.AttachAgent(ctx, "edge-1", pipeline.Need("marker"))
baseline := pipeline.AttachArtifact(ctx, "baseline-report")

Присоединённые читаются как свои; не могут быть родителем или ребёнком.

Пережить свой ран

Долгая жизнь — передача, не sleep: стенд пайплайна существует всегда:

pipeline.ToStand(ctx, vm, pipeline.KeepFor(params.Keep)) // срок ограничивает пребывание
pipeline.ToStand(ctx, reportArtifact) // живёт до явного удаления

Workflow возвращается сразу; машина остаётся жить.

Готовые реализации описаны в разделе Библиотеки ресурсов.