convoy docs
Search

Release

One application, rendered from one source, applied to one cluster.

Release is the unit of delivery. It binds one source, one way to render that source, and one target cluster.

API groupcore.convoy.kumodo.io/v1alpha1
ScopeNamespaced
Subresources/status, /sync, /pin, /mutations, /lifecycle, /preview, /diff, /health, /history. See Subresources.
ConditionsApplied, RolloutSucceeded, LifecycleSucceeded, InSync, Healthy. See Conditions.

Example#

releases/release-helmregistry-helm-in-cluster.yaml
apiVersion: core.convoy.kumodo.io/v1alpha1
kind: Release
metadata:
  name: podinfo-helmreg-in-cluster
  namespace: default
spec:
  clusterRef:
    name: dev-local
  source:
    type: helmRegistry
    helmRegistry:
      name: podinfo
      namespace: default
      chart:
        name: podinfo
        version: "6.12.0"
  content:
    type: helm
    helm:
      releaseName: podinfo-from-helmreg
      releaseNamespace: default
      dependencyMode: vendored
      values:
        - type: gitRepository
          gitRepository:
            name: podinfo-values
            namespace: default
            ref:
              branch: main
            paths:
              - podinfo/values.yaml
        - type: inline
          inline:
            image:
              tag: 6.13.0
  syncPolicy:
    automatic: true
    prune:
      orphaned: false
      includeCRDs: false
      includeNamespaces: false
    interval: 1m

Object structure#

A Release has four writable parts. Only spec is under spec. The other three are top-level fields, so that each one can have its own subresource, RBAC rule and audit event.

FieldWritten throughPurpose
specthe main resourceSource, content, cluster and policies.
mutationsthe main resource, or /mutationsThe ordered post-render mutation pipeline.
lifecyclethe main resource, or /lifecycleLifecycle hooks, per phase.
pin/pin onlyHolds the Release on one render.

spec.source#

spec.source tells convoy where to fetch from and which version. source.type selects one block: gitRepository, helmRegistry or ociRegistry. Each block references a source object by name, and adds the version to fetch.

  • Git refs. convoy uses the first ref field that is set, in the order branch, tag, commit. Validation does not reject more than one. semver is accepted, but fetch fails with Applied=False, reason Unsupported.
  • Chart versions. helmRegistry.chart.version and ociRegistry.artifact.version must match a version exactly. Version ranges do not work. A leading v is ignored for Helm repositories.
  • Namespace. The referenced source must be in the namespace of the Release. An empty namespace means the namespace of the Release.
  • Immutable. source.type, and the name and namespace of the referenced source, cannot change after creation. The version fields can change.
FieldTypeDescription
spec.source requiredReleaseSourceSpecSource is the content source of the release. Immutable after creation. To re-target, create a new Release.
spec.source.gitRepositoryReleaseGitRepositorySpecGitRepository is the Git repository source for the release.
spec.source.gitRepository.name requiredstringName is the name of the [github.com/kumodo-io/convoy/api/source/v1alpha1.GitRepository] object.
spec.source.gitRepository.namespacestringNamespace is the namespace of the [github.com/kumodo-io/convoy/api/source/v1alpha1.GitRepository] object.
spec.source.gitRepository.refReleaseGitRepositoryRefSpecRef is the reference to the target revision of the Git repository.
spec.source.gitRepository.ref.branchstringBranch is the branch to track in the Git repository.
spec.source.gitRepository.ref.commitstringCommit is the commit to track in the Git repository.
spec.source.gitRepository.ref.semverstringSemver is the tag-based semantic version expression to track in the Git repository.
spec.source.gitRepository.ref.tagstringTag is the tag to track in the Git repository.
spec.source.helmRegistryReleaseHelmRegistrySpecHelmRegistry is the Helm registry source for the release.
spec.source.helmRegistry.chartReleaseHelmRegistryChartSpecChart is the definition of the Helm chart to be installed.
spec.source.helmRegistry.chart.name requiredstringName is the name of the Helm chart.
spec.source.helmRegistry.chart.version requiredstringVersion is the version of the Helm chart.
spec.source.helmRegistry.name requiredstringName is the name of the [github.com/kumodo-io/convoy/api/source/v1alpha1.HelmRegistry] object.
spec.source.helmRegistry.namespacestringNamespace is the namespace of the [github.com/kumodo-io/convoy/api/source/v1alpha1.HelmRegistry] object.
spec.source.ociRegistryReleaseOCIRegistrySpecOCIRegistry is the OCI registry source for the release.
spec.source.ociRegistry.artifactReleaseOCIRegistryArtifactSpecArtifact is the definition of the OCI artifact to be installed.
spec.source.ociRegistry.artifact.name requiredstringName is the name of the OCI artifact.
spec.source.ociRegistry.artifact.version requiredstringVersion is the version of the OCI artifact.
spec.source.ociRegistry.name requiredstringName is the name of the [github.com/kumodo-io/convoy/api/source/v1alpha1.OCIRegistry] object.
spec.source.ociRegistry.namespacestringNamespace is the namespace of the [github.com/kumodo-io/convoy/api/source/v1alpha1.OCIRegistry] object.
spec.source.type requiredstringType is the type of the source.
  • gitRepository is the source type used for Git repositories.
  • helmRegistry is the source type used for Helm registries.
  • ociRegistry is the source type used for OCI registries.

spec.content#

spec.content tells convoy how to render the fetched files. content.type is immutable.

content.typeRenderedNotes
helmYes, in-process with the Helm SDKreleaseName defaults to the chart name. releaseNamespace defaults to default, and sets only .Release.Namespace (see KB-10). dependencyMode: vendored (the default) is the only mode that works. resolve gives reason Unsupported.
manifestsYesEach entry in paths is a file, a directory prefix, or . for the whole tree. Globs do not work. Only .yaml and .yml files load.
kustomizeYes, in-processtargetNamespace uses the namespace transformer of Kustomize.
jsonnetNoAccepted by the API. Rendering gives reason Unsupported.

Validation does not check that the content type fits the source type.

FieldTypeDescription
spec.content requiredReleaseContentSpecContent is the content of the release.
spec.content.helmReleaseContentHelmSpecHelm is the Helm chart content of the release.
spec.content.helm.dependencyMode requiredstringDependencyMode is the dependency mode for the Helm chart.
  • resolve is the dependency mode used to resolve dependencies at render time.
  • vendored is the dependency mode used for vendored dependencies.
