fix: migrate code queue control plane to k3s

This commit is contained in:
Codex
2026-05-16 12:01:09 +00:00
parent 83ed99f659
commit 111ec9f1eb
40 changed files with 419 additions and 366 deletions
+3 -3
View File
@@ -80,8 +80,8 @@ function parseMicroserviceConfig(value: unknown, index: number): MicroserviceCon
const frontend = asRecord(item.frontend, `${path}.frontend`);
const deployment = item.deployment === undefined ? undefined : asRecord(item.deployment, `${path}.deployment`);
const deploymentMode = deployment === undefined ? "unidesk-direct" : stringFromRecord(deployment, "mode", `${path}.deployment`);
if (deploymentMode !== "unidesk-direct" && deploymentMode !== "v3sctl-managed") {
throw new Error(`${path}.deployment.mode must be unidesk-direct or v3sctl-managed`);
if (deploymentMode !== "unidesk-direct" && deploymentMode !== "k3sctl-managed") {
throw new Error(`${path}.deployment.mode must be unidesk-direct or k3sctl-managed`);
}
return {
id: stringFromRecord(item, "id", path),
@@ -113,7 +113,7 @@ function parseMicroserviceConfig(value: unknown, index: number): MicroserviceCon
: {
mode: deploymentMode,
adapterServiceId: optionalStringFromRecord(deployment, "adapterServiceId", `${path}.deployment`),
v3sServiceId: optionalStringFromRecord(deployment, "v3sServiceId", `${path}.deployment`),
k3sServiceId: optionalStringFromRecord(deployment, "k3sServiceId", `${path}.deployment`),
namespace: optionalStringFromRecord(deployment, "namespace", `${path}.deployment`),
expectedNodeIds: optionalStringArrayFromRecord(deployment, "expectedNodeIds", `${path}.deployment`),
activeNodeId: optionalStringFromRecord(deployment, "activeNodeId", `${path}.deployment`),
@@ -368,8 +368,8 @@ function canDirectProxyMicroservice(service: MicroserviceConfig): boolean {
return service.providerId === "main-server";
}
function isV3sctlManagedMicroservice(service: MicroserviceConfig): boolean {
return service.deployment.mode === "v3sctl-managed" || service.backend.proxyMode === "v3sctl-adapter-http";
function isK3sctlManagedMicroservice(service: MicroserviceConfig): boolean {
return service.deployment.mode === "k3sctl-managed" || service.backend.proxyMode === "k3sctl-adapter-http";
}
// ---------------------------------------------------------------------------
@@ -545,7 +545,7 @@ async function directMicroserviceResponse(
}
}
async function v3sctlAdapterMicroserviceResponse(
async function k3sctlAdapterMicroserviceResponse(
service: MicroserviceConfig,
method: string,
targetPath: string,
@@ -554,16 +554,16 @@ async function v3sctlAdapterMicroserviceResponse(
bodyText: string,
abortSignal?: AbortSignal,
): Promise<Response> {
const adapterServiceId = service.deployment.adapterServiceId ?? "v3sctl-adapter";
const adapterServiceId = service.deployment.adapterServiceId ?? "k3sctl-adapter";
const adapter = microserviceById(adapterServiceId);
if (adapter === null) {
return jsonResponse({ ok: false, error: `v3sctl adapter microservice not found: ${adapterServiceId}`, serviceId: service.id }, 502);
return jsonResponse({ ok: false, error: `k3sctl adapter microservice not found: ${adapterServiceId}`, serviceId: service.id }, 502);
}
if (adapter.id === service.id || isV3sctlManagedMicroservice(adapter)) {
return jsonResponse({ ok: false, error: "v3sctl adapter must be a UniDesk-direct microservice", serviceId: service.id, adapterServiceId }, 500);
if (adapter.id === service.id || isK3sctlManagedMicroservice(adapter)) {
return jsonResponse({ ok: false, error: "k3sctl adapter must be a UniDesk-direct microservice", serviceId: service.id, adapterServiceId }, 500);
}
const v3sServiceId = service.deployment.v3sServiceId ?? service.id;
const adapterTargetPath = `/api/services/${encodeURIComponent(v3sServiceId)}/proxy${targetPath}`;
const k3sServiceId = service.deployment.k3sServiceId ?? service.id;
const adapterTargetPath = `/api/services/${encodeURIComponent(k3sServiceId)}/proxy${targetPath}`;
return fetchMicroserviceUpstreamResponse(adapter, method, adapterTargetPath, proxyOptions, requestHeaders, bodyText, abortSignal);
}
@@ -576,8 +576,8 @@ async function fetchMicroserviceUpstreamResponse(
bodyText: string,
abortSignal?: AbortSignal,
): Promise<Response> {
if (isV3sctlManagedMicroservice(service)) {
return v3sctlAdapterMicroserviceResponse(service, method, targetPath, proxyOptions, requestHeaders, bodyText, abortSignal);
if (isK3sctlManagedMicroservice(service)) {
return k3sctlAdapterMicroserviceResponse(service, method, targetPath, proxyOptions, requestHeaders, bodyText, abortSignal);
}
if (canDirectProxyMicroservice(service)) {
return directMicroserviceResponse(service, method, targetPath, proxyOptions, requestHeaders, bodyText, abortSignal);
@@ -716,12 +716,12 @@ export async function getMicroservices(): Promise<JsonValue[]> {
return config().microservices.map((service) => {
const node = nodes.find((item) => item.providerId === service.providerId) ?? null;
const docker = dockerStatuses.find((item) => item.providerId === service.providerId) ?? null;
const v3sManaged = isV3sctlManagedMicroservice(service);
const container = v3sManaged ? null : findContainer(docker?.dockerStatus ?? null, service.repository.containerName);
const k3sManaged = isK3sctlManagedMicroservice(service);
const container = k3sManaged ? null : findContainer(docker?.dockerStatus ?? null, service.repository.containerName);
return {
...service,
runtime: {
orchestrator: v3sManaged ? "v3sctl" : "unidesk-direct",
orchestrator: k3sManaged ? "k3sctl" : "unidesk-direct",
providerStatus: node?.status ?? "missing",
providerName: node?.name ?? service.providerId,
providerLastHeartbeat: node?.lastHeartbeat ?? null,
+2 -2
View File
@@ -45,9 +45,9 @@ export interface MicroserviceConfig {
timeoutMs: number;
};
deployment: {
mode: "unidesk-direct" | "v3sctl-managed";
mode: "unidesk-direct" | "k3sctl-managed";
adapterServiceId?: string;
v3sServiceId?: string;
k3sServiceId?: string;
namespace?: string;
expectedNodeIds?: string[];
activeNodeId?: string;