mirror of
https://github.com/mulgadc/spinifex.git
synced 2026-10-23 12:47:48 +00:00
d32712b727
Add the ECS v1 scheduler control loop and end-to-end RunTask flow: - handlers/ecs: per-account KV-backed Service (clusters, task definitions, container instances, tasks), bin-pack/spread/random placement with CAS capacity reservation, and a leader-elected Scheduler that owns the Layer-2 bus subscriptions (register/heartbeat/task-state) plus a heartbeat reaper. - gateway/ecs: wire CreateCluster, Describe/ListClusters, Register/Describe/ListTaskDefinitions, Register/Describe/ListContainerInstances, RunTask, Describe/ListTasks onto the daemon over NATS. - daemon: construct the Service, start the Scheduler goroutine, subscribe the ECS action subjects. - ecs-agent: subscribe the per-instance assign subject, pull and run each container via containerd, and report task state back on the bus.
68 lines
2.2 KiB
Go
68 lines
2.2 KiB
Go
// Package runtime is the ecs-agent's container-runtime seam. The agent pulls
|
|
// task images and (from Sprint 4e) runs containers through an ImagePuller; the
|
|
// real implementation drives containerd, but the interface lets tests and the
|
|
// scheduler-only build run against a fake.
|
|
package runtime
|
|
|
|
import "context"
|
|
|
|
// PullSpec describes one image to pull.
|
|
type PullSpec struct {
|
|
// Ref is the full image reference, e.g.
|
|
// "123456789012.dkr.ecr.us-east-1.spinifex.internal/app:latest".
|
|
Ref string
|
|
}
|
|
|
|
// Image identifies a pulled image in the runtime's content store.
|
|
type Image struct {
|
|
Ref string
|
|
Digest string
|
|
Size int64
|
|
}
|
|
|
|
// Resolver supplies registry credentials for a given image reference. The
|
|
// ecs-agent backs this with ECR GetAuthorizationToken (see ecrresolver.go).
|
|
type Resolver interface {
|
|
// Authorize returns the username, password and registry endpoint to use for
|
|
// ref. An empty user/pass means anonymous pull.
|
|
Authorize(ctx context.Context, ref string) (user, pass, endpoint string, err error)
|
|
}
|
|
|
|
// ImagePuller pulls images into the local runtime. Close releases the runtime
|
|
// client connection.
|
|
type ImagePuller interface {
|
|
Pull(ctx context.Context, spec PullSpec, r Resolver) (Image, error)
|
|
Close() error
|
|
}
|
|
|
|
// RunSpec describes a single container the agent must create and start. v1 runs
|
|
// the container in the host network namespace (bridge/CNI task networking lands
|
|
// in a later sprint); Labels carry the mulga.ecs.* task identity for the reboot
|
|
// reconciler.
|
|
type RunSpec struct {
|
|
Image string
|
|
Command []string
|
|
Env map[string]string
|
|
Labels map[string]string
|
|
}
|
|
|
|
// RunStatus is a finished container's outcome.
|
|
type RunStatus struct {
|
|
ExitCode int
|
|
}
|
|
|
|
// Runner creates and starts containers from already-pulled images. id is a
|
|
// caller-unique container ID; Wait blocks until the container exits; Remove
|
|
// tears down the container + its task.
|
|
type Runner interface {
|
|
Run(ctx context.Context, id string, spec RunSpec) (containerID string, err error)
|
|
Wait(ctx context.Context, containerID string) (RunStatus, error)
|
|
Remove(ctx context.Context, containerID string) error
|
|
}
|
|
|
|
// Runtime is the full container runtime the ecs-agent drives: pull + run.
|
|
type Runtime interface {
|
|
ImagePuller
|
|
Runner
|
|
}
|