feat: enhance database and storage management with Longhorn support
This commit is contained in:
+23
-7
@@ -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)];
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user