feat: enhance database and storage management with Longhorn support

This commit is contained in:
2026-09-02 14:07:14 +07:00 Unverified
parent 6c8c8e0c1b
commit 26c2d0f015
12 changed files with 632 additions and 133 deletions
+23 -7
View File
@@ -9,6 +9,7 @@ export const DATABASE_NAMESPACE = "database";
export const DATABASE_CLUSTER = "postgres";
export const DATABASE_HOST = `c.${DATABASE_NAMESPACE}.svc.cluster.local`;
export const DATABASE_PORT = 5432;
export const REDIS_URL = "redis://redis.database.svc.cluster.local";
export const DATABASE_PROJECT_LABEL = "kuber.dev/project";
export const DATABASE_SERVICE_LABEL = "kuber.dev/service";
@@ -35,7 +36,7 @@ export type PostgresClaim = {
secretName: string;
};
type RoleCredentials = {
export type RoleCredentials = {
username: string;
password: string;
};
@@ -59,6 +60,16 @@ export function buildDatabaseUrl(
return `postgresql://${encodeConnectionComponent(credentials.username)}:${encodeConnectionComponent(credentials.password)}@${DATABASE_HOST}:${DATABASE_PORT}/${encodeConnectionComponent(claim.database)}`;
}
export function buildPostgresEnvironment(
claim: PostgresClaim,
credentials: RoleCredentials,
): Record<string, string> {
return {
DATABASE_URL: buildDatabaseUrl(claim, credentials),
REDIS_URL,
};
}
function parsePostgresVolumeString(
entry: string,
): Omit<PostgresClaim, "service" | "secretName"> | undefined {
@@ -314,6 +325,16 @@ async function reconcileDatabases(
}
}
export async function reconcilePostgresClaim(
project: string,
claim: PostgresClaim,
): Promise<RoleCredentials> {
const credentials = await ensureRoleSecret(claim);
await reconcileManagedRoles([claim]);
await reconcileDatabases(project, [claim]);
return credentials;
}
export async function reconcilePostgresClaims(
project: string,
compose: ComposeSpecification,
@@ -337,12 +358,7 @@ export async function reconcilePostgresClaims(
throw new Error(`Missing credentials for ${claim.secretName}`);
}
return [
claim.service,
{
DATABASE_URL: buildDatabaseUrl(claim, credentials),
},
];
return [claim.service, buildPostgresEnvironment(claim, credentials)];
}),
);
}