From 94068a21293d3d6d6a0615b6fbb1e4a087308c1a Mon Sep 17 00:00:00 2001 From: OpenChoreo GitOps Date: Fri, 20 Mar 2026 13:05:00 +0000 Subject: [PATCH] Release collab-svc (e0458407) Project: doclet Component: collab-svc Image: host.k3d.internal:10082/doclet-collab-svc-image:v1-e0458407 Revision: e0458407 Generated by OpenChoreo GitOps Workflow --- .../collab-svc-development.yaml | 11 + .../releases/collab-svc-e0458407.yaml | 260 ++++++++++++++++++ .../components/collab-svc/workload.yaml | 18 +- 3 files changed, 280 insertions(+), 9 deletions(-) create mode 100644 namespaces/default/projects/doclet/components/collab-svc/release-bindings/collab-svc-development.yaml create mode 100644 namespaces/default/projects/doclet/components/collab-svc/releases/collab-svc-e0458407.yaml diff --git a/namespaces/default/projects/doclet/components/collab-svc/release-bindings/collab-svc-development.yaml b/namespaces/default/projects/doclet/components/collab-svc/release-bindings/collab-svc-development.yaml new file mode 100644 index 0000000..f078022 --- /dev/null +++ b/namespaces/default/projects/doclet/components/collab-svc/release-bindings/collab-svc-development.yaml @@ -0,0 +1,11 @@ +apiVersion: openchoreo.dev/v1alpha1 +kind: ReleaseBinding +metadata: + name: collab-svc-development + namespace: default +spec: + environment: development + owner: + componentName: collab-svc + projectName: doclet + releaseName: collab-svc-e0458407 diff --git a/namespaces/default/projects/doclet/components/collab-svc/releases/collab-svc-e0458407.yaml b/namespaces/default/projects/doclet/components/collab-svc/releases/collab-svc-e0458407.yaml new file mode 100644 index 0000000..2e3437c --- /dev/null +++ b/namespaces/default/projects/doclet/components/collab-svc/releases/collab-svc-e0458407.yaml @@ -0,0 +1,260 @@ +apiVersion: openchoreo.dev/v1alpha1 +kind: ComponentRelease +metadata: + name: collab-svc-e0458407 + namespace: default +spec: + componentProfile: + parameters: + exposed: true + port: 8090 + replicas: 1 + componentType: + kind: ComponentType + name: deployment/service + spec: + environmentConfigs: + openAPIV3Schema: + $defs: + ResourceQuantity: + properties: + cpu: + default: 100m + type: string + memory: + default: 256Mi + type: string + type: object + ResourceRequirements: + properties: + limits: + $ref: '#/$defs/ResourceQuantity' + default: {} + requests: + $ref: '#/$defs/ResourceQuantity' + default: {} + type: object + properties: + imagePullPolicy: + default: IfNotPresent + type: string + replicas: + default: 1 + type: integer + resources: + $ref: '#/$defs/ResourceRequirements' + default: {} + type: object + 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: ${connections.toContainerEnv()} + envFrom: ${configurations.toContainerEnvFrom()} + image: ${workload.container.image} + imagePullPolicy: ${environmentConfigs.imagePullPolicy} + name: main + 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 + includeWhen: ${size(workload.endpoints) > 0} + template: + apiVersion: v1 + kind: Service + metadata: + labels: ${metadata.labels} + name: ${metadata.componentName} + namespace: ${metadata.namespace} + spec: + ports: ${workload.toServicePorts()} + selector: ${metadata.podSelectors} + type: ClusterIP + - forEach: '${workload.endpoints.transformList(name, ep, ("external" in ep.visibility + && ep.type in ["HTTP", "REST", "GraphQL", "Websocket"]) ? [name] : []).flatten()}' + id: httproute-external + template: + apiVersion: gateway.networking.k8s.io/v1 + kind: HTTPRoute + metadata: + labels: '${oc_merge(metadata.labels, {"openchoreo.dev/endpoint-name": + endpoint, "openchoreo.dev/endpoint-visibility": "external"})}' + name: ${oc_generate_name(metadata.componentName, endpoint)} + namespace: ${metadata.namespace} + spec: + hostnames: | + ${[gateway.ingress.external.?http, gateway.ingress.external.?https] + .filter(g, g.hasValue()).map(g, g.value().host).distinct() + .map(h, metadata.environmentName + "-" + metadata.componentNamespace + "." + h)} + parentRefs: + - name: ${gateway.ingress.external.name} + namespace: ${gateway.ingress.external.namespace} + rules: + - backendRefs: + - name: ${metadata.componentName} + port: ${workload.endpoints[endpoint].port} + filters: + - type: URLRewrite + urlRewrite: + path: + replacePrefixMatch: '${workload.endpoints[endpoint].?basePath.orValue("") + != "" ? workload.endpoints[endpoint].?basePath.orValue("") : + "/"}' + type: ReplacePrefixMatch + matches: + - path: + type: PathPrefix + value: /${metadata.componentName}-${endpoint} + var: endpoint + - forEach: '${workload.endpoints.transformList(name, ep, ("internal" in ep.visibility + && ep.type in ["HTTP", "REST", "GraphQL", "Websocket"]) ? [name] : []).flatten()}' + id: httproute-internal + template: + apiVersion: gateway.networking.k8s.io/v1 + kind: HTTPRoute + metadata: + labels: '${oc_merge(metadata.labels, {"openchoreo.dev/endpoint-name": + endpoint, "openchoreo.dev/endpoint-visibility": "internal"})}' + name: ${oc_generate_name(metadata.componentName, endpoint, "internal")} + namespace: ${metadata.namespace} + spec: + hostnames: | + ${[gateway.ingress.internal.?http, gateway.ingress.internal.?https] + .filter(g, g.hasValue()).map(g, g.value().host).distinct() + .map(h, metadata.environmentName + "-" + metadata.componentNamespace + "." + h)} + parentRefs: + - name: ${gateway.ingress.internal.name} + namespace: ${gateway.ingress.internal.namespace} + rules: + - backendRefs: + - name: ${metadata.componentName} + port: ${workload.endpoints[endpoint].port} + filters: + - type: URLRewrite + urlRewrite: + path: + replacePrefixMatch: '${workload.endpoints[endpoint].?basePath.orValue("") + != "" ? workload.endpoints[endpoint].?basePath.orValue("") : + "/"}' + type: ReplacePrefixMatch + matches: + - path: + type: PathPrefix + value: /${metadata.componentName}-${endpoint} + var: endpoint + - 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": has(secret.remoteRef.property) ? secret.remoteRef.property : oc_omit() + } + })} + 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 + workloadType: deployment + owner: + componentName: collab-svc + projectName: doclet + workload: + container: + env: + - key: DOCLET_COLLAB_ADDR + value: :8090 + image: host.k3d.internal:10082/doclet-collab-svc-image:v1-e0458407 + dependencies: + endpoints: + - component: nats + envBindings: + address: DOCLET_NATS_URL + name: tcp + visibility: project + endpoints: + http: + port: 8090 + type: HTTP diff --git a/namespaces/default/projects/doclet/components/collab-svc/workload.yaml b/namespaces/default/projects/doclet/components/collab-svc/workload.yaml index e93c914..d1f8bfd 100644 --- a/namespaces/default/projects/doclet/components/collab-svc/workload.yaml +++ b/namespaces/default/projects/doclet/components/collab-svc/workload.yaml @@ -8,18 +8,18 @@ spec: env: - key: DOCLET_COLLAB_ADDR value: :8090 - image: temp-image-placeholder + image: host.k3d.internal:10082/doclet-collab-svc-image:v1-e0458407 + dependencies: + endpoints: + - component: nats + envBindings: + address: DOCLET_NATS_URL + name: tcp + visibility: project endpoints: http: - type: HTTP port: 8090 - dependencies: - endpoints: - - component: nats - name: tcp - visibility: project - envBindings: - address: DOCLET_NATS_URL + type: HTTP owner: componentName: collab-svc projectName: doclet