From 6b547c25271256651383bd03230ba234c2a48bf3 Mon Sep 17 00:00:00 2001 From: kavix Date: Tue, 30 Jun 2026 17:59:10 +0530 Subject: [PATCH] refactor(doclet): migrate postgres and nats components to resources and disable admin UIs by default in development Signed-off-by: kavix --- .../doclet/bindings/development/nats.yaml | 13 + .../doclet/bindings/development/postgres.yaml | 13 + .../components/collab-svc/workload.yaml | 8 +- .../components/document-svc/workload.yaml | 22 +- .../doclet/components/nats/component.yaml | 16 -- .../release-bindings/nats-development.yaml | 11 - .../nats/release-bindings/nats-staging.yaml | 11 - .../nats/releases/nats-20260223-1.yaml | 194 ------------- .../doclet/components/nats/workload.yaml | 18 -- .../doclet/components/postgres/component.yaml | 25 -- .../postgres-development.yaml | 11 - .../release-bindings/postgres-staging.yaml | 11 - .../releases/postgres-20260223-1.yaml | 270 ------------------ .../doclet/components/postgres/workload.yaml | 22 -- .../projects/doclet/resources/nats.yaml | 11 + .../projects/doclet/resources/postgres.yaml | 13 + 16 files changed, 62 insertions(+), 607 deletions(-) create mode 100644 namespaces/default/projects/doclet/bindings/development/nats.yaml create mode 100644 namespaces/default/projects/doclet/bindings/development/postgres.yaml delete mode 100644 namespaces/default/projects/doclet/components/nats/component.yaml delete mode 100644 namespaces/default/projects/doclet/components/nats/release-bindings/nats-development.yaml delete mode 100644 namespaces/default/projects/doclet/components/nats/release-bindings/nats-staging.yaml delete mode 100644 namespaces/default/projects/doclet/components/nats/releases/nats-20260223-1.yaml delete mode 100644 namespaces/default/projects/doclet/components/nats/workload.yaml delete mode 100644 namespaces/default/projects/doclet/components/postgres/component.yaml delete mode 100644 namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-development.yaml delete mode 100644 namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-staging.yaml delete mode 100644 namespaces/default/projects/doclet/components/postgres/releases/postgres-20260223-1.yaml delete mode 100644 namespaces/default/projects/doclet/components/postgres/workload.yaml create mode 100644 namespaces/default/projects/doclet/resources/nats.yaml create mode 100644 namespaces/default/projects/doclet/resources/postgres.yaml diff --git a/namespaces/default/projects/doclet/bindings/development/nats.yaml b/namespaces/default/projects/doclet/bindings/development/nats.yaml new file mode 100644 index 0000000..ee3f30d --- /dev/null +++ b/namespaces/default/projects/doclet/bindings/development/nats.yaml @@ -0,0 +1,13 @@ +apiVersion: openchoreo.dev/v1alpha1 +kind: ResourceReleaseBinding +metadata: + name: doclet-nats-development + namespace: default +spec: + owner: + projectName: doclet + resourceName: doclet-nats + environment: development + retainPolicy: Delete + resourceTypeEnvironmentConfigs: + adminEnabled: false diff --git a/namespaces/default/projects/doclet/bindings/development/postgres.yaml b/namespaces/default/projects/doclet/bindings/development/postgres.yaml new file mode 100644 index 0000000..d860039 --- /dev/null +++ b/namespaces/default/projects/doclet/bindings/development/postgres.yaml @@ -0,0 +1,13 @@ +apiVersion: openchoreo.dev/v1alpha1 +kind: ResourceReleaseBinding +metadata: + name: doclet-postgres-development + namespace: default +spec: + owner: + projectName: doclet + resourceName: doclet-postgres + environment: development + retainPolicy: Delete + resourceTypeEnvironmentConfigs: + adminEnabled: false diff --git a/namespaces/default/projects/doclet/components/collab-svc/workload.yaml b/namespaces/default/projects/doclet/components/collab-svc/workload.yaml index e93c914..c39858d 100644 --- a/namespaces/default/projects/doclet/components/collab-svc/workload.yaml +++ b/namespaces/default/projects/doclet/components/collab-svc/workload.yaml @@ -14,12 +14,10 @@ spec: type: HTTP port: 8090 dependencies: - endpoints: - - component: nats - name: tcp - visibility: project + resources: + - ref: doclet-nats envBindings: - address: DOCLET_NATS_URL + url: DOCLET_NATS_URL owner: componentName: collab-svc projectName: doclet diff --git a/namespaces/default/projects/doclet/components/document-svc/workload.yaml b/namespaces/default/projects/doclet/components/document-svc/workload.yaml index d961246..060ba09 100644 --- a/namespaces/default/projects/doclet/components/document-svc/workload.yaml +++ b/namespaces/default/projects/doclet/components/document-svc/workload.yaml @@ -8,10 +8,6 @@ spec: env: - key: DOCLET_DOCUMENT_ADDR value: :8080 - - key: DB_PASSWORD - value: "doclet" - - key: DB_USER - value: "doclet" image: host.k3d.internal:10082/doclet-document-svc-image:v1-4a2acc61 endpoints: http: @@ -19,17 +15,17 @@ spec: port: 8080 visibility: [external] dependencies: - endpoints: - - component: postgres - name: tcp - visibility: project + resources: + - ref: doclet-postgres envBindings: - address: DOCLET_DATABASE_URL - - component: nats - name: tcp - visibility: project + host: DB_HOST + port: DB_PORT + username: DB_USER + password: DB_PASSWORD + database: DB_NAME + - ref: doclet-nats envBindings: - address: DOCLET_NATS_URL + url: DOCLET_NATS_URL owner: componentName: document-svc projectName: doclet diff --git a/namespaces/default/projects/doclet/components/nats/component.yaml b/namespaces/default/projects/doclet/components/nats/component.yaml deleted file mode 100644 index a8f971a..0000000 --- a/namespaces/default/projects/doclet/components/nats/component.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: Component -metadata: - name: nats - namespace: default -spec: - owner: - projectName: doclet - - componentType: - name: deployment/message-broker - kind: ComponentType - - parameters: - replicas: 1 - port: 4222 diff --git a/namespaces/default/projects/doclet/components/nats/release-bindings/nats-development.yaml b/namespaces/default/projects/doclet/components/nats/release-bindings/nats-development.yaml deleted file mode 100644 index 751a7c5..0000000 --- a/namespaces/default/projects/doclet/components/nats/release-bindings/nats-development.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: ReleaseBinding -metadata: - name: nats-development - namespace: default -spec: - environment: development - owner: - componentName: nats - projectName: doclet - releaseName: nats-20260223-1 diff --git a/namespaces/default/projects/doclet/components/nats/release-bindings/nats-staging.yaml b/namespaces/default/projects/doclet/components/nats/release-bindings/nats-staging.yaml deleted file mode 100644 index d1e1fbf..0000000 --- a/namespaces/default/projects/doclet/components/nats/release-bindings/nats-staging.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: ReleaseBinding -metadata: - name: nats-staging - namespace: default -spec: - environment: staging - owner: - componentName: nats - projectName: doclet - releaseName: nats-20260223-1 diff --git a/namespaces/default/projects/doclet/components/nats/releases/nats-20260223-1.yaml b/namespaces/default/projects/doclet/components/nats/releases/nats-20260223-1.yaml deleted file mode 100644 index 9274f1d..0000000 --- a/namespaces/default/projects/doclet/components/nats/releases/nats-20260223-1.yaml +++ /dev/null @@ -1,194 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: ComponentRelease -metadata: - name: nats-20260223-1 - namespace: default -spec: - componentProfile: - parameters: - port: 4222 - replicas: 1 - componentType: - kind: ComponentType - name: web-application - spec: - resources: - - id: deployment - template: - apiVersion: apps/v1 - kind: Deployment - metadata: - labels: ${metadata.labels} - name: ${metadata.name} - namespace: ${metadata.namespace} - spec: - replicas: ${environmentConfigs.replicas} - selector: - matchLabels: ${metadata.podSelectors} - template: - metadata: - labels: ${metadata.podSelectors} - spec: - containers: - - args: | - ${has(workload.container.args) ? workload.container.args : oc_omit()} - command: | - ${has(workload.container.command) ? workload.container.command : oc_omit()} - env: ${dependencies.toContainerEnvs()} - envFrom: ${configurations.toContainerEnvFrom()} - image: ${workload.container.image} - imagePullPolicy: ${environmentConfigs.imagePullPolicy} - name: main - ports: - - containerPort: ${parameters.port} - name: tcp - protocol: TCP - resources: - limits: - cpu: ${environmentConfigs.resources.limits.cpu} - memory: ${environmentConfigs.resources.limits.memory} - requests: - cpu: ${environmentConfigs.resources.requests.cpu} - memory: ${environmentConfigs.resources.requests.memory} - volumeMounts: ${configurations.toContainerVolumeMounts()} - volumes: ${configurations.toVolumes()} - - id: service - template: - apiVersion: v1 - kind: Service - metadata: - labels: ${metadata.labels} - name: ${metadata.componentName} - namespace: ${metadata.namespace} - spec: - ports: - - name: tcp - port: ${parameters.port} - protocol: TCP - targetPort: ${parameters.port} - selector: ${metadata.podSelectors} - type: ClusterIP - - forEach: ${configurations.toConfigEnvsByContainer()} - id: env-config - template: - apiVersion: v1 - data: | - ${envConfig.envs.transformMapEntry(index, env, {env.name: env.value})} - kind: ConfigMap - metadata: - name: ${envConfig.resourceName} - namespace: ${metadata.namespace} - var: envConfig - - forEach: ${configurations.toConfigFileList()} - id: file-config - template: - apiVersion: v1 - data: - ${config.name}: | - ${config.value} - kind: ConfigMap - metadata: - name: ${config.resourceName} - namespace: ${metadata.namespace} - var: config - - forEach: ${configurations.toSecretEnvsByContainer()} - id: secret-env-external - template: - apiVersion: external-secrets.io/v1 - kind: ExternalSecret - metadata: - name: ${secretEnv.resourceName} - namespace: ${metadata.namespace} - spec: - data: | - ${secretEnv.envs.map(secret, { - "secretKey": secret.name, - "remoteRef": { - "key": secret.remoteRef.key, - ?"property": secret.remoteRef.?property - } - })} - refreshInterval: 15s - secretStoreRef: - kind: ClusterSecretStore - name: ${dataplane.secretStore} - target: - creationPolicy: Owner - name: ${secretEnv.resourceName} - var: secretEnv - - forEach: ${configurations.toSecretFileList()} - id: secret-file-external - template: - apiVersion: external-secrets.io/v1 - kind: ExternalSecret - metadata: - name: ${file.resourceName} - namespace: ${metadata.namespace} - spec: - data: - - remoteRef: - key: ${file.remoteRef.key} - property: | - ${has(file.remoteRef.property) ? file.remoteRef.property : oc_omit()} - secretKey: ${file.name} - refreshInterval: 15s - secretStoreRef: - kind: ClusterSecretStore - name: ${dataplane.secretStore} - target: - creationPolicy: Owner - name: ${file.resourceName} - var: file - parameters: - openAPIV3Schema: - type: object - properties: - port: - type: integer - default: 4222 - environmentConfigs: - openAPIV3Schema: - type: object - $defs: - ResourceQuantity: - type: object - properties: - cpu: - type: string - default: "100m" - memory: - type: string - default: "256Mi" - ResourceRequirements: - type: object - properties: - requests: - $ref: "#/$defs/ResourceQuantity" - default: {} - limits: - $ref: "#/$defs/ResourceQuantity" - default: {} - properties: - replicas: - type: integer - default: 1 - resources: - $ref: "#/$defs/ResourceRequirements" - default: {} - imagePullPolicy: - type: string - default: IfNotPresent - workloadType: deployment - owner: - componentName: nats - projectName: doclet - workload: - container: - args: - - --http_port - - "8222" - image: nats:2.10-alpine - endpoints: - tcp: - type: TCP - port: 4222 diff --git a/namespaces/default/projects/doclet/components/nats/workload.yaml b/namespaces/default/projects/doclet/components/nats/workload.yaml deleted file mode 100644 index a5b5b4f..0000000 --- a/namespaces/default/projects/doclet/components/nats/workload.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: Workload -metadata: - name: nats - namespace: default -spec: - owner: - componentName: nats - projectName: doclet - container: - image: nats:2.10-alpine - args: - - "--http_port" - - "8222" - endpoints: - tcp: - type: TCP - port: 4222 diff --git a/namespaces/default/projects/doclet/components/postgres/component.yaml b/namespaces/default/projects/doclet/components/postgres/component.yaml deleted file mode 100644 index d284457..0000000 --- a/namespaces/default/projects/doclet/components/postgres/component.yaml +++ /dev/null @@ -1,25 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: Component -metadata: - name: postgres - namespace: default -spec: - owner: - projectName: doclet - - componentType: - name: deployment/database - kind: ComponentType - - parameters: - replicas: 1 - port: 5432 - - traits: - - name: persistent-volume - kind: Trait - instanceName: data-storage - parameters: - volumeName: pg-data - mountPath: /var/lib/postgresql/data - containerName: main diff --git a/namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-development.yaml b/namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-development.yaml deleted file mode 100644 index fb4505c..0000000 --- a/namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-development.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: ReleaseBinding -metadata: - name: postgres-development - namespace: default -spec: - environment: development - owner: - componentName: postgres - projectName: doclet - releaseName: postgres-20260223-1 diff --git a/namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-staging.yaml b/namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-staging.yaml deleted file mode 100644 index e4e9d6e..0000000 --- a/namespaces/default/projects/doclet/components/postgres/release-bindings/postgres-staging.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: ReleaseBinding -metadata: - name: postgres-staging - namespace: default -spec: - environment: staging - owner: - componentName: postgres - projectName: doclet - releaseName: postgres-20260223-1 diff --git a/namespaces/default/projects/doclet/components/postgres/releases/postgres-20260223-1.yaml b/namespaces/default/projects/doclet/components/postgres/releases/postgres-20260223-1.yaml deleted file mode 100644 index ea5bbff..0000000 --- a/namespaces/default/projects/doclet/components/postgres/releases/postgres-20260223-1.yaml +++ /dev/null @@ -1,270 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: ComponentRelease -metadata: - name: postgres-20260223-1 - namespace: default -spec: - componentProfile: - parameters: - port: 5432 - replicas: 1 - traits: - - instanceName: data-storage - kind: Trait - name: persistent-volume - parameters: - containerName: main - mountPath: /var/lib/postgresql/data - volumeName: pg-data - componentType: - kind: ComponentType - name: database - spec: - resources: - - id: deployment - template: - apiVersion: apps/v1 - kind: Deployment - metadata: - labels: ${metadata.labels} - name: ${metadata.name} - namespace: ${metadata.namespace} - spec: - replicas: ${environmentConfigs.replicas} - selector: - matchLabels: ${metadata.podSelectors} - template: - metadata: - labels: ${metadata.podSelectors} - spec: - containers: - - args: | - ${has(workload.container.args) ? workload.container.args : oc_omit()} - command: | - ${has(workload.container.command) ? workload.container.command : oc_omit()} - env: ${dependencies.toContainerEnvs()} - envFrom: ${configurations.toContainerEnvFrom()} - image: ${workload.container.image} - imagePullPolicy: ${environmentConfigs.imagePullPolicy} - name: main - ports: - - containerPort: ${parameters.port} - name: tcp - protocol: TCP - resources: - limits: - cpu: ${environmentConfigs.resources.limits.cpu} - memory: ${environmentConfigs.resources.limits.memory} - requests: - cpu: ${environmentConfigs.resources.requests.cpu} - memory: ${environmentConfigs.resources.requests.memory} - volumeMounts: ${configurations.toContainerVolumeMounts()} - volumes: ${configurations.toVolumes()} - - id: service - template: - apiVersion: v1 - kind: Service - metadata: - labels: ${metadata.labels} - name: ${metadata.componentName} - namespace: ${metadata.namespace} - spec: - ports: - - name: tcp - port: ${parameters.port} - protocol: TCP - targetPort: ${parameters.port} - selector: ${metadata.podSelectors} - type: ClusterIP - - forEach: ${configurations.toConfigEnvsByContainer()} - id: env-config - template: - apiVersion: v1 - data: | - ${envConfig.envs.transformMapEntry(index, env, {env.name: env.value})} - kind: ConfigMap - metadata: - name: ${envConfig.resourceName} - namespace: ${metadata.namespace} - var: envConfig - - forEach: ${configurations.toConfigFileList()} - id: file-config - template: - apiVersion: v1 - data: - ${config.name}: | - ${config.value} - kind: ConfigMap - metadata: - name: ${config.resourceName} - namespace: ${metadata.namespace} - var: config - - forEach: ${configurations.toSecretEnvsByContainer()} - id: secret-env-external - template: - apiVersion: external-secrets.io/v1 - kind: ExternalSecret - metadata: - name: ${secretEnv.resourceName} - namespace: ${metadata.namespace} - spec: - data: | - ${secretEnv.envs.map(secret, { - "secretKey": secret.name, - "remoteRef": { - "key": secret.remoteRef.key, - ?"property": secret.remoteRef.?property - } - })} - refreshInterval: 15s - secretStoreRef: - kind: ClusterSecretStore - name: ${dataplane.secretStore} - target: - creationPolicy: Owner - name: ${secretEnv.resourceName} - var: secretEnv - - forEach: ${configurations.toSecretFileList()} - id: secret-file-external - template: - apiVersion: external-secrets.io/v1 - kind: ExternalSecret - metadata: - name: ${file.resourceName} - namespace: ${metadata.namespace} - spec: - data: - - remoteRef: - key: ${file.remoteRef.key} - property: | - ${has(file.remoteRef.property) ? file.remoteRef.property : oc_omit()} - secretKey: ${file.name} - refreshInterval: 15s - secretStoreRef: - kind: ClusterSecretStore - name: ${dataplane.secretStore} - target: - creationPolicy: Owner - name: ${file.resourceName} - var: file - parameters: - openAPIV3Schema: - type: object - properties: - port: - type: integer - default: 5432 - environmentConfigs: - openAPIV3Schema: - type: object - $defs: - ResourceQuantity: - type: object - properties: - cpu: - type: string - default: "100m" - memory: - type: string - default: "256Mi" - ResourceRequirements: - type: object - properties: - requests: - $ref: "#/$defs/ResourceQuantity" - default: {} - limits: - $ref: "#/$defs/ResourceQuantity" - default: {} - properties: - replicas: - type: integer - default: 1 - resources: - $ref: "#/$defs/ResourceRequirements" - default: {} - imagePullPolicy: - type: string - default: IfNotPresent - workloadType: deployment - owner: - componentName: postgres - projectName: doclet - traits: - - kind: Trait - name: persistent-volume - spec: - creates: - - template: - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - name: ${metadata.name}-${trait.instanceName} - namespace: ${metadata.namespace} - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: ${environmentConfigs.size} - storageClassName: ${environmentConfigs.storageClass} - patches: - - operations: - - op: add - path: /spec/template/spec/volumes/- - value: - name: ${parameters.volumeName} - persistentVolumeClaim: - claimName: ${metadata.name}-${trait.instanceName} - target: - group: apps - kind: Deployment - version: v1 - - operations: - - op: add - path: /spec/template/spec/containers/[?(@.name=='${parameters.containerName}')]/volumeMounts/- - value: - mountPath: ${parameters.mountPath} - name: ${parameters.volumeName} - target: - group: apps - kind: Deployment - version: v1 - parameters: - openAPIV3Schema: - type: object - required: - - volumeName - - mountPath - properties: - volumeName: - type: string - mountPath: - type: string - containerName: - type: string - default: main - environmentConfigs: - openAPIV3Schema: - type: object - properties: - size: - type: string - default: "1Gi" - storageClass: - type: string - default: local-path - workload: - container: - env: - - key: POSTGRES_USER - value: doclet - - key: POSTGRES_PASSWORD - value: doclet - - key: POSTGRES_DB - value: doclet - image: postgres:16-alpine - endpoints: - tcp: - type: TCP - port: 5432 diff --git a/namespaces/default/projects/doclet/components/postgres/workload.yaml b/namespaces/default/projects/doclet/components/postgres/workload.yaml deleted file mode 100644 index 1896be6..0000000 --- a/namespaces/default/projects/doclet/components/postgres/workload.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: openchoreo.dev/v1alpha1 -kind: Workload -metadata: - name: postgres - namespace: default -spec: - owner: - componentName: postgres - projectName: doclet - container: - image: postgres:16-alpine - env: - - key: POSTGRES_USER - value: "doclet" - - key: POSTGRES_PASSWORD - value: "doclet" - - key: POSTGRES_DB - value: "doclet" - endpoints: - tcp: - type: TCP - port: 5432 diff --git a/namespaces/default/projects/doclet/resources/nats.yaml b/namespaces/default/projects/doclet/resources/nats.yaml new file mode 100644 index 0000000..adf6cb8 --- /dev/null +++ b/namespaces/default/projects/doclet/resources/nats.yaml @@ -0,0 +1,11 @@ +apiVersion: openchoreo.dev/v1alpha1 +kind: Resource +metadata: + name: doclet-nats + namespace: default +spec: + owner: + projectName: doclet + type: + kind: ClusterResourceType + name: nats diff --git a/namespaces/default/projects/doclet/resources/postgres.yaml b/namespaces/default/projects/doclet/resources/postgres.yaml new file mode 100644 index 0000000..7571968 --- /dev/null +++ b/namespaces/default/projects/doclet/resources/postgres.yaml @@ -0,0 +1,13 @@ +apiVersion: openchoreo.dev/v1alpha1 +kind: Resource +metadata: + name: doclet-postgres + namespace: default +spec: + owner: + projectName: doclet + type: + kind: ClusterResourceType + name: postgres + parameters: + database: doclet