Skip to main content

Installable

An Installable is a platform CRD (p6m.dev/v1alpha1) that defines a Helm chart to be installed on one or more clusters. It captures the chart source — repository, chart name, and version — along with an optional values template. An Installation then references an Installable to deploy it to specific destinations.


Required Fields

FieldDescription
spec.source.typeChart source type. Use helm.
spec.source.chartChart name (e.g. repo-prefix/chart-name or just chart-name).
spec.source.repoURLHelm repository URL (e.g. JFrog or a standard Helm repo).
spec.source.targetRevisionChart version as a semver string (e.g. 1.2.3).
spec.source.namespaceTarget Kubernetes namespace for the installed resources.
Best Practice: Set a releaseName

Always set spec.source.releaseName explicitly, even when it matches the installable name. This keeps the Helm release name stable if the underlying chart or implementation ever changes.

spec:
source:
releaseName: my-agent

Minimal Example

Install a public Helm chart with no per-cluster customization:

apiVersion: p6m.dev/v1alpha1
kind: Installable
metadata:
name: metrics-server
namespace: installables
spec:
source:
type: helm
chart: metrics-server
repoURL: https://kubernetes-sigs.github.io/metrics-server
targetRevision: 3.12.1
namespace: kube-system

Example with Template Variables

Use spec.source.template to inject cluster-specific values at deploy time. The template is rendered as a Helm values file using {{variable}} syntax:

apiVersion: p6m.dev/v1alpha1
kind: Installable
metadata:
name: my-agent
namespace: installables
spec:
source:
type: helm
chart: internal/my-agent
repoURL: https://p6m.jfrog.io/artifactory/helm
targetRevision: 2.0.0
namespace: agents
template: |
agent:
identifier: {{cluster.name}}
organization: {{cluster.organization}}
server:
endpoint: {{server}}
environment: {{environment.name}}

See Cluster Info Template Variables for the full list of available variables.


Namespace Convention

Installable resources are stored in the installables namespace on the orchestration cluster. Always set metadata.namespace: installables when creating an Installable.


Deleting an Installable

Before You Start

Verify no Installation references this Installable. Search your .platform repo for any Installation resource whose spec.installableRef.name matches the Installable you intend to delete. If any exist, remove or update those Installations first.

# Run from the root of your .platform repo
grep -r "name: <installable-name>" .

Steps

  1. Remove the Installable from .platform — Open a PR against your GitHub org's .platform repo. If the file contains only this Installable, delete the file. If the file contains multiple resources, remove only the Installable YAML object. Merge to main.

  2. Find the root application in ArgoCD — Locate the application named {github-org}-installations. This is the root app-of-apps that manages all Installables and Installations for your org.

  3. Refresh and sync the root application — Click Refresh, then Sync. Once synced, the deleted Installable's child Application will appear marked for pruning (OutOfSync with a prune indicator).

    Auto-prune is disabled

    Auto-prune is intentionally disabled to prevent accidental deletions. Syncing the root app will not automatically remove the child Application — you must delete it manually in the next step.

  4. Delete the child Application — Find the child Application for the Installable you are deleting. Click the menu on that application and select Delete.

Verify

Confirm in the ArgoCD UI that:

  • The {github-org}-installations root application is Synced and Healthy.
  • The Installable's child Application no longer appears in the application list.