spec.content.helm.pathstringPath is the path to the Helm chart within the source. Ignored if the source is a Helm registry.
spec.content.helm.releaseNamestringReleaseName is the name of the Helm release. Defaults to the Helm chart name if not specified.
spec.content.helm.releaseNamespacestringReleaseNamespace is the namespace of the Helm release. Defaults to 'default' namespace if not specified.
spec.content.helm.values[]ValuesSourceSpecValues contains a list of values sources to be applied to the Helm chart.
spec.content.helm.values[].configMapConfigMapKeySelectorConfigMap defines the config map and the key containing the values.
spec.content.helm.values[].gitRepositoryValuesSourceGitRepositorySpecGitRepository defines the configuration of the git repository used as values source.
spec.content.helm.values[].gitRepository.name requiredstringName is the name of the [github.com/kumodo-io/convoy/api/source/v1alpha1.GitRepository] object.
spec.content.helm.values[].gitRepository.namespacestringNamespace is the namespace of the [github.com/kumodo-io/convoy/api/source/v1alpha1.GitRepository] object.
spec.content.helm.values[].gitRepository.paths required[]stringPaths is the list of paths to values files in the git repository.
spec.content.helm.values[].gitRepository.refReleaseGitRepositoryRefSpecRef is the reference to the target revision of the Git repository.
spec.content.helm.values[].gitRepository.ref.branchstringBranch is the branch to track in the Git repository.
spec.content.helm.values[].gitRepository.ref.commitstringCommit is the commit to track in the Git repository.
spec.content.helm.values[].gitRepository.ref.semverstringSemver is the tag-based semantic version expression to track in the Git repository.
spec.content.helm.values[].gitRepository.ref.tagstringTag is the tag to track in the Git repository.
spec.content.helm.values[].inlineJSONInline contains inlined values.
spec.content.helm.values[].secretSecretKeySelectorSecret defines the secret and the key containing the values.
spec.content.helm.values[].type requiredstringType defines the type of values source.
  • configMap is the values source type to get values from ConfigMap
  • gitRepository is the values source type to fetch Helm chart values from the [github.com/kumodo-io/convoy/api/source/v1alpha1.GitRepository]
  • inline is the values source type to get inlined values
  • secret is the values source type to get values from Secret
spec.content.jsonnetReleaseContentJsonnetSpecJsonnet is the jsonnet content of the release.
spec.content.jsonnet.path requiredstringPath is the path to the jsonnet file within the source.
spec.content.jsonnet.targetNamespacestringTargetNamespace is the namespace to target for the jsonnet bundle. Defaults to 'default' namespace if not specified.
spec.content.jsonnet.tla[]EnvVarlist type: map, keys: nameTLA is the list of top-level arguments to pass to the jsonnet file.
spec.content.kustomizeReleaseContentKustomizeSpecKustomize is the kustomize content of the release.
spec.content.kustomize.path requiredstringPath is the path to the kustomize bundle within the source.
spec.content.kustomize.targetNamespacestringTargetNamespace is the namespace to target for the kustomize bundle. Defaults to 'default' namespace if not specified.
spec.content.manifestsReleaseContentManifestsSpecManifests is the manifests content of the release.
spec.content.manifests.paths required[]stringlist type: atomicPaths is the list of paths to the manifests within the source.
spec.content.manifests.targetNamespacestringTargetNamespace is the namespace to target for the manifests. Defaults to 'default' namespace if not specified.
spec.content.type requiredstringType is the type of the content. Immutable after creation.
  • cue is the content type used to fetch cue files.
  • helm is the content type used to fetch Helm charts.
  • jsonnet is the content type used to fetch jsonnet files.
  • kustomize is the content type used to fetch kustomize bundles.
  • manifests is the content type used to fetch tarballs of raw manifests.

spec.clusterRef#

The target Cluster. It must be in the namespace of the Release. clusterRef is immutable.

FieldTypeDescription
spec.clusterRef requiredReleaseClusterRefSpecClusterRef is the reference to the cluster where the release will be deployed. Immutable after creation.
spec.clusterRef.name requiredstringName is the name of the cluster.
spec.clusterRef.namespacestringNamespace is the namespace of the cluster.

spec.syncPolicy#

  • automatic: true applies each new render. With automatic: false, convoy renders and reports status, but applies only after a /sync request. automatic has no default: if you do not set it, the Release uses manual mode.
  • interval is the period of the periodic reconcile of this Release. The observer uses the same interval.
  • prune.orphaned deletes objects that the render no longer contains. CRDs and Namespaces are not deleted unless includeCRDs or includeNamespaces is set.
  • retryBackoff sets the retry delay after a transient failure.
  • waveStrategy orders this Release relative to other Releases on the same Cluster.
FieldTypeDescription
spec.syncPolicy requiredReleaseSyncPolicySpecSyncPolicy is the sync policy for the release.
spec.syncPolicy.automatic requiredbooleanAutomatic defines whether the release should be automatically synced. Manual syncing requires the POST /sync to trigger the sync.
spec.syncPolicy.interval requiredDurationInterval is the poll interval for drift detection.
spec.syncPolicy.prune requiredPruneSpecPrune controls steady-state garbage collection of resources dropped from the render.
spec.syncPolicy.prune.includeCRDs requiredbooleanIncludeCRDs defines whether to prune orphaned CustomResourceDefinitions (dangerous — cascades to all CRs).
spec.syncPolicy.prune.includeNamespaces requiredbooleanIncludeNamespaces defines whether to prune orphaned Namespaces (dangerous).
spec.syncPolicy.prune.orphaned requiredbooleanOrphaned defines whether to delete resources this Release previously applied but no longer renders.
spec.syncPolicy.retryBackoff requiredReleaseRetryBackoffSpecRetryBackoff defines the backoff policy for retrying failed syncs.
spec.syncPolicy.retryBackoff.factor requirednumberFactor is the backoff factor.
spec.syncPolicy.retryBackoff.initial requiredDurationInitial is the initial backoff duration.
spec.syncPolicy.retryBackoff.max requiredDurationMax is the maximum backoff duration.
spec.syncPolicy.waveStrategy requiredReleaseWaveStrategySpecWaveStrategy defines the wave strategy.
spec.syncPolicy.waveStrategy.strategy requiredstringStrategy is the wave strategy.
  • waitForApplied is the wave strategy that waits for all resources to be applied.
  • waitForHealthy is the wave strategy that waits for all resources to be healthy.
  • waitForHealthyWithTimeout is the wave strategy that waits for all resources to be healthy with a timeout.
