import { IComGithubFluxcdHelmControllerApiV2beta2HelmChartTemplate } from "./HelmChartTemplate.js";
import { IComGithubFluxcdHelmControllerApiV2beta2CrossNamespaceSourceReference } from "./CrossNamespaceSourceReference.js";
import { IComGithubFluxcdPkgApisMetaNamespacedObjectReference } from "../../github.com/fluxcd/pkg/apis/meta/NamespacedObjectReference.js";
import { IComGithubFluxcdHelmControllerApiV2beta2DriftDetection } from "./DriftDetection.js";
import { IComGithubFluxcdHelmControllerApiV2beta2Install } from "./Install.js";
import { IComGithubFluxcdPkgApisMetaKubeConfigReference } from "../../github.com/fluxcd/pkg/apis/meta/KubeConfigReference.js";
import { IComGithubFluxcdHelmControllerApiV2beta2PostRenderer } from "./PostRenderer.js";
import { IComGithubFluxcdHelmControllerApiV2beta2Rollback } from "./Rollback.js";
import { IComGithubFluxcdHelmControllerApiV2beta2Test } from "./Test.js";
import { IComGithubFluxcdHelmControllerApiV2beta2Uninstall } from "./Uninstall.js";
import { IComGithubFluxcdHelmControllerApiV2beta2Upgrade } from "./Upgrade.js";
import { IIoK8sApiextensionsApiserverPkgApisApiextensionsV1JSON } from "kubernetes-models/apiextensions.k8s.io/v1/JSON";
import { IComGithubFluxcdHelmControllerApiV2beta2ValuesReference } from "./ValuesReference.js";
import { ModelData, Model } from "@kubernetes-models/base";
/**
 * HelmReleaseSpec defines the desired state of a Helm release.
 */
export interface IHelmReleaseSpec {
    /**
     * Chart defines the template of the v1beta2.HelmChart that should be created
     * for this HelmRelease.
     */
    "chart"?: IComGithubFluxcdHelmControllerApiV2beta2HelmChartTemplate;
    /**
     * ChartRef holds a reference to a source controller resource containing the
     * Helm chart artifact.
     *
     * Note: this field is provisional to the v2 API, and not actively used
     * by v2beta2 HelmReleases.
     */
    "chartRef"?: IComGithubFluxcdHelmControllerApiV2beta2CrossNamespaceSourceReference;
    /**
     * DependsOn may contain a meta.NamespacedObjectReference slice with
     * references to HelmRelease resources that must be ready before this HelmRelease
     * can be reconciled.
     */
    "dependsOn"?: Array<IComGithubFluxcdPkgApisMetaNamespacedObjectReference>;
    /**
     * DriftDetection holds the configuration for detecting and handling
     * differences between the manifest in the Helm storage and the resources
     * currently existing in the cluster.
     */
    "driftDetection"?: IComGithubFluxcdHelmControllerApiV2beta2DriftDetection;
    /**
     * Install holds the configuration for Helm install actions for this HelmRelease.
     */
    "install"?: IComGithubFluxcdHelmControllerApiV2beta2Install;
    "interval": string;
    /**
     * KubeConfig for reconciling the HelmRelease on a remote cluster.
     * When used in combination with HelmReleaseSpec.ServiceAccountName,
     * forces the controller to act on behalf of that Service Account at the
     * target cluster.
     * If the --default-service-account flag is set, its value will be used as
     * a controller level fallback for when HelmReleaseSpec.ServiceAccountName
     * is empty.
     */
    "kubeConfig"?: IComGithubFluxcdPkgApisMetaKubeConfigReference;
    /**
     * MaxHistory is the number of revisions saved by Helm for this HelmRelease.
     * Use '0' for an unlimited number of revisions; defaults to '5'.
     */
    "maxHistory"?: number;
    /**
     * PersistentClient tells the controller to use a persistent Kubernetes
     * client for this release. When enabled, the client will be reused for the
     * duration of the reconciliation, instead of being created and destroyed
     * for each (step of a) Helm action.
     *
     * This can improve performance, but may cause issues with some Helm charts
     * that for example do create Custom Resource Definitions during installation
     * outside Helm's CRD lifecycle hooks, which are then not observed to be
     * available by e.g. post-install hooks.
     *
     * If not set, it defaults to true.
     */
    "persistentClient"?: boolean;
    /**
     * PostRenderers holds an array of Helm PostRenderers, which will be applied in order
     * of their definition.
     */
    "postRenderers"?: Array<IComGithubFluxcdHelmControllerApiV2beta2PostRenderer>;
    /**
     * ReleaseName used for the Helm release. Defaults to a composition of
     * '[TargetNamespace-]Name'.
     */
    "releaseName"?: string;
    /**
     * Rollback holds the configuration for Helm rollback actions for this HelmRelease.
     */
    "rollback"?: IComGithubFluxcdHelmControllerApiV2beta2Rollback;
    /**
     * The name of the Kubernetes service account to impersonate
     * when reconciling this HelmRelease.
     */
    "serviceAccountName"?: string;
    /**
     * StorageNamespace used for the Helm storage.
     * Defaults to the namespace of the HelmRelease.
     */
    "storageNamespace"?: string;
    /**
     * Suspend tells the controller to suspend reconciliation for this HelmRelease,
     * it does not apply to already started reconciliations. Defaults to false.
     */
    "suspend"?: boolean;
    /**
     * TargetNamespace to target when performing operations for the HelmRelease.
     * Defaults to the namespace of the HelmRelease.
     */
    "targetNamespace"?: string;
    /**
     * Test holds the configuration for Helm test actions for this HelmRelease.
     */
    "test"?: IComGithubFluxcdHelmControllerApiV2beta2Test;
    "timeout"?: string;
    /**
     * Uninstall holds the configuration for Helm uninstall actions for this HelmRelease.
     */
    "uninstall"?: IComGithubFluxcdHelmControllerApiV2beta2Uninstall;
    /**
     * Upgrade holds the configuration for Helm upgrade actions for this HelmRelease.
     */
    "upgrade"?: IComGithubFluxcdHelmControllerApiV2beta2Upgrade;
    /**
     * Values holds the values for this Helm release.
     */
    "values"?: IIoK8sApiextensionsApiserverPkgApisApiextensionsV1JSON;
    /**
     * ValuesFrom holds references to resources containing Helm values for this HelmRelease,
     * and information about how they should be merged.
     */
    "valuesFrom"?: Array<IComGithubFluxcdHelmControllerApiV2beta2ValuesReference>;
}
/**
 * HelmReleaseSpec defines the desired state of a Helm release.
 */
