ops: name oci.hanzo.ai in the image examples

oci.hanzo.ai is the host for images and charts. Regenerates zipdoc and the
OpenAPI projection from the same doc comments.
This commit is contained in:
2026-08-21 09:29:20 -07:00
parent fd4c3a826d
commit d777c388ec
6 changed files with 32 additions and 32 deletions
+8 -8
View File
@@ -1328,7 +1328,7 @@
"image": "gcr.io/kaniko-project/executor:latest",
"args": [
"--context=git://…",
"--destination=registry.hanzo.ai/acme/api:1.4.2"
"--destination=oci.hanzo.ai/acme/api:1.4.2"
],
"ttlSeconds": 3600
},
@@ -1871,7 +1871,7 @@
"node": "pool-a1",
"controller": "ReplicaSet/api-7d9f",
"images": [
"registry.hanzo.ai/acme/api:1.4.2"
"oci.hanzo.ai/acme/api:1.4.2"
],
"restarts": 0
}
@@ -2023,7 +2023,7 @@
"namespace": "acme-prod",
"name": "api",
"spec": {
"image": "registry.hanzo.ai/acme/api:1.4.2"
"image": "oci.hanzo.ai/acme/api:1.4.2"
},
"status": {
"phase": "Running"
@@ -2058,7 +2058,7 @@
"namespace": "acme-prod",
"name": "api",
"spec": {
"image": "registry.hanzo.ai/acme/api:1.4.2",
"image": "oci.hanzo.ai/acme/api:1.4.2",
"replicas": 3
}
},
@@ -2078,7 +2078,7 @@
"namespace": "acme-prod",
"name": "api",
"spec": {
"image": "registry.hanzo.ai/acme/api:1.4.2",
"image": "oci.hanzo.ai/acme/api:1.4.2",
"replicas": 3
},
"version": "918281"
@@ -2300,7 +2300,7 @@
"namespace": "acme-prod",
"name": "api",
"spec": {
"image": "registry.hanzo.ai/acme/api:1.4.2"
"image": "oci.hanzo.ai/acme/api:1.4.2"
},
"status": {
"phase": "Running"
@@ -2644,7 +2644,7 @@
"ready": 3,
"updated": 3,
"images": [
"registry.hanzo.ai/acme/api:1.4.2"
"oci.hanzo.ai/acme/api:1.4.2"
]
}
]
@@ -2708,7 +2708,7 @@
"ready": 3,
"updated": 3,
"images": [
"registry.hanzo.ai/acme/api:1.4.2"
"oci.hanzo.ai/acme/api:1.4.2"
]
},
"schema": {
+1 -1
View File
@@ -27,7 +27,7 @@ import (
// setting on anything periodic — a namespace that keeps every finished Job becomes a
// list nobody can read.
//
// Example: {"cluster":"hanzo-k8s","namespace":"hanzo","name":"build-1a2b","image":"gcr.io/kaniko-project/executor:latest","args":["--context=git://…","--destination=registry.hanzo.ai/acme/api:1.4.2"],"ttlSeconds":3600}
// Example: {"cluster":"hanzo-k8s","namespace":"hanzo","name":"build-1a2b","image":"gcr.io/kaniko-project/executor:latest","args":["--context=git://…","--destination=oci.hanzo.ai/acme/api:1.4.2"],"ttlSeconds":3600}
// Response: {"namespace":"hanzo","name":"build-1a2b","active":1,"succeeded":0,"failed":0,"phase":"running"}
func (o Ops) createJob(ctx context.Context, in *plane.JobIn) (*plane.Job, error) {
if err := need("name", in.Name); err != nil {
+1 -1
View File
@@ -27,7 +27,7 @@ const maxLogBytes = 1 << 20
// an exfiltration door wearing the name of a health check.
//
// Example: {"cluster":"hanzo-k8s","namespace":"acme-prod","labelSelector":"app=api"}
// Response: {"pods":[{"namespace":"acme-prod","name":"api-7d9f-2xk","phase":"Running","node":"pool-a1","controller":"ReplicaSet/api-7d9f","images":["registry.hanzo.ai/acme/api:1.4.2"],"restarts":0}]}
// Response: {"pods":[{"namespace":"acme-prod","name":"api-7d9f-2xk","phase":"Running","node":"pool-a1","controller":"ReplicaSet/api-7d9f","images":["oci.hanzo.ai/acme/api:1.4.2"],"restarts":0}]}
func (o Ops) listPods(ctx context.Context, in *plane.PodsIn) (*plane.Pods, error) {
b, err := o.reach(ctx, in.Cluster)
if err != nil {
+4 -4
View File
@@ -94,7 +94,7 @@ func gvr(kind string) (schema.GroupVersionResource, error) {
// listResources returns custom resources of one registered kind.
//
// Example: {"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod"}
// Response: {"resources":[{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}],"version":"918273"}
// Response: {"resources":[{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}],"version":"918273"}
func (o Ops) listResources(ctx context.Context, in *plane.ResourceIn) (*plane.Resources, error) {
g, err := gvr(in.Kind)
if err != nil {
@@ -127,7 +127,7 @@ func (o Ops) listResources(ctx context.Context, in *plane.ResourceIn) (*plane.Re
// getResource returns one custom resource.
//
// Response: {"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}
// Response: {"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}
func (o Ops) getResource(ctx context.Context, in *plane.ResourceRef) (*plane.Resource, error) {
g, err := gvr(in.Kind)
if err != nil {
@@ -245,8 +245,8 @@ func (o Ops) watchResources(ctx context.Context, in *plane.WatchIn) (*plane.Chan
// both are named and typed. That is the line: `kind` is a key in a closed table, so
// this cannot become "apply any object the cluster has".
//
// Example: {"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2","replicas":3}}
// Response: {"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2","replicas":3},"version":"918281"}
// Example: {"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2","replicas":3}}
// Response: {"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2","replicas":3},"version":"918281"}
func (o Ops) applyResource(ctx context.Context, in *plane.ApplyIn) (*plane.Resource, error) {
g, err := gvr(in.Kind)
if err != nil {
+2 -2
View File
@@ -27,7 +27,7 @@ const lbIDAnnotation = "kubernetes.digitalocean.com/load-balancer-id"
// drift detection.
//
// Example: {"cluster":"hanzo-k8s","namespace":"acme-prod"}
// Response: {"workloads":[{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["registry.hanzo.ai/acme/api:1.4.2"]}]}
// Response: {"workloads":[{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["oci.hanzo.ai/acme/api:1.4.2"]}]}
func (o Ops) listDeployments(ctx context.Context, in *plane.Selector) (*plane.Workloads, error) {
b, err := o.reach(ctx, in.Cluster)
if err != nil {
@@ -52,7 +52,7 @@ func (o Ops) listDeployments(ctx context.Context, in *plane.Selector) (*plane.Wo
// getDeployment returns one Deployment.
//
// Response: {"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["registry.hanzo.ai/acme/api:1.4.2"]}
// Response: {"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["oci.hanzo.ai/acme/api:1.4.2"]}
func (o Ops) getDeployment(ctx context.Context, in *plane.NamedIn) (*plane.Workload, error) {
if err := need("name", in.Name); err != nil {
return nil, err
+16 -16
View File
@@ -131,7 +131,7 @@ func init() {
"PodsIn.nodeName": "NodeName narrows to the pods on one node — the field-selector variant the\ndrain path needs, named rather than left to a raw selector string.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"acme-prod","labelSelector":"app=api"}`),
Response: json.RawMessage(`{"pods":[{"namespace":"acme-prod","name":"api-7d9f-2xk","phase":"Running","node":"pool-a1","controller":"ReplicaSet/api-7d9f","images":["registry.hanzo.ai/acme/api:1.4.2"],"restarts":0}]}`),
Response: json.RawMessage(`{"pods":[{"namespace":"acme-prod","name":"api-7d9f-2xk","phase":"Running","node":"pool-a1","controller":"ReplicaSet/api-7d9f","images":["oci.hanzo.ai/acme/api:1.4.2"],"restarts":0}]}`),
})
zip.Describe("GET /v1/k8s/pods/:namespace/:pod/logs", zip.Doc{
Description: "Returns what one container printed.\n\n`tailLines` is the bound a caller should set; without one the read is capped at one\nmebibyte and truncated from the FRONT, so the newest output — the part that\nexplains a crash — is what survives.",
@@ -155,7 +155,7 @@ func init() {
"ResourceIn.namespace": "Namespace narrows to one namespace; empty means every namespace this\nregistration may address. Ignored for a cluster-scoped kind.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod"}`),
Response: json.RawMessage(`{"resources":[{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}],"version":"918273"}`),
Response: json.RawMessage(`{"resources":[{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}],"version":"918273"}`),
})
zip.Describe("GET /v1/k8s/resources/:kind/:namespace/:name", zip.Doc{
Description: "Returns one custom resource.",
@@ -166,7 +166,7 @@ func init() {
"ResourceRef.name": "Name is the object's name.",
"ResourceRef.namespace": "Namespace is the object's namespace; empty for a cluster-scoped kind.",
},
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}`),
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}`),
})
zip.Describe("GET /v1/k8s/resources/watch", zip.Doc{
Description: "Returns what changed to one kind since a cursor.\n\nIt is a BOUNDED read rather than a stream, and that is a design decision worth\nstating: a stream cannot cross the call plane as a value, and rendering one —\nServer-Sent Events, a websocket — is the EDGE's concern. A consumer builds its own\nstream by calling this in a loop with the cursor it got back, so the streaming\nshape exists once, in the consumer that renders it, instead of once per transport.\n\n`expired` is the field that matters most. When the cursor is older than the\napiserver's history the watch cannot be resumed, and an empty page would look\nexactly like \"nothing changed\" — which is how a watch-backed board silently stops\nupdating for hours. On `expired` a caller must LIST again and take the new cursor.",
@@ -217,7 +217,7 @@ func init() {
"Selector.namespace": "Namespace narrows to one namespace; empty means every namespace this\nregistration may address.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"acme-prod"}`),
Response: json.RawMessage(`{"workloads":[{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["registry.hanzo.ai/acme/api:1.4.2"]}]}`),
Response: json.RawMessage(`{"workloads":[{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["oci.hanzo.ai/acme/api:1.4.2"]}]}`),
})
zip.Describe("GET /v1/k8s/workloads/deployments/:namespace/:name", zip.Doc{
Description: "Returns one Deployment.",
@@ -226,7 +226,7 @@ func init() {
"NamedIn.name": "Name is the object's name.",
"NamedIn.namespace": "Namespace is the object's namespace.",
},
Response: json.RawMessage(`{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["registry.hanzo.ai/acme/api:1.4.2"]}`),
Response: json.RawMessage(`{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["oci.hanzo.ai/acme/api:1.4.2"]}`),
})
zip.Describe("GET /v1/k8s/workloads/events", zip.Doc{
Description: "Returns cluster events, oldest first.\n\nThis is the only place a failure with no pod behind it can be explained — an\nunschedulable workload, a quota refusal, a volume that never bound — because those\nproduce an event and nothing else. Events are ordered by last-seen so the tail is\nthe current situation.",
@@ -351,7 +351,7 @@ func init() {
"JobIn.serviceAccount": "ServiceAccount runs the pod as a named ServiceAccount.",
"JobIn.ttlSeconds": "TTLSeconds deletes the finished Job after this long. Zero leaves it, which\non a busy namespace is how a Job list becomes unreadable.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"hanzo","name":"build-1a2b","image":"gcr.io/kaniko-project/executor:latest","args":["--context=git://…","--destination=registry.hanzo.ai/acme/api:1.4.2"],"ttlSeconds":3600}`),
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"hanzo","name":"build-1a2b","image":"gcr.io/kaniko-project/executor:latest","args":["--context=git://…","--destination=oci.hanzo.ai/acme/api:1.4.2"],"ttlSeconds":3600}`),
Response: json.RawMessage(`{"namespace":"hanzo","name":"build-1a2b","active":1,"succeeded":0,"failed":0,"phase":"running"}`),
})
zip.Describe("POST /k8s/jobs/get", zip.Doc{
@@ -453,7 +453,7 @@ func init() {
"PodsIn.nodeName": "NodeName narrows to the pods on one node — the field-selector variant the\ndrain path needs, named rather than left to a raw selector string.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"acme-prod","labelSelector":"app=api"}`),
Response: json.RawMessage(`{"pods":[{"namespace":"acme-prod","name":"api-7d9f-2xk","phase":"Running","node":"pool-a1","controller":"ReplicaSet/api-7d9f","images":["registry.hanzo.ai/acme/api:1.4.2"],"restarts":0}]}`),
Response: json.RawMessage(`{"pods":[{"namespace":"acme-prod","name":"api-7d9f-2xk","phase":"Running","node":"pool-a1","controller":"ReplicaSet/api-7d9f","images":["oci.hanzo.ai/acme/api:1.4.2"],"restarts":0}]}`),
})
zip.Describe("POST /k8s/pods/logs", zip.Doc{
Description: "Returns what one container printed.\n\n`tailLines` is the bound a caller should set; without one the read is capped at one\nmebibyte and truncated from the FRONT, so the newest output — the part that\nexplains a crash — is what survives.",
@@ -478,8 +478,8 @@ func init() {
"ApplyIn.spec": "Spec is the desired spec, applied whole.",
"Resource.version": "Version is the object's resourceVersion — the cursor a Watch resumes from.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2","replicas":3}}`),
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2","replicas":3},"version":"918281"}`),
Example: json.RawMessage(`{"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2","replicas":3}}`),
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2","replicas":3},"version":"918281"}`),
})
zip.Describe("POST /k8s/resources/delete", zip.Doc{
Description: "Deletes one custom resource of a registered kind.\n\nDeleting an object is not deleting its data: a workload's App CR is desired state and\ncan be recreated freely, while the PersistentVolumeClaim it mounted holds the only\ncopy of the tenant's data and is a different lifetime. Nothing here deletes a claim.",
@@ -500,7 +500,7 @@ func init() {
"ResourceRef.name": "Name is the object's name.",
"ResourceRef.namespace": "Namespace is the object's namespace; empty for a cluster-scoped kind.",
},
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}`),
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}`),
})
zip.Describe("POST /k8s/resources/list", zip.Doc{
Description: "Returns custom resources of one registered kind.",
@@ -512,7 +512,7 @@ func init() {
"ResourceIn.namespace": "Namespace narrows to one namespace; empty means every namespace this\nregistration may address. Ignored for a cluster-scoped kind.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod"}`),
Response: json.RawMessage(`{"resources":[{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}],"version":"918273"}`),
Response: json.RawMessage(`{"resources":[{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2"},"status":{"phase":"Running"},"version":"918273"}],"version":"918273"}`),
})
zip.Describe("POST /k8s/resources/watch", zip.Doc{
Description: "Returns what changed to one kind since a cursor.\n\nIt is a BOUNDED read rather than a stream, and that is a design decision worth\nstating: a stream cannot cross the call plane as a value, and rendering one —\nServer-Sent Events, a websocket — is the EDGE's concern. A consumer builds its own\nstream by calling this in a loop with the cursor it got back, so the streaming\nshape exists once, in the consumer that renders it, instead of once per transport.\n\n`expired` is the field that matters most. When the cursor is older than the\napiserver's history the watch cannot be resumed, and an empty page would look\nexactly like \"nothing changed\" — which is how a watch-backed board silently stops\nupdating for hours. On `expired` a caller must LIST again and take the new cursor.",
@@ -577,7 +577,7 @@ func init() {
"NamedIn.name": "Name is the object's name.",
"NamedIn.namespace": "Namespace is the object's namespace.",
},
Response: json.RawMessage(`{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["registry.hanzo.ai/acme/api:1.4.2"]}`),
Response: json.RawMessage(`{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["oci.hanzo.ai/acme/api:1.4.2"]}`),
})
zip.Describe("POST /k8s/workloads/list-configmaps", zip.Doc{
Description: "Returns ConfigMaps, with their data.\n\nThe data travels because a ConfigMap is by definition not secret material. Secrets\nare a different kind and this API does not read one back, at all: an RPC that returns\na tenant's Secret is a credential-exfiltration endpoint however carefully it is\ngated, and material that needs protecting belongs in KMS.",
@@ -596,7 +596,7 @@ func init() {
"Selector.namespace": "Namespace narrows to one namespace; empty means every namespace this\nregistration may address.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"acme-prod"}`),
Response: json.RawMessage(`{"workloads":[{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["registry.hanzo.ai/acme/api:1.4.2"]}]}`),
Response: json.RawMessage(`{"workloads":[{"namespace":"acme-prod","name":"api","kind":"Deployment","replicas":3,"ready":3,"updated":3,"images":["oci.hanzo.ai/acme/api:1.4.2"]}]}`),
})
zip.Describe("POST /k8s/workloads/list-events", zip.Doc{
Description: "Returns cluster events, oldest first.\n\nThis is the only place a failure with no pod behind it can be explained — an\nunschedulable workload, a quota refusal, a volume that never bound — because those\nproduce an event and nothing else. Events are ordered by last-seen so the tail is\nthe current situation.",
@@ -687,7 +687,7 @@ func init() {
"JobIn.serviceAccount": "ServiceAccount runs the pod as a named ServiceAccount.",
"JobIn.ttlSeconds": "TTLSeconds deletes the finished Job after this long. Zero leaves it, which\non a busy namespace is how a Job list becomes unreadable.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"hanzo","name":"build-1a2b","image":"gcr.io/kaniko-project/executor:latest","args":["--context=git://…","--destination=registry.hanzo.ai/acme/api:1.4.2"],"ttlSeconds":3600}`),
Example: json.RawMessage(`{"cluster":"hanzo-k8s","namespace":"hanzo","name":"build-1a2b","image":"gcr.io/kaniko-project/executor:latest","args":["--context=git://…","--destination=oci.hanzo.ai/acme/api:1.4.2"],"ttlSeconds":3600}`),
Response: json.RawMessage(`{"namespace":"hanzo","name":"build-1a2b","active":1,"succeeded":0,"failed":0,"phase":"running"}`),
})
zip.Describe("POST /v1/k8s/namespaces", zip.Doc{
@@ -746,7 +746,7 @@ func init() {
"ApplyIn.spec": "Spec is the desired spec, applied whole.",
"Resource.version": "Version is the object's resourceVersion — the cursor a Watch resumes from.",
},
Example: json.RawMessage(`{"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2","replicas":3}}`),
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"registry.hanzo.ai/acme/api:1.4.2","replicas":3},"version":"918281"}`),
Example: json.RawMessage(`{"cluster":"hanzo-k8s","kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2","replicas":3}}`),
Response: json.RawMessage(`{"kind":"App","namespace":"acme-prod","name":"api","spec":{"image":"oci.hanzo.ai/acme/api:1.4.2","replicas":3},"version":"918281"}`),
})
}