spec.syncPolicy.waveStrategy.timeoutDurationTimeout is the timeout for the wave strategy. If not set, controller will wait indefinitely.
spec.syncPolicy.waveStrategy.wave requiredintegerWave is the wave number.

spec.healthAssessment and spec.failurePolicy#

healthAssessment selects health rule sets by label and sets the deadline after which a failing resource is Degraded. A nil selector selects no rule set. An empty selector {} selects all rule sets.

failurePolicy.rollback sets what convoy does when a rollout fails: Never, OnReleaseFailure or OnWaveFailure. A value other than Never requires healthAssessment.deadline. Without a deadline, a rollout cannot fail, so the API rejects the Release.

FieldTypeDescription
spec.healthAssessmentReleaseHealthAssessmentHealthAssessment defines the health assessment configuration for resources delivered by the Release.
spec.healthAssessment.deadlineDurationDeadline is the interval within what the deployed resources must pass collected health rules.
spec.healthAssessment.globalRuleSetSelectorLabelSelectorGlobalRuleSetSelector defines the standard kubernetes [k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector] that will be used to collect the cluster-scoped [github.com/kumodo-io/convoy/api/extensions/v1alpha1.GlobalHealthRuleSet]
spec.healthAssessment.localRuleSetSelectorLabelSelectorLocalRuleSetSelector defines the standard kubernetes [k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector] that will be used to collect the namespaced [github.com/kumodo-io/convoy/api/extensions/v1alpha1.HealthRuleSet], These rule sets will be looked up in the Release namespace.
FieldTypeDescription
spec.failurePolicyReleaseFailurePolicyFailurePolicy is the failure policy for the release.
spec.failurePolicy.rollback requiredstringRollback defines the rollback policy.
  • Never defines that no rollback will be performed.
  • OnReleaseFailure defines that the rollback will be performed if the release won't get healthy within defined deadline after all waves were applied.
  • OnWaveFailure defines that the rollback will be performed on the first occurred wave rollout failure.

spec.retentionPolicy#

keepHistory is the number of applied renders that convoy keeps in the render store. If it is not set, convoy keeps 10. 0 keeps all renders. Without a render store, there is no history.

FieldTypeDescription
spec.retentionPolicy requiredReleaseRetentionPolicySpecRetentionPolicy is the retention policy for the release.
spec.retentionPolicy.keepHistoryintegerKeepHistory is how many historical (rendered, applied) records to retain in the render store. It drives /history depth and the rollback range. Unset (nil) uses a default; an explicit 0 means unlimited (retain all); a positive N keeps the newest N. The current render is always retained regardless.

spec.deletionPolicy#

When you delete a Release:

  • keepWorkloads: false (the default) deletes the applied objects from the cluster. true keeps them.
  • blockOnClusterUnreachable: true keeps the Release until the cluster is reachable again. With false, convoy deletes the Release and leaves the objects on an unreachable cluster.
FieldTypeDescription
spec.deletionPolicy requiredReleaseDeletionPolicyDeletionPolicy defines the deletion policy for Release.
spec.deletionPolicy.blockOnClusterUnreachable requiredbooleanBlockOnClusterUnreachable flag defines whether to block Release object deletion in case the KeepWorkloads flag is set to false and the target Cluster is unreachable.
spec.deletionPolicy.keepWorkloads requiredbooleanKeepWorkloads flag defines whether to cleanup deployed resources on the Release object deletion.

mutations#

An ordered list of post-render mutations. Write it through the main resource or through /mutations. See Release mutations for the types, fields and admission rules.

lifecycle#

Lifecycle hooks per phase: preSync, postSync, syncFailed, preDelete, postDelete. Write them through the main resource or through /lifecycle. See Release lifecycle hooks for the fields, admission rules and status.

pin#

The pin holds the Release on one render. Write it through /pin.

  • To pin, set renderRef. The apiserver sets pinnedAt and pinnedBy.
  • To unpin, write an empty renderRef.
  • A pin is not possible before the first successful render.
  • To pin a render that is not the current one, convoy needs a render store that contains that render.
FieldTypeDescription
pinReleasePinReleasePin defines the desired state of the ReleasePin.
pin.pinnedAt requiredTimePinnedAt is the time when the release was pinned.
pin.pinnedBystringPinnedBy is the name of the user that pinned the release.
pin.reasonstringReason is the reason for pinning the release.
pin.renderRef requiredstringRenderRef is the reference to the rendered state that is pinned.

Status#

  • lastAttempted is the most recent render attempt. lastSuccessful is the most recent render that convoy applied.
  • rollout and lastHealthy record the progressive rollout. See Progressive rollout.
  • waves records the sync waves of the last apply.
  • lifecycle records the hooks of the current render.
  • healthSummary counts resources per health state. suspended is never set.
  • historyTruncated is never set.
FieldTypeDescription
statusReleaseStatusReleaseStatus reflects the observed state of the Release.
status.conditions[]Conditionlist type: map, keys: typeConditions is the list of conditions related to the release.
status.healthSummaryReleaseHealthSummaryHealthSummary reflects the health status of the release.
status.healthSummary.degraded requiredintegerDegraded is the number of degraded resources in the release.
status.healthSummary.healthy requiredintegerHealthy is the number of healthy resources in the release.
status.healthSummary.progressing requiredintegerProgressing is the number of progressing resources in the release.
status.healthSummary.suspended requiredintegerSuspended is the number of suspended resources in the release.
status.healthSummary.total requiredintegerTotal is the total number of resources in the release.
status.healthSummary.unknown requiredintegerUnknown is the number of resources in an unknown state.
status.historyTruncated requiredbooleanHistoryTruncated is true if the release history is truncated.
status.lastAttemptedReleaseAttemptedRenderStatusLastAttempted is the last attempted sync attempt.
status.lastAttempted.attemptedAtTimeAttemptedAt is the time when the Release sync was attempted.
status.lastAttempted.failureReleaseAttemptedRenderFailureStatusFailure is the failure status of the release render attempt.
status.lastAttempted.failure.hookNamestringHookName is the name of the hook that failed.
status.lastAttempted.failure.hookPhasestringHookPhase is the phase of the hook that failed.
  • PostDelete is the phase of a lifecycle hook that runs after the delete.
  • PostSync is the phase of a lifecycle hook that runs after the sync.
  • PreDelete is the phase of a lifecycle hook that runs before the delete.
  • PreSync is the phase of a lifecycle hook that runs before the sync.
  • SyncFailed is the phase of a lifecycle hook that runs when the sync fails.
