feat: organize all services into separate stacks by dependency

This commit is contained in:
2025-11-22 17:51:58 +05:00
parent 06a316f1e6
commit a25c25afc4
30 changed files with 2513 additions and 386 deletions

View File

@@ -1,14 +1,9 @@
import { HelmProvider } from "@cdktf/provider-helm/lib/provider";
import { Release } from "@cdktf/provider-helm/lib/release";
import { Manifest } from "@cdktf/provider-kubernetes/lib/manifest";
import { KubernetesProvider } from "@cdktf/provider-kubernetes/lib/provider";
import { Construct } from "constructs";
type PostgresClusterOptions = {
providers: {
kubernetes: KubernetesProvider;
helm: HelmProvider;
};
provider: KubernetesProvider;
name: string;
namespace: string;
users: string[];
@@ -22,16 +17,7 @@ export class PostgresCluster extends Construct {
constructor(scope: Construct, id: string, options: PostgresClusterOptions) {
super(scope, id);
const { kubernetes, helm } = options.providers;
new Release(this, "cnpg-operator", {
provider: helm,
repository: "https://cloudnative-pg.github.io/charts",
chart: "cloudnative-pg",
name: "postgres-system",
namespace: "cnpg-system",
createNamespace: true,
});
const { provider } = options;
const destinationPath = "s3://postgres-backups/";
const endpointURL = options.backupR2EndpointURL;
@@ -64,7 +50,7 @@ export class PostgresCluster extends Construct {
};
new Manifest(this, "r2-backup-store", {
provider: kubernetes,
provider,
manifest: {
apiVersion: "barmancloud.cnpg.io/v1",
kind: "ObjectStore",
@@ -95,7 +81,7 @@ export class PostgresCluster extends Construct {
// Self-signed issuer for creating CA certificates
new Manifest(this, "selfsigned-issuer", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Issuer",
@@ -111,7 +97,7 @@ export class PostgresCluster extends Construct {
// Server CA certificate
new Manifest(this, "server-ca-cert", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Certificate",
@@ -140,7 +126,7 @@ export class PostgresCluster extends Construct {
// Issuer using the server CA
new Manifest(this, "server-ca-issuer", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Issuer",
@@ -158,7 +144,7 @@ export class PostgresCluster extends Construct {
// Server certificate
new Manifest(this, "server-cert", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Certificate",
@@ -187,7 +173,7 @@ export class PostgresCluster extends Construct {
// Client CA certificate
new Manifest(this, "client-ca", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Certificate",
@@ -216,7 +202,7 @@ export class PostgresCluster extends Construct {
// Issuer using the client CA
new Manifest(this, "client-ca-issuer", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Issuer",
@@ -234,7 +220,7 @@ export class PostgresCluster extends Construct {
// Secret for client certificate
new Manifest(this, `${certNames.client}-secret`, {
provider: kubernetes,
provider,
manifest: {
apiVersion: "v1",
kind: "Secret",
@@ -250,7 +236,7 @@ export class PostgresCluster extends Construct {
// Client certificate for streaming replica
new Manifest(this, "streaming-replica-cert", {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Certificate",
@@ -277,7 +263,7 @@ export class PostgresCluster extends Construct {
options.users.forEach(
(user) =>
new Manifest(this, `${user}-client-cert`, {
provider: kubernetes,
provider,
manifest: {
apiVersion: certManagerApiVersion,
kind: "Certificate",
@@ -302,7 +288,7 @@ export class PostgresCluster extends Construct {
);
new Manifest(this, "postgres-cluster", {
provider: kubernetes,
provider,
fieldManager: { forceConflicts: true },
manifest: {
apiVersion: "postgresql.cnpg.io/v1",
@@ -435,7 +421,7 @@ export class PostgresCluster extends Construct {
});
new Manifest(this, "postgres-backup-job", {
provider: kubernetes,
provider,
manifest: {
apiVersion: "postgresql.cnpg.io/v1",
kind: "ScheduledBackup",