PodWarden
API Reference

Helm Operator CRD Reference

Complete field reference for HelmRepository and HelmRelease custom resource definitions

Overview

The Helm Operator manages two Custom Resource Definitions (CRDs) in the cluster. PodWarden creates and updates these resources when you deploy Helm chart stacks. The operator watches them and reconciles the actual Helm releases.

Both CRDs live in the helm.podwarden.com API group.

HelmRepository

A HelmRepository represents a Helm chart repository that the operator periodically syncs to discover available charts and versions.

apiVersion: helm.podwarden.com/v1alpha1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: default
spec:
  url: "https://charts.bitnami.com/bitnami"
  type: default
  interval: 10m
status:
  conditions:
    - type: Ready
      status: "True"
      lastTransitionTime: "2026-03-15T10:00:00Z"
      reason: Succeeded
      message: "Repository index fetched successfully"
  lastSyncTime: "2026-03-15T10:00:00Z"
  chartCount: 142
  artifact:
    url: "https://charts.bitnami.com/bitnami/index.yaml"
    digest: "sha256:abc123..."
    lastUpdateTime: "2026-03-15T10:00:00Z"

spec

FieldTypeRequiredDefaultDescription
urlstringYesHTTPS URL of the Helm chart repository index
typestringNodefaultRepository type. Only default (standard Helm repo) is currently supported.
intervaldurationNo10mHow often the operator re-fetches the repository index to check for new chart versions

status

FieldTypeDescription
conditions[]ConditionStandard Kubernetes conditions (see Conditions below)
lastSyncTimetimestampWhen the repository index was last successfully fetched
chartCountintegerNumber of charts found in the repository index
artifactobjectDetails about the fetched index artifact
artifact.urlstringURL of the repository index that was fetched
artifact.digeststringSHA256 digest of the fetched index
artifact.lastUpdateTimetimestampWhen the index was last modified upstream

HelmRelease

A HelmRelease describes a Helm chart to install (or upgrade) in the cluster, including the chart reference, values, and lifecycle policies.

apiVersion: helm.podwarden.com/v1alpha1
kind: HelmRelease
metadata:
  name: prometheus-stack
  namespace: monitoring
  annotations:
    helm.podwarden.com/dry-run: "false"
    helm.podwarden.com/values-hash: "sha256:def456..."
spec:
  chart:
    name: kube-prometheus-stack
    version: "65.1.0"
    sourceRef:
      kind: HelmRepository
      name: prometheus-community
      namespace: monitoring
  values:
    grafana:
      adminPassword: "changeme"
      persistence:
        enabled: true
    prometheus:
      prometheusSpec:
        retention: 15d
  install:
    createNamespace: true
    timeout: 10m
    remediation:
      retries: 3
  upgrade:
    timeout: 10m
    remediation:
      retries: 3
      strategy: rollback
  uninstall:
    keepHistory: false
    timeout: 5m
  interval: 5m
status:
  conditions:
    - type: Ready
      status: "True"
      lastTransitionTime: "2026-03-15T10:05:00Z"
      reason: InstallSucceeded
      message: "Helm install succeeded"
    - type: Released
      status: "True"
      lastTransitionTime: "2026-03-15T10:05:00Z"
      reason: InstallSucceeded
      message: "Release prometheus-stack installed"
  revisions:
    current: 1
    previous: 0
    history:
      - revision: 1
        chartVersion: "65.1.0"
        status: deployed
        createdAt: "2026-03-15T10:05:00Z"
        valuesHash: "sha256:def456..."
  resources:
    - apiVersion: apps/v1
      kind: Deployment
      name: prometheus-stack-grafana
      namespace: monitoring
      ready: true
    - apiVersion: apps/v1
      kind: StatefulSet
      name: prometheus-prometheus-stack-prometheus
      namespace: monitoring
      ready: true
    - apiVersion: v1
      kind: Service
      name: prometheus-stack-grafana
      namespace: monitoring
      ready: true
  clusterScopedResources:
    - apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      name: prometheus-stack-grafana-clusterrole
    - apiVersion: apiextensions.k8s.io/v1
      kind: CustomResourceDefinition
      name: prometheuses.monitoring.coreos.com

spec.chart