status.lastAttempted.failure.message requiredstringMessage is the failure message.
status.lastAttempted.failure.mutationIndexintegerMutationIndex is the index of the mutation that failed.
status.lastAttempted.failure.stage requiredstringStage is the stage of the failure.
  • ClusterResolution is the stage of a release render attempt that is resolving the cluster.
  • HookFailed is the stage of a release render attempt that failed due to a hook failure.
  • MutationResolution is the stage of a release render attempt that is resolving the mutations.
  • Rendering is the stage of a release render attempt that is rendering.
  • SourceResolution is the stage of a release render attempt that is resolving the source.
  • Syncing is the stage of a release render attempt that is syncing.
status.lastAttempted.failure.waveNumberintegerWaveNumber is the wave number of the failure.
status.lastAttempted.phasestringPhase is the phase of the release render attempt.
  • Failed is the phase of a release render attempt that failed.
  • Rendering is the phase of a release render attempt that is rendering.
  • Succeeded is the phase of a release render attempt that succeeded.
  • Syncing is the phase of a release render attempt that is syncing.
status.lastAttempted.renderRef requiredstringRenderRef is the reference to the rendered state.
status.lastAttempted.resolvedCluster requiredResolvedClusterResolvedCluster is the resolved cluster of the release.
status.lastAttempted.resolvedCluster.metadataSnapshotmap[string]stringMetadataSnapshot is the snapshot of the cluster metadata.
status.lastAttempted.resolvedCluster.name requiredstringName is the name of the cluster.
status.lastAttempted.resolvedCluster.namespacestringNamespace is the namespace of the cluster.
status.lastAttempted.resolvedCluster.observedGeneration requiredintegerObservedGeneration is the observed generation of the cluster.
status.lastAttempted.resolvedCluster.server requiredstringServer is the server URL of the cluster.
status.lastAttempted.resolvedCluster.uid requiredstringUID is the UID of the cluster.
status.lastAttempted.resolvedMutations required[]ResolvedMutationlist type: atomicResolvedMutations is the resolved mutations of the release.
status.lastAttempted.resolvedMutations[].contentHash requiredstringContentHash is the content hash of the mutation.
status.lastAttempted.resolvedMutations[].index requiredintegerIndex is the index of the mutation.
status.lastAttempted.resolvedMutations[].sourceRef requiredReleaseMutationFromSpecSourceRef is the source reference of the mutation.
status.lastAttempted.resolvedMutations[].sourceRef.kind requiredstringKind is the kind of the source.
status.lastAttempted.resolvedMutations[].sourceRef.name requiredstringName is the name of the source.
status.lastAttempted.resolvedMutations[].sourceRef.namespacestringNamespace is the namespace of the source.
status.lastAttempted.resolvedMutations[].sourceRef.path requiredstringPath is the path to the mutation within the source.
status.lastAttempted.resolvedMutations[].sourceRef.refReleaseGitRepositoryRefSpecRef is the reference for GitRepository used as a mutation source.
status.lastAttempted.resolvedMutations[].sourceRef.ref.branchstringBranch is the branch to track in the Git repository.
status.lastAttempted.resolvedMutations[].sourceRef.ref.commitstringCommit is the commit to track in the Git repository.
status.lastAttempted.resolvedMutations[].sourceRef.ref.semverstringSemver is the tag-based semantic version expression to track in the Git repository.
status.lastAttempted.resolvedMutations[].sourceRef.ref.tagstringTag is the tag to track in the Git repository.
status.lastAttempted.resolvedMutations[].sourceRevision requiredstringSourceRevision is the source revision of the mutation.
status.lastAttempted.resolvedMutations[].type requiredstringType is the type of the mutation.
  • celTransform is the mutation type that uses CEL as mutation source.
  • goTemplate is the mutation type that uses Go template as mutation source.
  • jsonPatch is the mutation type that uses JSON patch as mutation source.
  • strategicMergePatch is the mutation type that uses Strategic merge patch as mutation source.
  • syncWave is a special mutation type which is used to set the sync-related annotations on the rendered resources. These annotations could still be set using other mutation types, but it's typos-prone approach which is hard to debug. Dedicated mutation type in opposite provides the validated, targeted and typed way to produce those annotations.
status.lastAttempted.resolvedSource requiredResolvedSourceResolvedSource is the resolved source of the release.
status.lastAttempted.resolvedSource.contentType requiredstringContentType is the type of the content.
  • cue is the content type used to fetch cue files.
  • helm is the content type used to fetch Helm charts.
  • jsonnet is the content type used to fetch jsonnet files.
  • kustomize is the content type used to fetch kustomize bundles.
  • manifests is the content type used to fetch tarballs of raw manifests.
status.lastAttempted.resolvedSource.kind requiredstringKind is the kind of the source.
status.lastAttempted.resolvedSource.name requiredstringName is the name of the source.
status.lastAttempted.resolvedSource.namespacestringNamespace is the namespace of the source.
status.lastAttempted.resolvedSource.observedGeneration requiredintegerObservedGeneration is the observed generation of the source.
status.lastAttempted.resolvedSource.pathstringPath is the path to the content within the source.
status.lastAttempted.resolvedSource.refstringRef is the ref of the source if applicable, e.g. branch, tag, commit.
status.lastAttempted.resolvedSource.revision requiredstringRevision is the revision of the source.
status.lastAttempted.resolvedSource.uid requiredstringUID is the UID of the source.
status.lastAttempted.resolvedSource.url requiredstringURL is the URL of the source.
status.lastAttempted.syncedAtTimeSyncedAt is the time when the Release was synced.
status.lastAttempted.syncedResourcesintegerSyncedResources is the number of resources synced.
status.lastHandledForceSyncAtTimeLastHandledForceSyncAt reflects the timestamp of the last handled forced sync (/sync?force=true). A force request newer than this bypasses the pre-apply dry-run and clears a held Failed/RolledBack rollout.
status.lastHandledSyncAtTimeLastHandledSyncAt reflects the timestamp when the last sync was handled
status.lastHealthyLastHealthyLastHealthy is the reference to the last healthy applied render.
status.lastHealthy.renderRef requiredstring
status.lastSuccessfulReleaseAttemptedRenderStatusLastSuccessful is the last successful sync attempt.
status.lastSuccessful.attemptedAtTimeAttemptedAt is the time when the Release sync was attempted.
status.lastSuccessful.failureReleaseAttemptedRenderFailureStatusFailure is the failure status of the release render attempt.
status.lastSuccessful.failure.hookNamestringHookName is the name of the hook that failed.
status.lastSuccessful.failure.hookPhasestringHookPhase is the phase of the hook that failed.
  • PostDelete is the phase of a lifecycle hook that runs after the delete.
  • PostSync is the phase of a lifecycle hook that runs after the sync.
  • PreDelete is the phase of a lifecycle hook that runs before the delete.
  • PreSync is the phase of a lifecycle hook that runs before the sync.
  • SyncFailed is the phase of a lifecycle hook that runs when the sync fails.
