refactor: source codex sentinel names from yaml

This commit is contained in:
Codex
2026-06-14 07:19:03 +00:00
parent 72aa29317e
commit 0f826f12d3
3 changed files with 36 additions and 27 deletions
+14 -24
View File
@@ -1023,36 +1023,26 @@ function managedResourceCleanupPlan(sub2api: Sub2ApiConfig, target: Sub2ApiTarge
}
function codexPoolSentinelResourceNames(): ManagedResourceCleanupPlan["sentinel"] {
const defaults: ManagedResourceCleanupPlan["sentinel"] = {
enabled: false,
cronJobName: "sub2api-account-sentinel",
configMapName: "sub2api-account-sentinel-config",
credentialsSecretName: "sub2api-account-sentinel-profiles",
stateConfigMapName: "sub2api-account-sentinel-state",
serviceAccountName: "sub2api-account-sentinel",
roleName: "sub2api-account-sentinel",
roleBindingName: "sub2api-account-sentinel",
};
if (!existsSync(codexPoolConfigPath)) return defaults;
if (!existsSync(codexPoolConfigPath)) throw new Error(`${codexPoolConfigPath} is required for Sub2API codex-pool sentinel cleanup resource names`);
const parsed = Bun.YAML.parse(readFileSync(codexPoolConfigPath, "utf8")) as unknown;
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return defaults;
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) throw new Error(`${codexPoolConfigPath} must be an object`);
const sentinel = (parsed as Record<string, unknown>).sentinel;
if (typeof sentinel !== "object" || sentinel === null || Array.isArray(sentinel)) return defaults;
if (typeof sentinel !== "object" || sentinel === null || Array.isArray(sentinel)) throw new Error(`${codexPoolConfigPath}.sentinel must be an object`);
const record = sentinel as Record<string, unknown>;
const text = (key: string, fallback: string): string => {
const value = record[key];
return typeof value === "string" && value.length > 0 ? value : fallback;
const resourceName = (key: string): string => {
const value = stringField(record, key, "sentinel");
validateKubernetesResourceName(value, `sentinel.${key}`);
return value;
};
const serviceAccountName = text("serviceAccountName", defaults.serviceAccountName);
return {
enabled: false,
cronJobName: text("cronJobName", defaults.cronJobName),
configMapName: text("configMapName", defaults.configMapName),
credentialsSecretName: text("credentialsSecretName", defaults.credentialsSecretName),
stateConfigMapName: text("stateConfigMapName", defaults.stateConfigMapName),
serviceAccountName,
roleName: serviceAccountName,
roleBindingName: serviceAccountName,
cronJobName: resourceName("cronJobName"),
configMapName: resourceName("configMapName"),
credentialsSecretName: resourceName("credentialsSecretName"),
stateConfigMapName: resourceName("stateConfigMapName"),
serviceAccountName: resourceName("serviceAccountName"),
roleName: resourceName("roleName"),
roleBindingName: resourceName("roleBindingName"),
};
}