FieldTypeRequiredDescription
namestringYesChart name within the repository
versionstringYesExact chart version to install
sourceRef.kindstringYesMust be HelmRepository
sourceRef.namestringYesName of the HelmRepository resource
sourceRef.namespacestringNoNamespace of the HelmRepository (defaults to the HelmRelease namespace)

spec.values

FieldTypeRequiredDescription
valuesobjectNoArbitrary YAML values passed to helm install/upgrade --values. These are the merged result of the template's default_values and operator-configured env_schema values.

spec.install

FieldTypeRequiredDefaultDescription
createNamespacebooleanNofalseCreate the target namespace if it doesn't exist
timeoutdurationNo5mMaximum time to wait for the install to complete
remediation.retriesintegerNo0Number of times to retry a failed install

spec.upgrade

FieldTypeRequiredDefaultDescription
timeoutdurationNo5mMaximum time to wait for the upgrade to complete
remediation.retriesintegerNo0Number of times to retry a failed upgrade
remediation.strategystringNorollbackWhat to do on failure: rollback (revert to previous revision) or uninstall

spec.uninstall

FieldTypeRequiredDefaultDescription
keepHistorybooleanNofalseRetain Helm release history after uninstall
timeoutdurationNo5mMaximum time to wait for uninstall to complete

spec.interval

FieldTypeRequiredDefaultDescription
intervaldurationNo5mHow often the operator checks if the release needs reconciliation (e.g., drift detection)

status.conditions

Standard Kubernetes conditions reported by the operator:

TypeDescription
ReadyWhether the release is in a healthy, reconciled state
ReleasedWhether the Helm install/upgrade completed

Each condition has:

FieldTypeDescription
typestringCondition type
statusstringTrue, False, or Unknown
lastTransitionTimetimestampWhen the condition last changed
reasonstringMachine-readable reason (e.g., InstallSucceeded, UpgradeFailed)
messagestringHuman-readable detail

status.revisions

FieldTypeDescription
currentintegerCurrent active revision number
previousintegerPrevious revision number (0 if first install)
history[]RevisionEntryList of all revisions

Each revision entry:

FieldTypeDescription
revisionintegerRevision number
chartVersionstringChart version used for this revision
statusstringdeployed, failed, superseded
createdAttimestampWhen this revision was created
valuesHashstringSHA256 hash of the values used

status.resources

Array of Kubernetes resources managed by this release (namespace-scoped):

FieldTypeDescription
apiVersionstringResource API version
kindstringResource kind (Deployment, Service, etc.)
namestringResource name
namespacestringResource namespace
readybooleanWhether the resource is in a ready/healthy state

status.clusterScopedResources

Array of cluster-scoped resources created by this release. Same fields as resources except no namespace or ready field:

FieldTypeDescription
apiVersionstringResource API version
kindstringResource kind (ClusterRole, CRD, etc.)
namestringResource name

Annotations

The operator recognizes these annotations on HelmRelease resources:

AnnotationTypeDescription
helm.podwarden.com/dry-run"true" / "false"When "true", the operator renders templates and populates status.resources without actually installing. PodWarden sets this during dry-run preview.
helm.podwarden.com/values-hashstringSHA256 hash of the values object. PodWarden sets this to detect value changes and trigger reconciliation.

System App ConfigMap

The Helm Operator registers itself via a ConfigMap with the podwarden.com/system-app=true label. PodWarden reads this ConfigMap to detect operator presence and capabilities.

apiVersion: v1
kind: ConfigMap
metadata:
  name: helm-operator
  namespace: podwarden-system
  labels:
    podwarden.com/system-app: "true"
data:
  name: helm-operator
  version: "1.0.0"
  capabilities: |
    - helmRepository
    - helmRelease
    - dryRun
    - upgradeRollback

Capabilities

CapabilityDescription
helmRepositoryCan manage HelmRepository CRDs
helmReleaseCan manage HelmRelease CRDs (install, upgrade, uninstall)
dryRunSupports dry-run rendering of chart templates
upgradeRollbackSupports automatic rollback on failed upgrades

PodWarden uses these capabilities to enable or disable UI features. For example, if dryRun is not listed, the dry-run toggle is hidden in the deploy form.

See Also