Browse Docs
Catalog
Config
Stacks
Operate
Docs

Adopting Existing Apps

This project should not only help with new Helm installs. It should also give teams a way to adopt apps they already run through Argo CD, Flux, KRM YAML, Kustomize, rendered manifests, or other Kubernetes configuration sources. View source markdown.

UNOFFICIAL/EXPERIMENTAL

The goal is:

New to cub? Install the cub CLI first. Public catalog packages pull and render anonymously, and you sign in only once a command saves or changes ConfigHub data.

Keep the app running.
Import or discover the desired state.
Attach ConfigHub labels, links, variants, scans, gates, and receipts.
Only move to a cub installer recipe when the app needs a maintained render path.

Short Answer

Yes, a user should be able to start from an existing app, a group of apps, a platform slice, a stack, rendered manifests, GitOps objects, or a live cluster. The first step should be read-only discovery or import, not a forced rewrite.

The expected first result is:

ConfigHub found the app or objects.
ConfigHub shows source, target, labels, and object inventory.
No cluster change was made yet.
The next decision is keep imported, create a derived variant, or graduate to a
maintained cub installer recipe.

Why This Matters

Most real teams do not start from a blank cluster. They already have:

  • Argo CD Applications;
  • Flux HelmReleases;
  • Flux Kustomizations;
  • KRM YAML or Kustomize output;
  • rendered manifests in Git;
  • manually imported or live Kubernetes resources.

The adoption path must not say "rewrite all of that first." It should let the team upgrade into ConfigHub gradually.

Current Entry Points

Existing sourceCurrent entry pointWhat ConfigHub should preserve
Argo CD ApplicationRead the Application and rendered objects through Argo CD or the Kubernetes API, then use cub variant upload.controller ownership, source reference, rendered resources, links, target
Flux HelmReleaseRead the HelmRelease and rendered objects through Flux or the Kubernetes API, then use cub variant upload.chart source, values source, rendered resources, links, target
Flux KustomizationRead the Kustomization and rendered objects through Flux or the Kubernetes API, then use cub variant upload.Kustomize source, rendered resources, links, target
KRM YAML / rendered manifestscub variant upload --component <name> --variant <name> <files-or-oci-ref>resource identity, labels, target, provenance, scans
Public Helm chart with no existing apphelm template or the cub installer catalog pathlocal Helm render or maintained catalog package depending on intent

A Small Plain YAML Example

The repository includes a four-object application under examples/plain-yaml/acme-web. It has one Namespace, ConfigMap, Deployment, and Service. There is no chart and no render step.

Upload the files as one Unit per Kubernetes object:

cub variant upload \
  --component plain-yaml-acme-web \
  --variant base \
  --space plain-yaml-acme-web-base \
  --granularity per-resource \
  examples/plain-yaml/acme-web

The focused receipt reads the four Units back and compares them with the four files. The source and stored object-set hashes match. The separate README Unit explains the example inside the helm-catalog demo organization.

This proves the import boundary. No cluster apply, promotion, release, or workload observation is claimed by this receipt.

The current cub v0.2.9 command surface does not provide a one-step GitOps discovery/import command. Read the controller objects and desired Kubernetes objects first. Review their source, target, namespace, and ownership, then use cub variant upload for the YAML or literal OCI you chose to store. The upload creates ConfigHub records; it does not change the controller or cluster.

Adoption Levels

LevelWhat happensUser value
ObserveImport or discover the existing app and record where it came from.The team can see and search the app in ConfigHub without changing delivery.
ExplainAdd component, chart, variant, environment, region, target, and source labels; preserve links.The app becomes understandable and comparable.
CheckRun scans, schema checks, policy checks, and drift/live observations.The team gets evidence without rewriting the app.
VariantClone/refine post-render ConfigHub state with cub variant create where safe.The team can create environment/customer variants without rerendering Helm when the change is post-render.
GraduateIf the app needs a maintained render path, create a cub installer recipe/package/base.The app gets catalog-grade repeatability, Helm-equivalence proof, receipts, upgrade support, and maintenance policy.

Routing Rule

Use the narrowest adoption path that matches the user's intent:

User saysRoute
"I already have Argo managing this app."Discover/import the Argo app first. Do not force a recipe rewrite.
"I already have Flux HelmRelease or Kustomization objects."Discover/import Flux first. Preserve the GitOps source and target.
"I have KRM YAML or rendered manifests."Import as ConfigHub Units, then scan, label, link, and review.
"I want to turn this into a maintained catalog entry."Create or request a cub installer recipe/package and base variants.
"I want prod from dev with target/gates/labels changed."Use a derived ConfigHub variant after import or upload.
"I want a values file, wrapper chart, or overlay that changes object shape."Use the installer recipe/base path or managed overlay import.
"My existing Helm release is stuck or risky to upgrade."Capture Helm's release record, compare it with the candidate render, and keep the result local until it is reviewed.

What Not To Overclaim

Importing an existing app does not automatically prove it is a supported catalog recipe.

Use precise language:

imported into ConfigHub
scanned
linked to source
observed live
variant-created
graduated to maintained recipe

Do not collapse those into one generic "managed" claim.

Product Shape

The user-facing flow should be:

Choose source: Argo, Flux, KRM, Helm, rendered YAML
Preview discovered apps and objects
Select app/component
Import with labels and links
Run checks
Decide: keep imported, create derived variant, or graduate to recipe

The product should make the first step low risk. A team should be able to say:

Show ConfigHub my existing app.
Do not change my cluster yet.
Tell me what you found and what you can prove.

That is how existing Argo, Flux, KRM, and rendered-manifest estates enter the same ConfigHub model without making Helm users start over.

Generated from the committed markdown file docs/user/adopting-existing-apps.md. The source file is the authoritative version.