status.lastSuccessful.failure.message requiredstringMessage is the failure message.
status.lastSuccessful.failure.mutationIndexintegerMutationIndex is the index of the mutation that failed.
status.lastSuccessful.failure.stage requiredstringStage is the stage of the failure.
  • ClusterResolution is the stage of a release render attempt that is resolving the cluster.
  • HookFailed is the stage of a release render attempt that failed due to a hook failure.
  • MutationResolution is the stage of a release render attempt that is resolving the mutations.
  • Rendering is the stage of a release render attempt that is rendering.
  • SourceResolution is the stage of a release render attempt that is resolving the source.
  • Syncing is the stage of a release render attempt that is syncing.
status.lastSuccessful.failure.waveNumberintegerWaveNumber is the wave number of the failure.
status.lastSuccessful.phasestringPhase is the phase of the release render attempt.
  • Failed is the phase of a release render attempt that failed.
  • Rendering is the phase of a release render attempt that is rendering.
  • Succeeded is the phase of a release render attempt that succeeded.
  • Syncing is the phase of a release render attempt that is syncing.
status.lastSuccessful.renderRef requiredstringRenderRef is the reference to the rendered state.
status.lastSuccessful.resolvedCluster requiredResolvedClusterResolvedCluster is the resolved cluster of the release.
status.lastSuccessful.resolvedCluster.metadataSnapshotmap[string]stringMetadataSnapshot is the snapshot of the cluster metadata.
status.lastSuccessful.resolvedCluster.name requiredstringName is the name of the cluster.
status.lastSuccessful.resolvedCluster.namespacestringNamespace is the namespace of the cluster.
status.lastSuccessful.resolvedCluster.observedGeneration requiredintegerObservedGeneration is the observed generation of the cluster.
status.lastSuccessful.resolvedCluster.server requiredstringServer is the server URL of the cluster.
status.lastSuccessful.resolvedCluster.uid requiredstringUID is the UID of the cluster.
status.lastSuccessful.resolvedMutations required[]ResolvedMutationlist type: atomicResolvedMutations is the resolved mutations of the release.
status.lastSuccessful.resolvedMutations[].contentHash requiredstringContentHash is the content hash of the mutation.
status.lastSuccessful.resolvedMutations[].index requiredintegerIndex is the index of the mutation.
status.lastSuccessful.resolvedMutations[].sourceRef requiredReleaseMutationFromSpecSourceRef is the source reference of the mutation.
status.lastSuccessful.resolvedMutations[].sourceRef.kind requiredstringKind is the kind of the source.
status.lastSuccessful.resolvedMutations[].sourceRef.name requiredstringName is the name of the source.
status.lastSuccessful.resolvedMutations[].sourceRef.namespacestringNamespace is the namespace of the source.
status.lastSuccessful.resolvedMutations[].sourceRef.path requiredstringPath is the path to the mutation within the source.
status.lastSuccessful.resolvedMutations[].sourceRef.refReleaseGitRepositoryRefSpecRef is the reference for GitRepository used as a mutation source.
status.lastSuccessful.resolvedMutations[].sourceRef.ref.branchstringBranch is the branch to track in the Git repository.
status.lastSuccessful.resolvedMutations[].sourceRef.ref.commitstringCommit is the commit to track in the Git repository.
status.lastSuccessful.resolvedMutations[].sourceRef.ref.semverstringSemver is the tag-based semantic version expression to track in the Git repository.
status.lastSuccessful.resolvedMutations[].sourceRef.ref.tagstringTag is the tag to track in the Git repository.
status.lastSuccessful.resolvedMutations[].sourceRevision requiredstringSourceRevision is the source revision of the mutation.
status.lastSuccessful.resolvedMutations[].type requiredstringType is the type of the mutation.
  • celTransform is the mutation type that uses CEL as mutation source.
  • goTemplate is the mutation type that uses Go template as mutation source.
  • jsonPatch is the mutation type that uses JSON patch as mutation source.
  • strategicMergePatch is the mutation type that uses Strategic merge patch as mutation source.
  • syncWave is a special mutation type which is used to set the sync-related annotations on the rendered resources. These annotations could still be set using other mutation types, but it's typos-prone approach which is hard to debug. Dedicated mutation type in opposite provides the validated, targeted and typed way to produce those annotations.
status.lastSuccessful.resolvedSource requiredResolvedSourceResolvedSource is the resolved source of the release.
status.lastSuccessful.resolvedSource.contentType requiredstringContentType is the type of the content.
  • cue is the content type used to fetch cue files.
  • helm is the content type used to fetch Helm charts.
  • jsonnet is the content type used to fetch jsonnet files.
  • kustomize is the content type used to fetch kustomize bundles.
  • manifests is the content type used to fetch tarballs of raw manifests.
