alasio 8.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/src/api-server.js +18 -0
- package/dist/cli/src/api-server.js.map +1 -0
- package/dist/cli/src/bound-harnesses.js +98 -0
- package/dist/cli/src/bound-harnesses.js.map +1 -0
- package/dist/cli/src/branches.js +79 -22
- package/dist/cli/src/branches.js.map +1 -1
- package/dist/cli/src/cluster/docker.js +40 -15
- package/dist/cli/src/cluster/docker.js.map +1 -1
- package/dist/cli/src/cluster/host.js +38 -8
- package/dist/cli/src/cluster/host.js.map +1 -1
- package/dist/cli/src/cluster/k3s.js +105 -14
- package/dist/cli/src/cluster/k3s.js.map +1 -1
- package/dist/cli/src/cluster/node.js +142 -33
- package/dist/cli/src/cluster/node.js.map +1 -1
- package/dist/cli/src/cluster/stargz.js +92 -0
- package/dist/cli/src/cluster/stargz.js.map +1 -0
- package/dist/cli/src/commands/branch.js +5 -4
- package/dist/cli/src/commands/branch.js.map +1 -1
- package/dist/cli/src/commands/common.js +11 -5
- package/dist/cli/src/commands/common.js.map +1 -1
- package/dist/cli/src/commands/folder.js +14 -0
- package/dist/cli/src/commands/folder.js.map +1 -0
- package/dist/cli/src/commands/lake.js +1 -1
- package/dist/cli/src/commands/lake.js.map +1 -1
- package/dist/cli/src/commands/login-relay.js +91 -0
- package/dist/cli/src/commands/login-relay.js.map +1 -0
- package/dist/cli/src/commands/login.js +11 -10
- package/dist/cli/src/commands/login.js.map +1 -1
- package/dist/cli/src/commands/logs.js +89 -6
- package/dist/cli/src/commands/logs.js.map +1 -1
- package/dist/cli/src/commands/restart.js +10 -4
- package/dist/cli/src/commands/restart.js.map +1 -1
- package/dist/cli/src/commands/restore-filer-store.js +27 -10
- package/dist/cli/src/commands/restore-filer-store.js.map +1 -1
- package/dist/cli/src/commands/status.js +119 -20
- package/dist/cli/src/commands/status.js.map +1 -1
- package/dist/cli/src/commands/uninstall.js +8 -9
- package/dist/cli/src/commands/uninstall.js.map +1 -1
- package/dist/cli/src/commands/up.js +20 -9
- package/dist/cli/src/commands/up.js.map +1 -1
- package/dist/cli/src/commands/upgrade.js +22 -6
- package/dist/cli/src/commands/upgrade.js.map +1 -1
- package/dist/cli/src/commands.js +2 -1
- package/dist/cli/src/commands.js.map +1 -1
- package/dist/cli/src/config.js +4 -1
- package/dist/cli/src/config.js.map +1 -1
- package/dist/cli/src/cpu-baseline.js +8 -4
- package/dist/cli/src/cpu-baseline.js.map +1 -1
- package/dist/cli/src/folders.js +63 -0
- package/dist/cli/src/folders.js.map +1 -0
- package/dist/cli/src/gateway-calls.js +64 -0
- package/dist/cli/src/gateway-calls.js.map +1 -0
- package/dist/cli/src/install.js +45 -31
- package/dist/cli/src/install.js.map +1 -1
- package/dist/cli/src/kept-releases.js +27 -20
- package/dist/cli/src/kept-releases.js.map +1 -1
- package/dist/cli/src/kube/api.js +61 -15
- package/dist/cli/src/kube/api.js.map +1 -1
- package/dist/cli/src/kube/apply.js +122 -81
- package/dist/cli/src/kube/apply.js.map +1 -1
- package/dist/cli/src/kube/rollout.js +43 -21
- package/dist/cli/src/kube/rollout.js.map +1 -1
- package/dist/cli/src/main.js +2 -1
- package/dist/cli/src/main.js.map +1 -1
- package/dist/cli/src/manifests/admission.js +558 -222
- package/dist/cli/src/manifests/admission.js.map +1 -1
- package/dist/cli/src/manifests/alasio.js +180 -428
- package/dist/cli/src/manifests/alasio.js.map +1 -1
- package/dist/cli/src/manifests/branch.js +16 -27
- package/dist/cli/src/manifests/branch.js.map +1 -1
- package/dist/cli/src/manifests/codex-login.js +101 -0
- package/dist/cli/src/manifests/codex-login.js.map +1 -0
- package/dist/cli/src/manifests/collector.js +83 -62
- package/dist/cli/src/manifests/collector.js.map +1 -1
- package/dist/cli/src/manifests/common.js +82 -25
- package/dist/cli/src/manifests/common.js.map +1 -1
- package/dist/cli/src/manifests/config.js +137 -105
- package/dist/cli/src/manifests/config.js.map +1 -1
- package/dist/cli/src/manifests/disruption.js +18 -3
- package/dist/cli/src/manifests/disruption.js.map +1 -1
- package/dist/cli/src/manifests/folders.js +131 -0
- package/dist/cli/src/manifests/folders.js.map +1 -0
- package/dist/cli/src/manifests/grafana.js +4 -2
- package/dist/cli/src/manifests/grafana.js.map +1 -1
- package/dist/cli/src/manifests/harness-pools.js +236 -0
- package/dist/cli/src/manifests/harness-pools.js.map +1 -0
- package/dist/cli/src/manifests/image-holder.js +61 -0
- package/dist/cli/src/manifests/image-holder.js.map +1 -0
- package/dist/cli/src/manifests/index.js +14 -7
- package/dist/cli/src/manifests/index.js.map +1 -1
- package/dist/cli/src/manifests/keda.js +4 -2
- package/dist/cli/src/manifests/keda.js.map +1 -1
- package/dist/cli/src/manifests/lake.js +18 -20
- package/dist/cli/src/manifests/lake.js.map +1 -1
- package/dist/cli/src/manifests/log.js +84 -19
- package/dist/cli/src/manifests/log.js.map +1 -1
- package/dist/cli/src/manifests/neon.js +60 -80
- package/dist/cli/src/manifests/neon.js.map +1 -1
- package/dist/cli/src/manifests/network-policies.js +232 -94
- package/dist/cli/src/manifests/network-policies.js.map +1 -1
- package/dist/cli/src/manifests/node-agent.js +42 -15
- package/dist/cli/src/manifests/node-agent.js.map +1 -1
- package/dist/cli/src/manifests/object-store.js +99 -25
- package/dist/cli/src/manifests/object-store.js.map +1 -1
- package/dist/cli/src/manifests/sandbox-gateway.js +761 -0
- package/dist/cli/src/manifests/sandbox-gateway.js.map +1 -0
- package/dist/cli/src/manifests/scalers.js +17 -5
- package/dist/cli/src/manifests/scalers.js.map +1 -1
- package/dist/cli/src/manifests/sizing.js +17 -9
- package/dist/cli/src/manifests/sizing.js.map +1 -1
- package/dist/cli/src/manifests/valkey.js +30 -10
- package/dist/cli/src/manifests/valkey.js.map +1 -1
- package/dist/cli/src/manifests/volume-lock.js +43 -0
- package/dist/cli/src/manifests/volume-lock.js.map +1 -0
- package/dist/cli/src/manifests/vpa.js +15 -2
- package/dist/cli/src/manifests/vpa.js.map +1 -1
- package/dist/cli/src/manifests/workspace-storage.js +182 -94
- package/dist/cli/src/manifests/workspace-storage.js.map +1 -1
- package/dist/cli/src/neon-storage.js +54 -16
- package/dist/cli/src/neon-storage.js.map +1 -1
- package/dist/cli/src/release.js +9 -9
- package/dist/cli/src/release.js.map +1 -1
- package/dist/cli/src/setup-pod.js +44 -0
- package/dist/cli/src/setup-pod.js.map +1 -0
- package/dist/cli/src/target.js +2 -2
- package/dist/cli/src/target.js.map +1 -1
- package/dist/cli/src/telegram.js +13 -4
- package/dist/cli/src/telegram.js.map +1 -1
- package/dist/cli/src/wakes.js +68 -0
- package/dist/cli/src/wakes.js.map +1 -0
- package/dist/cli/src/webhook.js +5 -2
- package/dist/cli/src/webhook.js.map +1 -1
- package/dist/cluster/node/pins.json +11 -5
- package/dist/neon/control/branches.js +13 -6
- package/dist/neon/control/branches.js.map +1 -1
- package/dist/neon/control/endpoints.js +81 -10
- package/dist/neon/control/endpoints.js.map +1 -1
- package/dist/neon/control/secrets.js +24 -8
- package/dist/neon/control/secrets.js.map +1 -1
- package/dist/src/binder/bindings.js +195 -0
- package/dist/src/binder/bindings.js.map +1 -0
- package/dist/src/binder/names.js +63 -0
- package/dist/src/binder/names.js.map +1 -0
- package/dist/src/binder/tokens.js +71 -0
- package/dist/src/binder/tokens.js.map +1 -0
- package/dist/src/branch/names.js +20 -6
- package/dist/src/branch/names.js.map +1 -1
- package/dist/src/events/names.js +28 -0
- package/dist/src/events/names.js.map +1 -0
- package/dist/src/gateway/names.js +240 -0
- package/dist/src/gateway/names.js.map +1 -0
- package/dist/src/harness/names.js +67 -0
- package/dist/src/harness/names.js.map +1 -0
- package/dist/src/kube/client.js +212 -0
- package/dist/src/kube/client.js.map +1 -0
- package/dist/src/kube/sandbox-shape.js +14 -68
- package/dist/src/kube/sandbox-shape.js.map +1 -1
- package/dist/src/kube/started-map.js +12 -0
- package/dist/src/kube/started-map.js.map +1 -0
- package/dist/src/node-agent/names.js +62 -5
- package/dist/src/node-agent/names.js.map +1 -1
- package/dist/src/sandbox/names.js +12 -20
- package/dist/src/sandbox/names.js.map +1 -1
- package/dist/src/sandbox/otlp-resource.js +173 -0
- package/dist/src/sandbox/otlp-resource.js.map +1 -0
- package/dist/src/sandbox/telemetry.js +43 -0
- package/dist/src/sandbox/telemetry.js.map +1 -0
- package/dist/src/telegram/bot-commands.js +17 -0
- package/dist/src/telegram/bot-commands.js.map +1 -0
- package/dist/src/telegram/stop.js +12 -0
- package/dist/src/telegram/stop.js.map +1 -0
- package/dist/src/telemetry/config.js +131 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/forward.js +154 -0
- package/dist/src/telemetry/forward.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/src/manifests/agent-sandbox.js +0 -92
- package/dist/cli/src/manifests/agent-sandbox.js.map +0 -1
- package/dist/cli/src/manifests/juicefs-csi.js +0 -320
- package/dist/cli/src/manifests/juicefs-csi.js.map +0 -1
- package/dist/cli/src/manifests/sandboxes.agents.x-k8s.io.json +0 -6295
- package/dist/src/kube/config.js +0 -145
- package/dist/src/kube/config.js.map +0 -1
|
@@ -78,33 +78,104 @@ export function idleness(previous, use, now) {
|
|
|
78
78
|
/** Whether a compute idle as `idle` says has been idle for `suspendAfterMs` by `now`. */
|
|
79
79
|
export const suspendDue = ({ since }, now, suspendAfterMs) => since !== null && now - since >= suspendAfterMs;
|
|
80
80
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
* The label of a compute's pod that its Service selects it by, which its Deployment's
|
|
82
|
+
* selector does not name: a sleep takes it off the pod before it stops it, so connections
|
|
83
|
+
* stop reaching the pod before it stops, and the proxy, finding the address it keeps of
|
|
84
|
+
* the compute refusing, asks for a wake (suspendCompute).
|
|
85
|
+
*/
|
|
86
|
+
export const SERVING_LABEL = "alasio.dev/serving";
|
|
87
|
+
/**
|
|
88
|
+
* Wakes a compute, as `steps` read it and act: records the wake asked for, and wakes a
|
|
89
|
+
* compute that sleeps, or that a sleep is stopping, under its lock, which that sleep holds
|
|
90
|
+
* until its pod is gone: read again under it, as a sleep may have ended meanwhile, or been
|
|
91
|
+
* given up, it is scaled to one once the pod put to sleep is gone; then waits until it
|
|
92
|
+
* takes connections. A stop found begun but no longer under way, its sleep's neon-control
|
|
93
|
+
* stopped in it, is ended (Waking's resume). One found running, and not stopping, after
|
|
94
|
+
* the wake was recorded needs no lock: a sleep marks the compute stopping before it counts
|
|
95
|
+
* it again (suspendCompute), so one that has not, by then, counts this wake, and lets it
|
|
96
|
+
* be. While it takes no connection, the compute is read again, and one found asleep or
|
|
97
|
+
* stopping woken likewise. Whether it slept.
|
|
88
98
|
*/
|
|
89
99
|
export async function wakeCompute(steps) {
|
|
90
100
|
const first = await steps.deployment();
|
|
91
101
|
await steps.asked();
|
|
102
|
+
const sleeps = async (deployment) => deployment.replicas === 0 || await steps.stopping();
|
|
92
103
|
const scaled = () => steps.locked(async () => {
|
|
93
104
|
const now = await steps.deployment();
|
|
94
|
-
if (now.replicas > 0)
|
|
105
|
+
if (now.replicas > 0) {
|
|
106
|
+
if (await steps.stopping())
|
|
107
|
+
await steps.resume();
|
|
95
108
|
return false;
|
|
109
|
+
}
|
|
96
110
|
await steps.untilGone(now);
|
|
111
|
+
if (await steps.stopping())
|
|
112
|
+
await steps.resume();
|
|
97
113
|
await steps.scaleUp();
|
|
98
114
|
return true;
|
|
99
115
|
});
|
|
100
|
-
let slept = first
|
|
116
|
+
let slept = (await sleeps(first)) && await scaled();
|
|
101
117
|
while (!(await steps.accepts())) {
|
|
102
|
-
if ((await steps.deployment())
|
|
118
|
+
if (await sleeps(await steps.deployment()))
|
|
103
119
|
slept = (await scaled()) || slept;
|
|
104
120
|
await steps.pause();
|
|
105
121
|
}
|
|
106
122
|
return slept;
|
|
107
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Takes a compute's pods off its Service, as `steps` act, and waits until its Service
|
|
126
|
+
* reaches none of them: until its EndpointSlices list none, and then until a connection to
|
|
127
|
+
* its address is refused, as kube-proxy writes the rules that route one from those slices a
|
|
128
|
+
* moment later (its sync, a second at least). Those pods. Only the rules of the node that
|
|
129
|
+
* connection is made from are seen so: on a cluster of several nodes, kube-proxy on Neon's
|
|
130
|
+
* proxy's may write them later, and a connection the proxy makes there in that moment, after
|
|
131
|
+
* the sleep has counted the compute again, is let through to its pod, and cut with it. Nor
|
|
132
|
+
* is a client's connection still authenticating as the sleep counts the compute again seen
|
|
133
|
+
* by the count, as Postgres lists a session only once it has authenticated, milliseconds
|
|
134
|
+
* after its connection. Where the cluster's network drops a connection to a Service that
|
|
135
|
+
* routes to no pod rather than refuse it, none is ever refused, and the sleep, out of time,
|
|
136
|
+
* gives up: the compute never sleeps, rather than cut a client.
|
|
137
|
+
*/
|
|
138
|
+
export async function withdrawCompute(steps) {
|
|
139
|
+
const pods = await steps.pods();
|
|
140
|
+
for (const pod of pods)
|
|
141
|
+
await steps.takeOff(pod);
|
|
142
|
+
while (await steps.listed(pods))
|
|
143
|
+
await steps.pause("its EndpointSlices list its pods taken off it");
|
|
144
|
+
while (await steps.reached())
|
|
145
|
+
await steps.pause("a connection to it is let through to its pods taken off it");
|
|
146
|
+
return pods;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Puts a compute to sleep, as `steps` act: marks it stopping, takes its pods off its
|
|
150
|
+
* Service, counts it again on them, and, still idle, scales it to none and waits until its
|
|
151
|
+
* pod is gone. Marked first, so a wake recorded before the count is counted, and the
|
|
152
|
+
* sleep given up, and one recorded after finds the mark, and waits for the sleep
|
|
153
|
+
* (wakeCompute). Taken off its Service before the count, so a connection made after it is
|
|
154
|
+
* refused, not let through to a pod about to stop, wherever kube-proxy routes as on
|
|
155
|
+
* neon-control's node (withdrawCompute): Neon's proxy, refused at the address it keeps of
|
|
156
|
+
* the compute, forgets it and asks for a wake, which waits for the sleep and wakes the
|
|
157
|
+
* compute. A sleep given up, or failing before it scales, gives the pods back,
|
|
158
|
+
* as one used gives them back; one failing after leaves the mark, which the next wake
|
|
159
|
+
* ends. Whether it slept.
|
|
160
|
+
*/
|
|
161
|
+
export async function suspendCompute(steps) {
|
|
162
|
+
await steps.mark();
|
|
163
|
+
try {
|
|
164
|
+
if (await steps.used(await steps.withdraw())) {
|
|
165
|
+
await steps.restore();
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
// Its own failure is the one to tell; one restoring is the next wake's to end.
|
|
171
|
+
await steps.restore().catch(() => { });
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
await steps.scaleDown();
|
|
175
|
+
await steps.untilGone();
|
|
176
|
+
await steps.unmark();
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
108
179
|
/** The bytes from LSN `from` to LSN `to` (each `<high>/<low>` in hexadecimal, as Postgres writes one), 0 where `to` is not past `from`. */
|
|
109
180
|
export function lsnDistance(from, to) {
|
|
110
181
|
const bytes = (lsn) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../neon/control/endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEtE,wHAAwH;AACxH,MAAM,CAAC,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAQhE,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,WAAsC,EAAE,IAAY,EAAE,aAA+C;IAC9H,MAAM,SAAS,GAAqC,WAAW,EAAE,SAAS,IAAI,aAAa,CAAC;IAC5F,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAAe,EAAE,YAAY,GAAkB,IAAI;IACnG,OAAO;QACL,KAAK,EAAE,OAAO;QACd,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,OAAO,EAAE;gBACP,UAAU,EAAE,EAAE,MAAM,EAAE;gBACtB,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE;gBAC3E,mBAAmB,EAAE,EAAE,OAAO,EAAE;aACjC;SACF;KACF,CAAC;AACJ,CAAC;AAED,oIAAoI;AACpI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAU,EAAE,CAAC,GAAG,OAAO,IAAI,SAAS,sBAAsB,YAAY,EAAE,CAAC;AAE1I,qHAAqH;AACrH,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB,EAAE,IAAa;IACpF,OAAO;QACL,OAAO;QACP,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE;KAC5I,CAAC;AACJ,CAAC;AAsBD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,QAA8B,EAAE,GAAQ,EAAE,GAAW;IAC5E,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5I,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AAC7G,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAY,EAAE,GAAW,EAAE,cAAsB,EAAW,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,KAAK,IAAI,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../neon/control/endpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,10 +19,14 @@ export const LAKE_ROLE = "lake";
|
|
|
19
19
|
export const LAKE_READER_ROLE = "lake_reader";
|
|
20
20
|
/** Grafana's (src/neon/grafana.ts), which alasio makes. */
|
|
21
21
|
export const GRAFANA_ROLE = "grafana";
|
|
22
|
+
/** The harness host's (src/neon/harness.ts), which writes a turn's part of alasio's state, and which alasio makes. */
|
|
23
|
+
export const HARNESS_ROLE = "harness";
|
|
24
|
+
/** The relay of the Codex login's (src/neon/codex-login.ts), which reads and writes the login alone, and which alasio makes. */
|
|
25
|
+
export const CODEX_LOGIN_ROLE = "codex_login";
|
|
22
26
|
/** neon-control's own (./computes.ts), which every compute's spec gives it, and no client connects as. */
|
|
23
27
|
export const MONITOR_ROLE = "neon_control";
|
|
24
28
|
/** The roles main's clients connect as, whose verifiers the stack keeps. */
|
|
25
|
-
export const CLIENT_ROLES = [ROLE, LAKE_ROLE, LAKE_READER_ROLE, GRAFANA_ROLE];
|
|
29
|
+
export const CLIENT_ROLES = [ROLE, LAKE_ROLE, LAKE_READER_ROLE, GRAFANA_ROLE, HARNESS_ROLE, CODEX_LOGIN_ROLE];
|
|
26
30
|
/**
|
|
27
31
|
* Main's environment's principals on the log, as cli/src/manifests/log.ts's
|
|
28
32
|
* environmentAccess("main") names them: its alasio's, which reads its Telegram updates and
|
|
@@ -34,9 +38,12 @@ export const MAIN_ENVIRONMENT_PRINCIPALS = ["alasio-main", "loader-main"];
|
|
|
34
38
|
* The log's principals besides its admin, each with a password of its own: the collector's
|
|
35
39
|
* gateway, which writes the stack's telemetry to it; the lake's intake, which reads that;
|
|
36
40
|
* KEDA, which reads how much the intake has yet to; the webhook intake, which writes each
|
|
37
|
-
* environment's Telegram updates to it;
|
|
41
|
+
* environment's Telegram updates to it; the sandbox gateway, which writes each environment's
|
|
42
|
+
* events; and main's environment's (MAIN_ENVIRONMENT_PRINCIPALS).
|
|
38
43
|
*/
|
|
39
|
-
export const LOG_PRINCIPALS = ["gateway", "intake", "scaler", "webhook", ...MAIN_ENVIRONMENT_PRINCIPALS];
|
|
44
|
+
export const LOG_PRINCIPALS = ["gateway", "intake", "scaler", "webhook", "sandbox-gateway", ...MAIN_ENVIRONMENT_PRINCIPALS];
|
|
45
|
+
/** The Valkey user of workspace storage's metadata the node agents set quotas as (cli/src/manifests/workspace-storage.ts). */
|
|
46
|
+
export const WORKSPACE_QUOTAS_USER = "quotas";
|
|
40
47
|
function hexId() {
|
|
41
48
|
return randomUUID().replaceAll("-", "");
|
|
42
49
|
}
|
|
@@ -78,6 +85,8 @@ export function completeSecrets(existing = {}) {
|
|
|
78
85
|
lakePassword: kept(stored.lakePassword, () => secret()),
|
|
79
86
|
lakeReaderPassword: kept(stored.lakeReaderPassword, () => secret()),
|
|
80
87
|
grafanaPassword: kept(stored.grafanaPassword, () => secret()),
|
|
88
|
+
harnessPassword: kept(stored.harnessPassword, () => secret()),
|
|
89
|
+
codexLoginPassword: kept(stored.codexLoginPassword, () => secret()),
|
|
81
90
|
};
|
|
82
91
|
const log = kept(stored.log, () => ({}));
|
|
83
92
|
const secrets = {
|
|
@@ -99,11 +108,14 @@ export function completeSecrets(existing = {}) {
|
|
|
99
108
|
lakePassword: passwords.lakePassword,
|
|
100
109
|
computeControlToken: kept(stored.computeControlToken, () => secret()),
|
|
101
110
|
valkeyPassword: kept(stored.valkeyPassword, () => secret()),
|
|
111
|
+
valkeyQuotasPassword: kept(stored.valkeyQuotasPassword, () => secret()),
|
|
102
112
|
lakeReaderPassword: passwords.lakeReaderPassword,
|
|
103
113
|
lakeQueryToken: kept(stored.lakeQueryToken, () => secret()),
|
|
104
114
|
grafanaPassword: passwords.grafanaPassword,
|
|
105
115
|
grafanaAdminPassword: kept(stored.grafanaAdminPassword, () => secret()),
|
|
106
116
|
grafanaSecretKey: kept(stored.grafanaSecretKey, () => secret()),
|
|
117
|
+
harnessPassword: passwords.harnessPassword,
|
|
118
|
+
codexLoginPassword: passwords.codexLoginPassword,
|
|
107
119
|
branchForkKey: kept(stored.branchForkKey, () => secret()),
|
|
108
120
|
filerStoreFilerPassword: kept(stored.filerStoreFilerPassword, () => secret()),
|
|
109
121
|
filerStoreCollectorPassword: kept(stored.filerStoreCollectorPassword, () => secret()),
|
|
@@ -116,8 +128,12 @@ export function completeSecrets(existing = {}) {
|
|
|
116
128
|
[LAKE_ROLE]: kept(verifiers[LAKE_ROLE], () => scramVerifier(passwords.lakePassword)),
|
|
117
129
|
[LAKE_READER_ROLE]: kept(verifiers[LAKE_READER_ROLE], () => scramVerifier(passwords.lakeReaderPassword)),
|
|
118
130
|
[GRAFANA_ROLE]: kept(verifiers[GRAFANA_ROLE], () => scramVerifier(passwords.grafanaPassword)),
|
|
131
|
+
[HARNESS_ROLE]: kept(verifiers[HARNESS_ROLE], () => scramVerifier(passwords.harnessPassword)),
|
|
132
|
+
[CODEX_LOGIN_ROLE]: kept(verifiers[CODEX_LOGIN_ROLE], () => scramVerifier(passwords.codexLoginPassword)),
|
|
119
133
|
},
|
|
120
134
|
nodeAgentToken: kept(stored.nodeAgentToken, () => secret()),
|
|
135
|
+
gatewayCallerKey: kept(stored.gatewayCallerKey, () => secret()),
|
|
136
|
+
gatewayBindingKey: kept(stored.gatewayBindingKey, () => secret()),
|
|
121
137
|
logClusterId: kept(stored.logClusterId, () => clusterId()),
|
|
122
138
|
log: {
|
|
123
139
|
...log,
|
|
@@ -135,8 +151,8 @@ export function remoteStorage(prefix, { endpoint, bucket, region = "us-east-1" }
|
|
|
135
151
|
return `{ endpoint="${endpoint}", bucket_name="${bucket}", bucket_region="${region}", prefix_in_bucket="${prefix}" }`;
|
|
136
152
|
}
|
|
137
153
|
/**
|
|
138
|
-
* SeaweedFS's S3 identities: Neon, the lake, workspace storage
|
|
139
|
-
*
|
|
154
|
+
* SeaweedFS's S3 identities: Neon, the lake, workspace storage and the snapshots', each
|
|
155
|
+
* on their own bucket of `buckets`; the
|
|
140
156
|
* lake's reader, which may only read the lake's; the backups', which writes the backups'
|
|
141
157
|
* bucket and reads the workspaces' metadata it backs up; and an admin of Neon's bucket
|
|
142
158
|
* alone, which gives it its lifecycle rules. The snapshots' identity is its bucket's admin,
|
|
@@ -152,15 +168,15 @@ export function s3Identities(secrets, buckets) {
|
|
|
152
168
|
{
|
|
153
169
|
name: "backups",
|
|
154
170
|
credentials: [secrets.s3.backups],
|
|
155
|
-
actions: [...on(buckets.backups),
|
|
171
|
+
actions: [...on(buckets.backups), `Read:${buckets.workspaces}`, `List:${buckets.workspaces}`],
|
|
156
172
|
},
|
|
157
173
|
// Branch environments' lakes are given it too: a branch's lake reads main's files where they are (DuckLake keeps
|
|
158
174
|
// every file's path relative to one data path) and writes beside them, and SeaweedFS's Write, which writing
|
|
159
175
|
// needs, deletes as well, so it cannot be narrowed to a branch's own files (cli/src/branches.ts).
|
|
160
176
|
{ name: "lake", credentials: [secrets.s3.lake], actions: on(buckets.lake) },
|
|
161
177
|
{ name: "lakeReader", credentials: [secrets.s3.lakeReader], actions: [`Read:${buckets.lake}`, `List:${buckets.lake}`] },
|
|
162
|
-
|
|
163
|
-
|
|
178
|
+
{ name: "workspaces", credentials: [secrets.s3.workspaces], actions: on(buckets.workspaces) },
|
|
179
|
+
{ name: "snapshots", credentials: [secrets.s3.snapshots], actions: [...on(buckets.snapshots), `Admin:${buckets.snapshots}`] },
|
|
164
180
|
],
|
|
165
181
|
};
|
|
166
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../../neon/control/secrets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC;AACjC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,mEAAmE;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAChC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,0GAA0G;AAC1G,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../../neon/control/secrets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC;AACjC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,mEAAmE;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAChC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,sHAAsH;AACtH,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,gIAAgI;AAChI,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,0GAA0G;AAC1G,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAU,CAAC;AAUvH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,aAAa,EAAE,aAAa,CAAU,CAAC;AAGnF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,2BAA2B,CAAU,CAAC;AAQrI,8HAA8H;AAC9H,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAsG9C,SAAS,KAAK;IACZ,OAAO,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,MAAM;IACb,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,SAAS,CAAC;QACR,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAQ,GAAkB,EAAE;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,IAAI,GAAG,CAAI,KAAoB,EAAE,IAAa,EAAK,EAAE;QACzD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;IACF,sFAAsF;IACtF,MAAM,EAAE,GAA+C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,SAAS,GAAwC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG;QAChB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3D,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACvD,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACnE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC7D,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC7D,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;KACpE,CAAC;IACF,MAAM,GAAG,GAAiC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAiB;QAC5B,GAAG,MAAM;QACT,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;QAC9C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;QAClD,EAAE,EAAE;YACF,GAAG,EAAE;YACL,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9F,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACjG,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACvG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9F,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAChH,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAChH,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;SAC9G;QACD,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACvE,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACrE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3D,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACvE,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;QAChD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3D,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACvE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC/D,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;QAChD,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACzD,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC7E,2BAA2B,EAAE,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACrF,wBAAwB,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC/E,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACnD,iEAAiE;QACjE,SAAS,EAAE;YACT,GAAG,SAAS;YACZ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC5E,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACpF,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACxG,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC7F,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC7F,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;SACzG;QACD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3D,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC/D,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACjE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC1D,GAAG,EAAE;YACH,GAAG,GAAG;YACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YACtC,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAiC;SAC5I;KACF,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAyB;IAC7G,OAAO,eAAe,QAAQ,mBAAmB,MAAM,qBAAqB,MAAM,wBAAwB,MAAM,KAAK,CAAC;AACxH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAqB,EAAE,OAAgB;IAClE,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAClG,OAAO;QACL,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3E,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;YACtF;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;gBACjC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,OAAO,CAAC,UAAU,EAAE,CAAC;aAC9F;YACD,iHAAiH;YACjH,4GAA4G;YAC5G,kGAAkG;YAClG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3E,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;YACvH,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7F,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE;SAC9H;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAoB;IAC1G,OAAO;QACL,mBAAmB,IAAI,CAAC,SAAS,CAAC,EAAE;QACpC,kBAAkB,IAAI,CAAC,aAAa,CAAC,EAAE;QACvC,kBAAkB,IAAI,CAAC,cAAc,CAAC,EAAE;QACxC,oBAAoB,IAAI,CAAC,cAAc,CAAC,EAAE;QAC1C,qBAAqB,IAAI,CAAC,eAAe,CAAC,EAAE;QAC5C,qBAAqB,IAAI,CAAC,GAAG,aAAa,aAAa,CAAC,EAAE;QAC1D,2BAA2B,IAAI,CAAC,KAAK,CAAC,EAAE;QACxC,0BAA0B;QAC1B,wBAAwB;QACxB,mCAAmC,IAAI,CAAC,aAAa,CAAC,EAAE;QACxD,kBAAkB,OAAO,EAAE;QAC3B,6CAA6C,cAAc,CAAC,WAAW,qBAAqB,cAAc,CAAC,aAAa,IAAI;QAC5H,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Clock, Effect } from "effect";
|
|
2
|
+
import { hasStatus, KubeClient } from "../kube/client.js";
|
|
3
|
+
import { BINDING_LABEL, boundAnnotations, boundLabels, FREE_LABEL, freeLabels, KEY_ANNOTATION, keyHash, leaseName, POOL_LABEL } from "./names.js";
|
|
4
|
+
/** The annotation of a binding's Lease while it is released: the releasing binder. */
|
|
5
|
+
export const RELEASING_ANNOTATION = "alasio.dev/releasing";
|
|
6
|
+
/** How long a binding under way may go unrenewed before another binder takes it over, by default. */
|
|
7
|
+
export const BINDING_TIMEOUT_MS = 60_000;
|
|
8
|
+
/** `ms`, as the API's MicroTime. */
|
|
9
|
+
const microTime = (ms) => `${new Date(ms).toISOString().slice(0, -1)}000Z`;
|
|
10
|
+
const selector = (labels) => Object.entries(labels).map(([label, value]) => `${label}=${value}`).join(",");
|
|
11
|
+
/** Whether `pod` runs, its containers started, and is not being deleted: free to be claimed, as it waits for what it is to serve. */
|
|
12
|
+
export const running = (pod) => !pod.metadata?.deletionTimestamp && pod.status?.phase === "Running";
|
|
13
|
+
/**
|
|
14
|
+
* Whether a container of `pod` ended, or was started again in it, as one whose rootfs failed
|
|
15
|
+
* under it does: a free pod so serves no binding, as what binds takes a bound pod whose container
|
|
16
|
+
* ended or started again for broken (src/gateway/sessions.ts, src/gateway/harnesses.ts hostEnded),
|
|
17
|
+
* and is never claimed, but deleted, for its Deployment to make another (reconcile).
|
|
18
|
+
*/
|
|
19
|
+
export const restarted = (pod) => (pod.status?.containerStatuses ?? []).some(({ restartCount, state, lastState }) => restartCount > 0 || state?.terminated !== undefined || lastState?.terminated !== undefined);
|
|
20
|
+
/** Whether `pod` runs ready, and is not being deleted: serving its binding. */
|
|
21
|
+
export const serving = (pod) => running(pod) && (pod.status?.conditions ?? []).some(({ type, status }) => type === "Ready" && status === "True");
|
|
22
|
+
/** A Lease as the API holds it, by its key: null where there is none. */
|
|
23
|
+
export const readLease = Effect.fnUntraced(function* (pool, key) {
|
|
24
|
+
const kube = yield* KubeClient;
|
|
25
|
+
return (yield* kube.read("coordination.k8s.io/v1", "Lease", pool.namespace, leaseName(key)));
|
|
26
|
+
});
|
|
27
|
+
/** The Lease of a binding of `key` under way, by `binder`, renewed now. */
|
|
28
|
+
const leaseUnderWay = (pool, key, binder, now, staleMs) => ({
|
|
29
|
+
apiVersion: "coordination.k8s.io/v1",
|
|
30
|
+
kind: "Lease",
|
|
31
|
+
metadata: { name: leaseName(key), namespace: pool.namespace, labels: { [POOL_LABEL]: pool.name, [BINDING_LABEL]: keyHash(key) }, annotations: { [KEY_ANNOTATION]: key, "alasio.dev/binder": binder } },
|
|
32
|
+
spec: { renewTime: microTime(now), leaseDurationSeconds: Math.ceil(staleMs / 1000) },
|
|
33
|
+
});
|
|
34
|
+
/** Whether `lease` has gone unrenewed for `staleMs` by `now`. */
|
|
35
|
+
export const stale = (lease, staleMs, now) => now - (Date.parse(lease.spec?.renewTime ?? "") || 0) >= staleMs;
|
|
36
|
+
/**
|
|
37
|
+
* Takes the Lease of `key`'s binding for `binder`: made, where there is none; or taken over,
|
|
38
|
+
* by an update conditioned on the version read, where a binding under way names no holder
|
|
39
|
+
* and has gone unrenewed for `staleMs`. Otherwise it is another binding's.
|
|
40
|
+
*/
|
|
41
|
+
export const takeLease = Effect.fnUntraced(function* (pool, key, binder, staleMs = BINDING_TIMEOUT_MS) {
|
|
42
|
+
const kube = yield* KubeClient;
|
|
43
|
+
for (;;) {
|
|
44
|
+
const now = yield* Clock.currentTimeMillis;
|
|
45
|
+
const made = yield* kube.create(leaseUnderWay(pool, key, binder, now, staleMs)).pipe(Effect.map((lease) => ({ taken: true, lease })), Effect.catchIf(hasStatus(409), () => Effect.succeed(null)));
|
|
46
|
+
if (made)
|
|
47
|
+
return made;
|
|
48
|
+
const held = yield* readLease(pool, key);
|
|
49
|
+
// Released between the two: made anew.
|
|
50
|
+
if (!held)
|
|
51
|
+
continue;
|
|
52
|
+
if (held.spec?.holderIdentity || !stale(held, staleMs, now))
|
|
53
|
+
return { taken: false, lease: held };
|
|
54
|
+
const fresh = leaseUnderWay(pool, key, binder, now, staleMs);
|
|
55
|
+
const over = yield* kube.replace({ ...held, metadata: { ...held.metadata, annotations: fresh.metadata?.annotations ?? {} }, spec: fresh.spec ?? {} }).pipe(Effect.map((lease) => ({ taken: true, lease })), Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
|
|
56
|
+
if (over)
|
|
57
|
+
return over;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
/** Names `pod` the holder of the Lease `lease`, by an update conditioned on its version: the Lease, or null where another binder took it over meanwhile. */
|
|
61
|
+
export const holdLease = Effect.fnUntraced(function* (lease, pod) {
|
|
62
|
+
const kube = yield* KubeClient;
|
|
63
|
+
return yield* kube.replace({ ...lease, spec: { ...lease.spec, holderIdentity: pod } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
|
|
64
|
+
});
|
|
65
|
+
/** Marks the Lease `lease` of a binding released by `binder`, renewed now, by an update conditioned on its version: the Lease, or null where it changed meanwhile. */
|
|
66
|
+
export const markReleasing = Effect.fnUntraced(function* (lease, binder) {
|
|
67
|
+
const kube = yield* KubeClient;
|
|
68
|
+
const now = yield* Clock.currentTimeMillis;
|
|
69
|
+
return yield* kube.replace({ ...lease, metadata: { ...lease.metadata, annotations: { ...lease.metadata?.annotations, [RELEASING_ANNOTATION]: binder } }, spec: { ...lease.spec, renewTime: microTime(now) } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
|
|
70
|
+
});
|
|
71
|
+
/** The annotation of a binding's Lease saying when a request of its key last came, in ms: stamped by its binders, now and then. */
|
|
72
|
+
export const ACTIVE_ANNOTATION = "alasio.dev/active-at";
|
|
73
|
+
/** Stamps the Lease of `key`'s binding with a request of it at `now`; one gone, or changed meanwhile, is left. */
|
|
74
|
+
export const touchLease = Effect.fnUntraced(function* (pool, key, now) {
|
|
75
|
+
const kube = yield* KubeClient;
|
|
76
|
+
yield* kube.patch("coordination.k8s.io/v1", "Lease", pool.namespace, leaseName(key), { metadata: { annotations: { [ACTIVE_ANNOTATION]: String(now) } } }).pipe(Effect.catchIf(hasStatus(404), () => Effect.void), Effect.asVoid);
|
|
77
|
+
});
|
|
78
|
+
/** When a request of the binding `lease` last came, as its binders stamped it; null where none ever did. */
|
|
79
|
+
export const activeAt = (lease) => {
|
|
80
|
+
const at = Number(lease.metadata?.annotations?.[ACTIVE_ANNOTATION]);
|
|
81
|
+
return Number.isFinite(at) && at > 0 ? at : null;
|
|
82
|
+
};
|
|
83
|
+
/** The bindings of `pool` whose pods are named, as their Leases hold them. */
|
|
84
|
+
export const heldLeases = Effect.fnUntraced(function* (pool) {
|
|
85
|
+
const kube = yield* KubeClient;
|
|
86
|
+
const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", pool.namespace, `${POOL_LABEL}=${pool.name},${BINDING_LABEL}`));
|
|
87
|
+
return leases.filter(({ spec }) => spec?.holderIdentity);
|
|
88
|
+
});
|
|
89
|
+
/** Takes the releasing mark off the Lease `lease`, by an update conditioned on its version: the Lease, or null where it changed meanwhile. */
|
|
90
|
+
export const unmarkReleasing = Effect.fnUntraced(function* (lease) {
|
|
91
|
+
const kube = yield* KubeClient;
|
|
92
|
+
const annotations = { ...lease.metadata?.annotations };
|
|
93
|
+
delete annotations[RELEASING_ANNOTATION];
|
|
94
|
+
return yield* kube.replace({ ...lease, metadata: { ...lease.metadata, annotations } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
|
|
95
|
+
});
|
|
96
|
+
/** Renews the Lease `lease` of a binding under way, or being released, by an update conditioned on its version: the Lease, or null where another binder took it over meanwhile. */
|
|
97
|
+
export const renewLease = Effect.fnUntraced(function* (lease) {
|
|
98
|
+
const kube = yield* KubeClient;
|
|
99
|
+
const now = yield* Clock.currentTimeMillis;
|
|
100
|
+
return yield* kube.replace({ ...lease, spec: { ...lease.spec, renewTime: microTime(now) } }).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* Claims a free pod of `pool` that runs for `key`, ready or not, as one is ready only once
|
|
104
|
+
* what it serves is readied for it (BindOptions' prepare): each tried in turn, from a random
|
|
105
|
+
* one on, so binders claiming at once mostly try apart, relabelled by an update conditioned
|
|
106
|
+
* on the version read; one another claimed first is passed over, and so is one a container of
|
|
107
|
+
* which ended or started again (restarted). The pod claimed, or null where none was free.
|
|
108
|
+
*/
|
|
109
|
+
export const claim = Effect.fnUntraced(function* (pool, key) {
|
|
110
|
+
const kube = yield* KubeClient;
|
|
111
|
+
// A pod that was ever bound is never claimed, whatever its labels came to say since: it
|
|
112
|
+
// serves one binding in its life, as a sandbox released can still reach what it was given.
|
|
113
|
+
const free = (yield* kube.list("v1", "Pod", pool.namespace, selector(freeLabels(pool)))).filter((pod) => running(pod) && !restarted(pod) && pod.metadata?.labels?.[BINDING_LABEL] === undefined && pod.metadata?.annotations?.[KEY_ANNOTATION] === undefined);
|
|
114
|
+
const from = Math.floor(Math.random() * free.length);
|
|
115
|
+
for (let n = 0; n < free.length; n += 1) {
|
|
116
|
+
const pod = free[(from + n) % free.length];
|
|
117
|
+
const labels = { ...pod.metadata?.labels };
|
|
118
|
+
delete labels[FREE_LABEL];
|
|
119
|
+
const claimed = yield* kube.replace({
|
|
120
|
+
...pod,
|
|
121
|
+
// A listed object's own, as a list's items come without them.
|
|
122
|
+
apiVersion: "v1",
|
|
123
|
+
kind: "Pod",
|
|
124
|
+
metadata: { ...pod.metadata, labels: { ...labels, ...boundLabels(pool, key) }, annotations: { ...pod.metadata?.annotations, ...boundAnnotations(key) } },
|
|
125
|
+
}).pipe(Effect.catchIf((error) => hasStatus(409)(error) || hasStatus(404)(error), () => Effect.succeed(null)));
|
|
126
|
+
if (claimed)
|
|
127
|
+
return claimed;
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
});
|
|
131
|
+
/** The pod bound to `key` in `pool`, serving or not, being deleted or not; null where there is none. */
|
|
132
|
+
export const boundPod = Effect.fnUntraced(function* (pool, key) {
|
|
133
|
+
const kube = yield* KubeClient;
|
|
134
|
+
const pods = (yield* kube.list("v1", "Pod", pool.namespace, selector(boundLabels(pool, key))));
|
|
135
|
+
return pods.find((pod) => pod.metadata?.annotations?.[KEY_ANNOTATION] === key) ?? null;
|
|
136
|
+
});
|
|
137
|
+
/** Lets the Lease `lease` go, as it is: one changed since, by another binder, is kept (409). */
|
|
138
|
+
export const releaseLease = Effect.fnUntraced(function* (lease) {
|
|
139
|
+
const kube = yield* KubeClient;
|
|
140
|
+
yield* kube.remove("coordination.k8s.io/v1", "Lease", lease.metadata?.namespace ?? "", lease.metadata?.name ?? "", lease.metadata?.resourceVersion);
|
|
141
|
+
});
|
|
142
|
+
/** How many keys are bound in `namespace`, of every pool there. */
|
|
143
|
+
export const boundIn = Effect.fnUntraced(function* (namespace) {
|
|
144
|
+
const kube = yield* KubeClient;
|
|
145
|
+
const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", namespace, POOL_LABEL));
|
|
146
|
+
return leases.filter(({ spec }) => spec?.holderIdentity).length;
|
|
147
|
+
});
|
|
148
|
+
/** How many of `pool`'s pods are free and running, none of whose containers ended or started again, and how many of its keys are bound. */
|
|
149
|
+
export const counts = Effect.fnUntraced(function* (pool) {
|
|
150
|
+
const kube = yield* KubeClient;
|
|
151
|
+
const free = (yield* kube.list("v1", "Pod", pool.namespace, selector(freeLabels(pool)))).filter((pod) => running(pod) && !restarted(pod)).length;
|
|
152
|
+
const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", pool.namespace, `${POOL_LABEL}=${pool.name}`));
|
|
153
|
+
return { free, bound: leases.filter(({ spec }) => spec?.holderIdentity).length };
|
|
154
|
+
});
|
|
155
|
+
/**
|
|
156
|
+
* Sets `pool`'s bindings right where a binder ended between their steps: a bound pod no Lease
|
|
157
|
+
* of its key names is deleted, as one claimed by a bind that then gave up; and a Lease naming
|
|
158
|
+
* a pod gone is let go, as it was read, `before` run while it holds still, as what binds may
|
|
159
|
+
* record of it, then told of (`letGo`), as a binding whose pod went while it was bound, which
|
|
160
|
+
* what binds may say lost. A pod being deleted is not gone while it is there, as its binder may
|
|
161
|
+
* be saving it as it ends. A binding under way, its pod not yet named, is left to its binder,
|
|
162
|
+
* or to the next to take it over; and so is one being released, whose releaser deletes its pod
|
|
163
|
+
* before its Lease, and tells of its release itself, unless it has stopped renewing it, so a
|
|
164
|
+
* binding released is never told of as lost too. And a free pod a container of which ended or
|
|
165
|
+
* started again (restarted), which no bind claims, is deleted as it was read, for its Deployment
|
|
166
|
+
* to make another; one claimed since is left to its binder. What was set right, as names.
|
|
167
|
+
*/
|
|
168
|
+
export const reconcile = Effect.fnUntraced(function* (pool, letGo = () => Effect.void, before = () => Effect.void) {
|
|
169
|
+
const kube = yield* KubeClient;
|
|
170
|
+
const leases = (yield* kube.list("coordination.k8s.io/v1", "Lease", pool.namespace, `${POOL_LABEL}=${pool.name},${BINDING_LABEL}`));
|
|
171
|
+
const there = (yield* kube.list("v1", "Pod", pool.namespace, `${POOL_LABEL}=${pool.name},${BINDING_LABEL}`));
|
|
172
|
+
const pods = there.filter(({ metadata }) => !metadata?.deletionTimestamp);
|
|
173
|
+
const held = new Map(leases.map((lease) => [lease.metadata?.labels?.[BINDING_LABEL] ?? "", lease]));
|
|
174
|
+
const running = new Set(there.map(({ metadata }) => metadata?.name ?? ""));
|
|
175
|
+
const orphans = pods.filter(({ metadata }) => {
|
|
176
|
+
const lease = held.get(metadata?.labels?.[BINDING_LABEL] ?? "");
|
|
177
|
+
return !lease || (lease.spec?.holderIdentity && lease.spec.holderIdentity !== metadata?.name);
|
|
178
|
+
});
|
|
179
|
+
const now = yield* Clock.currentTimeMillis;
|
|
180
|
+
const released = (lease) => lease.metadata?.annotations?.[RELEASING_ANNOTATION] !== undefined && !stale(lease, BINDING_TIMEOUT_MS, now);
|
|
181
|
+
const gone = leases.filter((lease) => lease.spec?.holderIdentity && !running.has(lease.spec.holderIdentity) && !released(lease));
|
|
182
|
+
yield* Effect.forEach(orphans, ({ metadata }) => kube.remove("v1", "Pod", pool.namespace, metadata?.name ?? ""), { discard: true });
|
|
183
|
+
// One changed since it was read, as by its binder, is no more this one's to let go, nor to tell of.
|
|
184
|
+
const letGone = yield* Effect.forEach(gone, (lease) => before(lease).pipe(Effect.andThen(releaseLease(lease)), Effect.as(true), Effect.catchIf(hasStatus(409), () => Effect.succeed(false))));
|
|
185
|
+
yield* Effect.forEach(gone.filter((_, n) => letGone[n]), letGo, { discard: true });
|
|
186
|
+
const free = (yield* kube.list("v1", "Pod", pool.namespace, selector(freeLabels(pool))));
|
|
187
|
+
const broken = free.filter((pod) => !pod.metadata?.deletionTimestamp && restarted(pod) && pod.metadata?.labels?.[BINDING_LABEL] === undefined && pod.metadata?.annotations?.[KEY_ANNOTATION] === undefined);
|
|
188
|
+
const deleted = yield* Effect.forEach(broken, ({ metadata }) => kube.remove("v1", "Pod", pool.namespace, metadata?.name ?? "", metadata?.resourceVersion).pipe(Effect.as(true), Effect.catchIf(hasStatus(409), () => Effect.succeed(false))));
|
|
189
|
+
return {
|
|
190
|
+
pods: orphans.map(({ metadata }) => metadata?.name ?? ""),
|
|
191
|
+
leases: gone.filter((_, n) => letGone[n]).map(({ metadata }) => metadata?.name ?? ""),
|
|
192
|
+
broken: broken.filter((_, n) => deleted[n]).map(({ metadata }) => metadata?.name ?? ""),
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../../src/binder/bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the binder's bindings are known by (./bindings.ts): the labels and annotations of a
|
|
3
|
+
* pool's pods and of their Leases, and how a key names them. Free of anything but Node's own,
|
|
4
|
+
* so the command line, which renders the pools, takes it without the binder.
|
|
5
|
+
*/
|
|
6
|
+
import { createHash, createHmac } from "node:crypto";
|
|
7
|
+
import { BUSY_ANNOTATIONS } from "../kube/busy-label.js";
|
|
8
|
+
/** The label of a pool's pods, its name. */
|
|
9
|
+
export const POOL_LABEL = "alasio.dev/pool";
|
|
10
|
+
/** The label of a pool's free pods, which its Deployment's selector selects with POOL_LABEL. */
|
|
11
|
+
export const FREE_LABEL = "alasio.dev/free";
|
|
12
|
+
/** The label of a bound pod, and of its Lease: its key's hash. */
|
|
13
|
+
export const BINDING_LABEL = "alasio.dev/binding";
|
|
14
|
+
/** The annotation of a bound pod, and of its Lease: its key. */
|
|
15
|
+
export const KEY_ANNOTATION = "alasio.dev/binding-key";
|
|
16
|
+
/** The header of a request that binds nothing: passed on where its key is bound, and otherwise answered as unbound (./server.ts). */
|
|
17
|
+
export const NO_BIND_HEADER = "x-alasio-bind";
|
|
18
|
+
/**
|
|
19
|
+
* The key of the environment `environment`'s callers, of the gateway's caller key `master`:
|
|
20
|
+
* its HMAC of the environment's name, hex, a key as the text its Secret holds is, as the
|
|
21
|
+
* master is; so each environment's alasio, given its own alone, signs tokens of its own
|
|
22
|
+
* environment's sessions alone (./tokens.ts).
|
|
23
|
+
*/
|
|
24
|
+
export const environmentKey = (master, environment) => Buffer.from(createHmac("sha256", master).update(`environment:${environment}`).digest("hex"));
|
|
25
|
+
/** The hash of `key` its Lease and pod are named and labelled by: a label's value at most. */
|
|
26
|
+
export const keyHash = (key) => createHash("sha256").update(key).digest("hex").slice(0, 40);
|
|
27
|
+
/** The name of the Lease of `key`'s binding. */
|
|
28
|
+
export const leaseName = (key) => `binding-${keyHash(key)}`;
|
|
29
|
+
/** The labels of a pool's free pods, as its Deployment's template and selector give them. */
|
|
30
|
+
export const freeLabels = (pool) => ({ [POOL_LABEL]: pool.name, [FREE_LABEL]: "true" });
|
|
31
|
+
/** The labels of a pod of `pool` bound to `key`. */
|
|
32
|
+
export const boundLabels = (pool, key) => ({ [POOL_LABEL]: pool.name, [BINDING_LABEL]: keyHash(key) });
|
|
33
|
+
/** The annotations of a pod bound to `key`: the key, and what keeps its node from being removed while it is. */
|
|
34
|
+
export const boundAnnotations = (key) => ({ [KEY_ANNOTATION]: key, ...BUSY_ANNOTATIONS });
|
|
35
|
+
/**
|
|
36
|
+
* The header of an answer the front gives a request it passed to no pod, nothing of it sent
|
|
37
|
+
* past the front (./server.ts), so that its caller may send it again, after its Retry-After: an
|
|
38
|
+
* MCP call's among them, which a pod given it may have run.
|
|
39
|
+
*/
|
|
40
|
+
export const NOT_PASSED_HEADER = "x-alasio-not-passed";
|
|
41
|
+
/**
|
|
42
|
+
* How long the gateway's pod is given to stop (its terminationGracePeriodSeconds): its front's
|
|
43
|
+
* calls under way let end within it, past its linger (./server.ts STOP_CALLS_MS, STOP_LINGER_MS),
|
|
44
|
+
* with room for what stops after the front.
|
|
45
|
+
*/
|
|
46
|
+
export const STOP_GRACE_SECONDS = 35;
|
|
47
|
+
/**
|
|
48
|
+
* How the gateway's pod's readiness is probed: so long as its front, stopping, answers no
|
|
49
|
+
* probe, a pod deleted as its Deployment's one replica is a target still, until it is marked
|
|
50
|
+
* unready after these (./server.ts STOP_LINGER_MS).
|
|
51
|
+
*/
|
|
52
|
+
export const GATEWAY_READINESS = { periodSeconds: 5, failureThreshold: 3 };
|
|
53
|
+
/** Where a bound pod tells the front of what its harness did on its own, for its caller's control plane, with its binding's token (./server.ts relay). */
|
|
54
|
+
export const EVENTS_PATH = "/events";
|
|
55
|
+
/**
|
|
56
|
+
* The header of a request for the binding it names alone, by its Lease's uid, as one that gives
|
|
57
|
+
* that binding's pod its grant is (src/harness/grant.ts): where its key is bound to another now,
|
|
58
|
+
* bound anew as the request came or before, it is passed to no pod, and answered 409 `{ moved:
|
|
59
|
+
* { binding, namespace } }`, the binding it is bound to now, for its caller to ask again of that
|
|
60
|
+
* one (./server.ts).
|
|
61
|
+
*/
|
|
62
|
+
export const PINNED_HEADER = "x-alasio-binding";
|
|
63
|
+
//# sourceMappingURL=names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../../../src/binder/names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,gGAAgG;AAChG,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAClD,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEvD,qIAAqI;AACrI,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC;AAQ9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,WAAmB,EAAU,EAAE,CAC5E,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/F,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5G,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAE5E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhI,oDAAoD;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,GAAW,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEvJ,gHAAgH;AAChH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAoC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;AAEpI;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAW,CAAC;AAEpF,0JAA0J;AAC1J,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC"}
|