feat: Add global OTEL extension, backend service, and release automation to Argo template - #53
feat: Add global OTEL extension, backend service, and release automation to Argo template#53yesterdaysrebel wants to merge 18 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
This pull request updates the Argo CD Helm values template and accompanying documentation to enable a global Argo CD UI extension (OTEL) and deploy an in-cluster backend service that the extension calls.
Changes:
- Enables Argo CD’s proxying for extension backends and adds extension configuration in
configs.cm. - Adds Argo CD RBAC rules to allow invoking the
otel-extension. - Deploys an
otel-extension-apiDeployment and Service viaextraObjects, and documents the new placeholders inREADME.md.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| README.md | Documents new placeholders and explains that the OTEL extension is configured globally. |
| argocd.yaml.tpl | Enables the extension feature, configures the extension + RBAC, and adds Kubernetes resources for the extension backend API. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
a3a1322 to
4ba2510
Compare
…n ArgoCD templates
|
@copilot ## Pull request overview In README.md: The manual-install note references the downloaded file as In README.md: The Terraform module example adds OTEL inputs, but it still omits required module inputs ( |
Addressed in |
|
@copilot ## Pull request overview Changes:
Reviewed changesCopilot reviewed 11 out of 11 changed files in this pull request and generated 7 comments. Show a summary per fileFileDescription
|
Implemented in the latest commits. Added:
|
| variable "otel_backend_tag" { | ||
| type = string | ||
| description = "Image tag (SHA or semver) for ghcr.io/glueops/argocd-extension-backend-api" | ||
| default = "v0.1.1" | ||
| } |
| otel_extension_config = var.otel_enabled ? join("\n", [ | ||
| " extension.config: |", | ||
| " extensions:", | ||
| " - name: otel-extension", | ||
| " backend:", | ||
| " services:", | ||
| " - url: http://argocd-extension-backend-api.glueops-core.svc.cluster.local:8000", | ||
| ]) : "" |
| " name: argocd-extension-backend-api", | ||
| " namespace: glueops-core", | ||
| " labels:", | ||
| " app.kubernetes.io/name: argocd-extension-backend-api", |
| " selector:", | ||
| " matchLabels:", | ||
| " app.kubernetes.io/name: argocd-extension-backend-api", |
| " metadata:", | ||
| " labels:", | ||
| " app.kubernetes.io/name: argocd-extension-backend-api", |
| " containers:", | ||
| " - name: argocd-extension-backend-api", | ||
| " image: \"ghcr.io/glueops/argocd-extension-backend-api:placeholder_otel_backend_tag\"", | ||
| " imagePullPolicy: IfNotPresent", |
| " name: argocd-extension-backend-api", | ||
| " namespace: glueops-core", | ||
| " labels:", | ||
| " app.kubernetes.io/name: argocd-extension-backend-api", |
| " selector:", | ||
| " app.kubernetes.io/name: argocd-extension-backend-api", |
Makes the Argo CD OTEL UI extension unconditional and removes the duplicate backend this module was deploying. Always on: drops var.otel_enabled. Safe because the frontend renders nothing when it has no links -- a cluster whose backend is not up shows no panel at all rather than an error box. That behaviour only exists from v0.1.3 onward, so the version default must never go below it. Backend ownership: platform-helm-chart-platform owns the backend and deploys it into glueops-core-argocd-extension-backend. This module was deploying a second Deployment/Service of the same image into glueops-core, so enabling otel would have run two copies. Removed, along with the now-unused otel_backend_tag and tempo_base_url. Backend URL: was glueops-core, which does not resolve (verified NXDOMAIN in-cluster). Both the Service name and its namespace are hardcoded constants in the platform chart, so this URL is identical on every cluster -- there is deliberately nothing per-cluster to substitute. Installer image: the chart defaults it to quay.io directly, unlike every other image on the platform. It runs as an initContainer on argocd-server, so a failed pull takes the Argo CD UI down rather than just disabling the extension. Pinned to the gpkg mirror. Verified by rendering the module output and parsing it: valid YAML, no unreplaced placeholders, tenant RBAC policies preserved (otel policies are appended, not substituted), and no backend objects in extraObjects. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The previous comment said 'do NOT pin below v0.1.3' while the default was v0.1.3-rc1, which sorts below v0.1.3 -- the rule contradicted the value it was guarding. State the actual constraint (a release containing PR #25's hide-when-empty behaviour) and why a prerelease is pinned for now. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

This PR enables the ArgoCD OTEL UI extension globally, deploys a purpose-built in-cluster backend service (
otel-extension-api) that the extension calls, and adds release automation to publish the backend container image to GHCR.Changes Made
argocd.yaml.tplserver.enable.proxy.extension)extraObjectsmain.tfotel_enabled,otel_extension_version,otel_backend_tag, andtempo_base_urlinput variables (OTEL opt-in defaults tofalse)otel_enabled = trueoutput preconditionguards for OTEL inputs with whitespace trimmingrequired_version = ">= 1.2.0"Terraform constraintbackend/src/server.js— Node.js/Express server proxying/prometheus/*→PROMETHEUS_BASE_URLand/tempo/*→TEMPO_BASE_URL, with a/healthzhealth checkpackage.json— Express + http-proxy-middleware dependenciesDockerfile— Node 20 Alpine container imageREADME.md— Documents all endpoints and environment variables.github/workflows/release.ymlghcr.io/glueops/argocd-otel-extension-apito GHCR on every published release usingdocker/build-push-actionREADME.md