status.lastSuccessful.resolvedSource.kind requiredstringKind is the kind of the source.
status.lastSuccessful.resolvedSource.name requiredstringName is the name of the source.
status.lastSuccessful.resolvedSource.namespacestringNamespace is the namespace of the source.
status.lastSuccessful.resolvedSource.observedGeneration requiredintegerObservedGeneration is the observed generation of the source.
status.lastSuccessful.resolvedSource.pathstringPath is the path to the content within the source.
status.lastSuccessful.resolvedSource.refstringRef is the ref of the source if applicable, e.g. branch, tag, commit.
status.lastSuccessful.resolvedSource.revision requiredstringRevision is the revision of the source.
status.lastSuccessful.resolvedSource.uid requiredstringUID is the UID of the source.
status.lastSuccessful.resolvedSource.url requiredstringURL is the URL of the source.
status.lastSuccessful.syncedAtTimeSyncedAt is the time when the Release was synced.
status.lastSuccessful.syncedResourcesintegerSyncedResources is the number of resources synced.
status.lifecycleLifecycleStatusLifecycle reflects the observed state of the release lifecycle hooks.
status.lifecycle.postDelete[]LifecycleHookStatuslist type: map, keys: namePostDelete are the post-delete hooks.
status.lifecycle.postDelete[].apiVersion requiredstringApiVersion is the API version of the resource created by the hook.
status.lifecycle.postDelete[].cleanedUpAtTimeCleanedUpAt is the time when the hook was cleaned up.
status.lifecycle.postDelete[].completedAtTimeCompletedAt is the time when the hook completed.
status.lifecycle.postDelete[].followUpActionstringFollowUpAction is the action to take after the hook failed.
  • Continue is the action to take when a lifecycle hook fails and the Release processing should continue.
  • Fail is the action to take when a lifecycle hook fails and the Release processing should fail.
status.lifecycle.postDelete[].kind requiredstringKind is the kind of the resource created by the hook.
status.lifecycle.postDelete[].messagestringMessage is the human-readable message containing the failure reason, if any.
status.lifecycle.postDelete[].name requiredstringName is the name of the hook.
status.lifecycle.postDelete[].renderRefstringRenderRef is the hash of the release render lifecycle hook was triggered by.
status.lifecycle.postDelete[].resourceName requiredstringResourceName is the name of the resource created by the hook.
status.lifecycle.postDelete[].resourceNamespace requiredstringResourceNamespace is the namespace of the resource created by the hook.
status.lifecycle.postDelete[].source requiredstringSource is the source of the hook.
  • chart is the source of a lifecycle hook that is defined in the Helm chart.
  • lifecycle is the source of a lifecycle hook that is defined in the Release.
status.lifecycle.postDelete[].startedAtTimeStartedAt is the time when the hook started.
status.lifecycle.postDelete[].state requiredstringState is the state of the hook.
  • Failed is the state of a lifecycle hook that has failed.
  • Running is the state of a lifecycle hook that is running.
  • Skipped is the state of a lifecycle hook that has been skipped.
  • Succeeded is the state of a lifecycle hook that has succeeded.
  • TimedOut is the state of a lifecycle hook that has timed out.
status.lifecycle.postDelete[].weight requiredintegerWeight is the weight of the hook.
status.lifecycle.postSync[]LifecycleHookStatuslist type: map, keys: namePostSync are the post-sync hooks.
status.lifecycle.postSync[].apiVersion requiredstringApiVersion is the API version of the resource created by the hook.
status.lifecycle.postSync[].cleanedUpAtTimeCleanedUpAt is the time when the hook was cleaned up.
status.lifecycle.postSync[].completedAtTimeCompletedAt is the time when the hook completed.
status.lifecycle.postSync[].followUpActionstringFollowUpAction is the action to take after the hook failed.
  • Continue is the action to take when a lifecycle hook fails and the Release processing should continue.
  • Fail is the action to take when a lifecycle hook fails and the Release processing should fail.
status.lifecycle.postSync[].kind requiredstringKind is the kind of the resource created by the hook.
status.lifecycle.postSync[].messagestringMessage is the human-readable message containing the failure reason, if any.
status.lifecycle.postSync[].name requiredstringName is the name of the hook.
status.lifecycle.postSync[].renderRefstringRenderRef is the hash of the release render lifecycle hook was triggered by.
status.lifecycle.postSync[].resourceName requiredstringResourceName is the name of the resource created by the hook.
status.lifecycle.postSync[].resourceNamespace requiredstringResourceNamespace is the namespace of the resource created by the hook.
status.lifecycle.postSync[].source requiredstringSource is the source of the hook.
  • chart is the source of a lifecycle hook that is defined in the Helm chart.
  • lifecycle is the source of a lifecycle hook that is defined in the Release.
status.lifecycle.postSync[].startedAtTimeStartedAt is the time when the hook started.
status.lifecycle.postSync[].state requiredstringState is the state of the hook.
  • Failed is the state of a lifecycle hook that has failed.
  • Running is the state of a lifecycle hook that is running.
  • Skipped is the state of a lifecycle hook that has been skipped.
  • Succeeded is the state of a lifecycle hook that has succeeded.
  • TimedOut is the state of a lifecycle hook that has timed out.
status.lifecycle.postSync[].weight requiredintegerWeight is the weight of the hook.
status.lifecycle.preDelete[]LifecycleHookStatuslist type: map, keys: namePreDelete are the pre-delete hooks.
status.lifecycle.preDelete[].apiVersion requiredstringApiVersion is the API version of the resource created by the hook.
status.lifecycle.preDelete[].cleanedUpAtTimeCleanedUpAt is the time when the hook was cleaned up.
status.lifecycle.preDelete[].completedAtTimeCompletedAt is the time when the hook completed.
status.lifecycle.preDelete[].followUpActionstringFollowUpAction is the action to take after the hook failed.
  • Continue is the action to take when a lifecycle hook fails and the Release processing should continue.
  • Fail is the action to take when a lifecycle hook fails and the Release processing should fail.
status.lifecycle.preDelete[].kind requiredstringKind is the kind of the resource created by the hook.
status.lifecycle.preDelete[].messagestringMessage is the human-readable message containing the failure reason, if any.
status.lifecycle.preDelete[].name requiredstringName is the name of the hook.
status.lifecycle.preDelete[].renderRefstringRenderRef is the hash of the release render lifecycle hook was triggered by.
status.lifecycle.preDelete[].resourceName requiredstringResourceName is the name of the resource created by the hook.
status.lifecycle.preDelete[].resourceNamespace requiredstringResourceNamespace is the namespace of the resource created by the hook.
status.lifecycle.preDelete[].source requiredstringSource is the source of the hook.
  • chart is the source of a lifecycle hook that is defined in the Helm chart.
  • lifecycle is the source of a lifecycle hook that is defined in the Release.
status.lifecycle.preDelete[].startedAtTimeStartedAt is the time when the hook started.
status.lifecycle.preDelete[].state requiredstringState is the state of the hook.
  • Failed is the state of a lifecycle hook that has failed.
  • Running is the state of a lifecycle hook that is running.
  • Skipped is the state of a lifecycle hook that has been skipped.
  • Succeeded is the state of a lifecycle hook that has succeeded.
  • TimedOut is the state of a lifecycle hook that has timed out.
