/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface ClusterPolicyConfig extends cdktf.TerraformMetaArguments {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#definition ClusterPolicy#definition}
    */
    readonly definition?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#description ClusterPolicy#description}
    */
    readonly description?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#id ClusterPolicy#id}
    *
    * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
    * If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
    */
    readonly id?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#max_clusters_per_user ClusterPolicy#max_clusters_per_user}
    */
    readonly maxClustersPerUser?: number;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#name ClusterPolicy#name}
    */
    readonly name?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#policy_family_definition_overrides ClusterPolicy#policy_family_definition_overrides}
    */
    readonly policyFamilyDefinitionOverrides?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#policy_family_id ClusterPolicy#policy_family_id}
    */
    readonly policyFamilyId?: string;
    /**
    * libraries block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#libraries ClusterPolicy#libraries}
    */
    readonly libraries?: ClusterPolicyLibraries[] | cdktf.IResolvable;
}
export interface ClusterPolicyLibrariesCran {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#package ClusterPolicy#package}
    */
    readonly package: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#repo ClusterPolicy#repo}
    */
    readonly repo?: string;
}
export declare function clusterPolicyLibrariesCranToTerraform(struct?: ClusterPolicyLibrariesCranOutputReference | ClusterPolicyLibrariesCran): any;
export declare function clusterPolicyLibrariesCranToHclTerraform(struct?: ClusterPolicyLibrariesCranOutputReference | ClusterPolicyLibrariesCran): any;
export declare class ClusterPolicyLibrariesCranOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): ClusterPolicyLibrariesCran | undefined;
    set internalValue(value: ClusterPolicyLibrariesCran | undefined);
    private _package?;
    get package(): string;
    set package(value: string);
    get packageInput(): string | undefined;
    private _repo?;
    get repo(): string;
    set repo(value: string);
    resetRepo(): void;
    get repoInput(): string | undefined;
}
export interface ClusterPolicyLibrariesMaven {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#coordinates ClusterPolicy#coordinates}
    */
    readonly coordinates: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#exclusions ClusterPolicy#exclusions}
    */
    readonly exclusions?: string[];
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#repo ClusterPolicy#repo}
    */
    readonly repo?: string;
}
export declare function clusterPolicyLibrariesMavenToTerraform(struct?: ClusterPolicyLibrariesMavenOutputReference | ClusterPolicyLibrariesMaven): any;
export declare function clusterPolicyLibrariesMavenToHclTerraform(struct?: ClusterPolicyLibrariesMavenOutputReference | ClusterPolicyLibrariesMaven): any;
export declare class ClusterPolicyLibrariesMavenOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): ClusterPolicyLibrariesMaven | undefined;
    set internalValue(value: ClusterPolicyLibrariesMaven | undefined);
    private _coordinates?;
    get coordinates(): string;
    set coordinates(value: string);
    get coordinatesInput(): string | undefined;
    private _exclusions?;
    get exclusions(): string[];
    set exclusions(value: string[]);
    resetExclusions(): void;
    get exclusionsInput(): string[] | undefined;
    private _repo?;
    get repo(): string;
    set repo(value: string);
    resetRepo(): void;
    get repoInput(): string | undefined;
}
export interface ClusterPolicyLibrariesPypi {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#package ClusterPolicy#package}
    */
    readonly package: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#repo ClusterPolicy#repo}
    */
    readonly repo?: string;
}
export declare function clusterPolicyLibrariesPypiToTerraform(struct?: ClusterPolicyLibrariesPypiOutputReference | ClusterPolicyLibrariesPypi): any;
export declare function clusterPolicyLibrariesPypiToHclTerraform(struct?: ClusterPolicyLibrariesPypiOutputReference | ClusterPolicyLibrariesPypi): any;
export declare class ClusterPolicyLibrariesPypiOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): ClusterPolicyLibrariesPypi | undefined;
    set internalValue(value: ClusterPolicyLibrariesPypi | undefined);
    private _package?;
    get package(): string;
    set package(value: string);
    get packageInput(): string | undefined;
    private _repo?;
    get repo(): string;
    set repo(value: string);
    resetRepo(): void;
    get repoInput(): string | undefined;
}
export interface ClusterPolicyLibraries {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#egg ClusterPolicy#egg}
    */
    readonly egg?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#jar ClusterPolicy#jar}
    */
    readonly jar?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#requirements ClusterPolicy#requirements}
    */
    readonly requirements?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#whl ClusterPolicy#whl}
    */
    readonly whl?: string;
    /**
    * cran block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#cran ClusterPolicy#cran}
    */
    readonly cran?: ClusterPolicyLibrariesCran;
    /**
    * maven block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#maven ClusterPolicy#maven}
    */
    readonly maven?: ClusterPolicyLibrariesMaven;
    /**
    * pypi block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#pypi ClusterPolicy#pypi}
    */
    readonly pypi?: ClusterPolicyLibrariesPypi;
}
export declare function clusterPolicyLibrariesToTerraform(struct?: ClusterPolicyLibraries | cdktf.IResolvable): any;
export declare function clusterPolicyLibrariesToHclTerraform(struct?: ClusterPolicyLibraries | cdktf.IResolvable): any;
export declare class ClusterPolicyLibrariesOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ClusterPolicyLibraries | cdktf.IResolvable | undefined;
    set internalValue(value: ClusterPolicyLibraries | cdktf.IResolvable | undefined);
    private _egg?;
    get egg(): string;
    set egg(value: string);
    resetEgg(): void;
    get eggInput(): string | undefined;
    private _jar?;
    get jar(): string;
    set jar(value: string);
    resetJar(): void;
    get jarInput(): string | undefined;
    private _requirements?;
    get requirements(): string;
    set requirements(value: string);
    resetRequirements(): void;
    get requirementsInput(): string | undefined;
    private _whl?;
    get whl(): string;
    set whl(value: string);
    resetWhl(): void;
    get whlInput(): string | undefined;
    private _cran;
    get cran(): ClusterPolicyLibrariesCranOutputReference;
    putCran(value: ClusterPolicyLibrariesCran): void;
    resetCran(): void;
    get cranInput(): ClusterPolicyLibrariesCran | undefined;
    private _maven;
    get maven(): ClusterPolicyLibrariesMavenOutputReference;
    putMaven(value: ClusterPolicyLibrariesMaven): void;
    resetMaven(): void;
    get mavenInput(): ClusterPolicyLibrariesMaven | undefined;
    private _pypi;
    get pypi(): ClusterPolicyLibrariesPypiOutputReference;
    putPypi(value: ClusterPolicyLibrariesPypi): void;
    resetPypi(): void;
    get pypiInput(): ClusterPolicyLibrariesPypi | undefined;
}
export declare class ClusterPolicyLibrariesList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ClusterPolicyLibraries[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ClusterPolicyLibrariesOutputReference;
}
/**
* Represents a {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy databricks_cluster_policy}
*/
export declare class ClusterPolicy extends cdktf.TerraformResource {
    static readonly tfResourceType = "databricks_cluster_policy";
    /**
    * Generates CDKTF code for importing a ClusterPolicy resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the ClusterPolicy to import
    * @param importFromId The id of the existing ClusterPolicy that should be imported. Refer to the {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the ClusterPolicy to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/databricks/databricks/1.71.0/docs/resources/cluster_policy databricks_cluster_policy} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options ClusterPolicyConfig = {}
    */
    constructor(scope: Construct, id: string, config?: ClusterPolicyConfig);
    private _definition?;
    get definition(): string;
    set definition(value: string);
    resetDefinition(): void;
    get definitionInput(): string | undefined;
    private _description?;
    get description(): string;
    set description(value: string);
    resetDescription(): void;
    get descriptionInput(): string | undefined;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    private _maxClustersPerUser?;
    get maxClustersPerUser(): number;
    set maxClustersPerUser(value: number);
    resetMaxClustersPerUser(): void;
    get maxClustersPerUserInput(): number | undefined;
    private _name?;
    get name(): string;
    set name(value: string);
    resetName(): void;
    get nameInput(): string | undefined;
    private _policyFamilyDefinitionOverrides?;
    get policyFamilyDefinitionOverrides(): string;
    set policyFamilyDefinitionOverrides(value: string);
    resetPolicyFamilyDefinitionOverrides(): void;
    get policyFamilyDefinitionOverridesInput(): string | undefined;
    private _policyFamilyId?;
    get policyFamilyId(): string;
    set policyFamilyId(value: string);
    resetPolicyFamilyId(): void;
    get policyFamilyIdInput(): string | undefined;
    get policyId(): string;
    private _libraries;
    get libraries(): ClusterPolicyLibrariesList;
    putLibraries(value: ClusterPolicyLibraries[] | cdktf.IResolvable): void;
    resetLibraries(): void;
    get librariesInput(): cdktf.IResolvable | ClusterPolicyLibraries[] | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