export declare class HelmReleaseSpec extends Model<IHelmReleaseSpec> implements IHelmReleaseSpec {
    "chart"?: IComGithubFluxcdHelmControllerApiV2beta2HelmChartTemplate;
    "chartRef"?: IComGithubFluxcdHelmControllerApiV2beta2CrossNamespaceSourceReference;
    "dependsOn"?: Array<IComGithubFluxcdPkgApisMetaNamespacedObjectReference>;
    "driftDetection"?: IComGithubFluxcdHelmControllerApiV2beta2DriftDetection;
    "install"?: IComGithubFluxcdHelmControllerApiV2beta2Install;
    "interval": string;
    "kubeConfig"?: IComGithubFluxcdPkgApisMetaKubeConfigReference;
    "maxHistory"?: number;
    "persistentClient"?: boolean;
    "postRenderers"?: Array<IComGithubFluxcdHelmControllerApiV2beta2PostRenderer>;
    "releaseName"?: string;
    "rollback"?: IComGithubFluxcdHelmControllerApiV2beta2Rollback;
    "serviceAccountName"?: string;
    "storageNamespace"?: string;
    "suspend"?: boolean;
    "targetNamespace"?: string;
    "test"?: IComGithubFluxcdHelmControllerApiV2beta2Test;
    "timeout"?: string;
    "uninstall"?: IComGithubFluxcdHelmControllerApiV2beta2Uninstall;
    "upgrade"?: IComGithubFluxcdHelmControllerApiV2beta2Upgrade;
    "values"?: IIoK8sApiextensionsApiserverPkgApisApiextensionsV1JSON;
    "valuesFrom"?: Array<IComGithubFluxcdHelmControllerApiV2beta2ValuesReference>;
    constructor(data?: ModelData<IHelmReleaseSpec>);
}
export type { IHelmReleaseSpec as IComGithubFluxcdHelmControllerApiV2beta2HelmReleaseSpec, HelmReleaseSpec as ComGithubFluxcdHelmControllerApiV2beta2HelmReleaseSpec };