status.lifecycle.preDelete[].weight requiredintegerWeight is the weight of the hook.
status.lifecycle.preSync[]LifecycleHookStatuslist type: map, keys: namePreSync are the pre-sync hooks.
status.lifecycle.preSync[].apiVersion requiredstringApiVersion is the API version of the resource created by the hook.
status.lifecycle.preSync[].cleanedUpAtTimeCleanedUpAt is the time when the hook was cleaned up.
status.lifecycle.preSync[].completedAtTimeCompletedAt is the time when the hook completed.
status.lifecycle.preSync[].followUpActionstringFollowUpAction is the action to take after the hook failed.
  • Continue is the action to take when a lifecycle hook fails and the Release processing should continue.
  • Fail is the action to take when a lifecycle hook fails and the Release processing should fail.
status.lifecycle.preSync[].kind requiredstringKind is the kind of the resource created by the hook.
status.lifecycle.preSync[].messagestringMessage is the human-readable message containing the failure reason, if any.
status.lifecycle.preSync[].name requiredstringName is the name of the hook.
status.lifecycle.preSync[].renderRefstringRenderRef is the hash of the release render lifecycle hook was triggered by.
status.lifecycle.preSync[].resourceName requiredstringResourceName is the name of the resource created by the hook.
status.lifecycle.preSync[].resourceNamespace requiredstringResourceNamespace is the namespace of the resource created by the hook.
status.lifecycle.preSync[].source requiredstringSource is the source of the hook.
  • chart is the source of a lifecycle hook that is defined in the Helm chart.
  • lifecycle is the source of a lifecycle hook that is defined in the Release.
status.lifecycle.preSync[].startedAtTimeStartedAt is the time when the hook started.
status.lifecycle.preSync[].state requiredstringState is the state of the hook.
  • Failed is the state of a lifecycle hook that has failed.
  • Running is the state of a lifecycle hook that is running.
  • Skipped is the state of a lifecycle hook that has been skipped.
  • Succeeded is the state of a lifecycle hook that has succeeded.
  • TimedOut is the state of a lifecycle hook that has timed out.
status.lifecycle.preSync[].weight requiredintegerWeight is the weight of the hook.
status.lifecycle.syncFailed[]LifecycleHookStatuslist type: map, keys: nameSyncFailed are the sync-failed hooks.
status.lifecycle.syncFailed[].apiVersion requiredstringApiVersion is the API version of the resource created by the hook.
status.lifecycle.syncFailed[].cleanedUpAtTimeCleanedUpAt is the time when the hook was cleaned up.
status.lifecycle.syncFailed[].completedAtTimeCompletedAt is the time when the hook completed.
status.lifecycle.syncFailed[].followUpActionstringFollowUpAction is the action to take after the hook failed.
  • Continue is the action to take when a lifecycle hook fails and the Release processing should continue.
  • Fail is the action to take when a lifecycle hook fails and the Release processing should fail.
status.lifecycle.syncFailed[].kind requiredstringKind is the kind of the resource created by the hook.
status.lifecycle.syncFailed[].messagestringMessage is the human-readable message containing the failure reason, if any.
status.lifecycle.syncFailed[].name requiredstringName is the name of the hook.
status.lifecycle.syncFailed[].renderRefstringRenderRef is the hash of the release render lifecycle hook was triggered by.
status.lifecycle.syncFailed[].resourceName requiredstringResourceName is the name of the resource created by the hook.
status.lifecycle.syncFailed[].resourceNamespace requiredstringResourceNamespace is the namespace of the resource created by the hook.
status.lifecycle.syncFailed[].source requiredstringSource is the source of the hook.
  • chart is the source of a lifecycle hook that is defined in the Helm chart.
  • lifecycle is the source of a lifecycle hook that is defined in the Release.
status.lifecycle.syncFailed[].startedAtTimeStartedAt is the time when the hook started.
status.lifecycle.syncFailed[].state requiredstringState is the state of the hook.
  • Failed is the state of a lifecycle hook that has failed.
  • Running is the state of a lifecycle hook that is running.
  • Skipped is the state of a lifecycle hook that has been skipped.
  • Succeeded is the state of a lifecycle hook that has succeeded.
  • TimedOut is the state of a lifecycle hook that has timed out.
status.lifecycle.syncFailed[].weight requiredintegerWeight is the weight of the hook.
status.observedGenerationintegerObservedGeneration is the last generation that was observed by the controller.
status.pinReleasePinStatusPin is the status of the release pin.
status.pin.intent requiredstringIntent is the intention of pinning the release. Derives from the Release.Spec.Pin.RenderRef: if the renderRef matches the latest Release state, then the intent is "freeze". Otherwise, it's "rollback".
  • freeze is the intention of freezing the release.
  • rollback is the intention of rolling back the release.
status.pin.renderInputsReleasePinRenderInputsStatusRenderInputs is the inputs used to render the release.
status.pin.renderInputs.contentPathstringContentPath is the path to the content within the source.
status.pin.renderInputs.contentType requiredstringContentType is the type of the content.
  • cue is the content type used to fetch cue files.
  • helm is the content type used to fetch Helm charts.
  • jsonnet is the content type used to fetch jsonnet files.
  • kustomize is the content type used to fetch kustomize bundles.
  • manifests is the content type used to fetch tarballs of raw manifests.
status.pin.renderInputs.mutationsHashstringMutationsHash is the hash of the mutations applied to the content.
status.pin.renderInputs.sourceKind requiredstringSourceKind is the kind of the source.
status.pin.renderInputs.sourceName requiredstringSourceName is the name of the source.
status.pin.renderInputs.sourceNamespacestringSourceNamespace is the namespace of the source.
status.pin.renderInputs.sourceRevisionstringSourceRevision is the revision of the source.
status.reconciledAtTimeReconciledAt is the time when the release was reconciled.
status.resolvedRetentionPolicyResolvedRetentionPolicyStatusResolvedRetentionPolicy is the resolved retention policy of the release.
status.resolvedRetentionPolicy.historyCount requiredintegerHistoryCount is the observed history count.
status.resolvedRetentionPolicy.keepHistory requiredintegerKeepHistory is the resulting retention policy for the release.
status.rolloutRolloutStatusRollout reflects the release rollout state.
status.rollout.messagestringMessage contains the human-readable message about the failure reason.
status.rollout.renderRef requiredstringRenderRef reflects the reference to the render being rolled out.
status.rollout.startedAt requiredTimeStartedAt contains the timestamp when the rollout started.
status.rollout.state requiredstringState reflects the rollout state.
  • Failed reflects the state when the release rollout was failed. This is a terminal state if no rollback was configured.
  • Progressing reflects the state when the release rollout is in progress.
  • RolledBack reflects the state when the release rollout was rolled back after failure. This is a terminal state.
  • Succeeded reflects the state when the release rollout was successfully finished. This is a terminal state.
status.waves[]ResourceWaveStatuslist type: map, keys: numberWaves reflects the order in which resources were applied and their health status. Each wave entry represents a group of resources applied together, with a state indicating whether they have been fully applied and healthy, are in progress, or have failed.
status.waves[].appliedbooleanApplied reflects whether all resources within the wave are applied.
status.waves[].completedAtTimeCompletedAt is the time when the wave completed.
status.waves[].failedAtTimeFailedAt is the time when the wave failed.
status.waves[].healthybooleanHealthy reflects whether all resources within the wave are healthy.
status.waves[].messagestringMessage is the failure message.
status.waves[].number requiredintegerNumber is the resources wave weight.
status.waves[].resourcesintegerResources is the number of resources in the wave.
status.waves[].startedAtTimeStartedAt is the time when the wave started.
status.waves[].statestringState is the state of the wave.
  • Completed is the state of a resource wave that has been completed.
  • Failed is the state of a resource wave that has failed.
  • InProgress is the state of a resource wave that is in progress.
  • Pending is the state of a resource wave that is pending.
  • TimedOut is the state of a resource wave that has timed out.

Conditions#

Each condition has one writer. There is no combined Ready condition on a Release. Read the conditions together:

AppliedInSyncHealthyMeaning
TrueTrueTrueApplied, no drift, healthy.
TrueTrueFalse, reason ProgressingThe workloads are not ready yet.
TrueTrueFalse, reason DegradedApplied and in sync, but a resource failed its health rules after the deadline.
TrueFalseanyThe live state drifted from the render.
FalseanyanyThe last reconcile did not apply. The reason tells why.

InSync and Healthy are written by the observer. Applied, RolloutSucceeded and LifecycleSucceeded are written by the controller-manager.

Applied · written by convoy-controller-manager (field manager convoy-release)

ReasonStatusMeaning
AppliedTrueconvoy applied the current render. In manual sync mode, the current render is equal to the last applied render.
SourceNotReadyFalseconvoy could not fetch the source. convoy retries.
ValuesNotReadyFalseconvoy could not read a Helm values layer (a ConfigMap, a Secret or a GitRepository path). convoy retries.
ClusterNotReadyFalseThe Cluster does not exist or is not reachable. convoy retries.
UnsupportedFalseThe Release uses a feature that convoy does not implement, for example a Git semver ref, Helm dependencyMode: resolve or jsonnet content. This is a configuration error, so convoy does not retry with backoff.
UnappliableFalseThe target cluster rejected the render in the pre-apply server-side dry run. convoy applies nothing. A forced /sync skips the dry run.
DeployFailedFalseRendering, mutation or the apply failed. The message and status.lastAttempted.failure.stage tell which step failed. convoy retries.
PruneFailedFalseconvoy applied the render, but could not delete an object that the render no longer contains. convoy retries.
PinnedFalseconvoy cannot apply the pinned render, because no render store is configured or the store does not contain that render.
WaitingForSyncFalseManual sync mode. The current render differs from the last applied render. convoy waits for a /sync request.
WaitingForWaveHealthFalseA sync wave waits until the resources of the previous wave are healthy.
WaveFailedFalseA sync wave timed out while it waited for the previous wave. The Release has no failurePolicy.
RolloutFailedFalseA sync wave timed out while it waited for the previous wave, and the failurePolicy did not roll back.
RolledBackTrueThe rollout failed and convoy applied the last healthy render again.
WaitingForClusterWaveFalseThe Release waits for the Releases of a lower cluster wave on the same Cluster.
ClusterWaveFailedFalseThe Releases of a lower cluster wave did not become ready before the cluster-wave timeout.
WaitingForHookFalseconvoy waits for the workloads of a lifecycle hook phase to complete.
HookFailedFalseA lifecycle hook with onFailure: Fail failed. convoy stops the sync.

RolloutSucceeded · written by convoy-controller-manager (field manager convoy-release)

ReasonStatusMeaning
ProgressingUnknownconvoy waits for the resources of the render to become healthy.
SucceededTrueAll resources of the render became healthy.
FailedFalseThe resources did not become healthy before the deadline, and convoy did not roll back.
RolledBackFalseThe resources did not become healthy before the deadline, and convoy applied the last healthy render.

LifecycleSucceeded · written by convoy-controller-manager (field manager convoy-release)

ReasonStatusMeaning
AllSucceededTrueAll lifecycle hooks succeeded or were skipped.
RunningUnknownAt least one lifecycle hook is still running.
HookFailedFalseA lifecycle hook failed. This is so for each onFailure value. onFailure only controls if the sync continues.

InSync · written by convoy-observer (field manager convoy-observe)

ReasonStatusMeaning
InSyncTrueThe live objects match the desired render.
DriftedFalseAt least one live object differs from the desired render, or is missing. In automatic sync mode, the observer requests a /sync.
UndeterminedUnknownThe observer could not compare the live state with the render, for example because the cluster is not reachable.

Healthy · written by convoy-observer (field manager convoy-health)

ReasonStatusMeaning
HealthyTrueAll assessed resources are healthy.
ProgressingFalseAt least one resource is not healthy yet, and no resource is Degraded or Unknown.
DegradedFalseAt least one resource is Degraded. It did not pass its health rules before spec.healthAssessment.deadline.
UnknownUnknownAt least one resource has no health state, or the observer could not assess the Release (for example, a health rule does not compile).
NotConfiguredTrueThe Release has no spec.healthAssessment.
PendingUnknownThe current render is not applied or not assessed yet. The health of the previous render does not count.

Printer columns#

kubectl get releases shows these columns:

ColumnValue
Contentspec.content.type
SourceThe source type and name
Clusterspec.clusterRef.name
Statestatus.rollout.state, or <unknown> without a failure policy
Applied, InSync, HealthyThe status of each condition, or <unknown>
LifecycleN/A, Running:<phase>, Failed:<phase> or Completed:<phase> for the hooks of the current render
  • Subresources

    The verbs, served components and RBAC of the Release subresources.

In the code

convoy v0.9.0