import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Container to store and organize immutable and indelible backups.
 *
 * ## Example Usage
 *
 * ### Backup Dr Backup Vault Simple
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const backup_vault_test = new gcp.backupdisasterrecovery.BackupVault("backup-vault-test", {
 *     location: "us-central1",
 *     backupVaultId: "backup-vault-test",
 *     description: "This is a second backup vault built by Terraform.",
 *     backupMinimumEnforcedRetentionDuration: "100000s",
 *     annotations: {
 *         annotations1: "bar1",
 *         annotations2: "baz1",
 *     },
 *     labels: {
 *         foo: "bar1",
 *         bar: "baz1",
 *     },
 *     forceUpdate: true,
 *     accessRestriction: "WITHIN_ORGANIZATION",
 *     backupRetentionInheritance: "INHERIT_VAULT_RETENTION",
 *     ignoreInactiveDatasources: true,
 *     ignoreBackupPlanReferences: true,
 *     allowMissing: true,
 * });
 * ```
 * ### Backup Dr Backup Vault Cmek
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const testProject = gcp.organizations.getProject({
 *     projectId: "my-project-name",
 * });
 * const backup_vault_cmek = new gcp.backupdisasterrecovery.BackupVault("backup-vault-cmek", {
 *     location: "us-central1",
 *     backupVaultId: "backup-vault-cmek",
 *     description: "This is a second backup vault built by Terraform.",
 *     backupMinimumEnforcedRetentionDuration: "100000s",
 *     annotations: {
 *         annotations1: "bar1",
 *         annotations2: "baz1",
 *     },
 *     labels: {
 *         foo: "bar1",
 *         bar: "baz1",
 *     },
 *     encryptionConfig: {
 *         kmsKeyName: "bkpvault-key",
 *     },
 *     forceUpdate: true,
 *     accessRestriction: "WITHIN_ORGANIZATION",
 *     backupRetentionInheritance: "INHERIT_VAULT_RETENTION",
 *     ignoreInactiveDatasources: true,
 *     ignoreBackupPlanReferences: true,
 *     allowMissing: true,
 * });
 * ```
 *
 * ## Import
 *
 * BackupVault can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}`
 *
 * * `{{project}}/{{location}}/{{backup_vault_id}}`
 *
 * * `{{location}}/{{backup_vault_id}}`
 *
 * When using the `pulumi import` command, BackupVault can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{project}}/{{location}}/{{backup_vault_id}}
 * ```
 *
 * ```sh
 * $ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{location}}/{{backup_vault_id}}
 * ```
 */
export declare class BackupVault extends pulumi.CustomResource {
    /**
     * Get an existing BackupVault resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: BackupVaultState, opts?: pulumi.CustomResourceOptions): BackupVault;
    /**
     * Returns true if the given object is an instance of BackupVault.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is BackupVault;
    /**
     * Access restriction for the backup vault. Default value is `WITHIN_ORGANIZATION` if not provided during creation.
     * Default value is `WITHIN_ORGANIZATION`.
     * Possible values are: `ACCESS_RESTRICTION_UNSPECIFIED`, `WITHIN_PROJECT`, `WITHIN_ORGANIZATION`, `UNRESTRICTED`, `WITHIN_ORG_BUT_UNRESTRICTED_FOR_BA`.
     */
    readonly accessRestriction: pulumi.Output<string | undefined>;
    /**
     * Allow idempotent deletion of backup vault. The request will still succeed in case the backup vault does not exist.
     */
    readonly allowMissing: pulumi.Output<boolean | undefined>;
    /**
     * Optional. User annotations. See https://google.aip.dev/128#annotations
     * Stores small amounts of arbitrary data.
     * **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.
     * Please refer to the field `effectiveAnnotations` for all of the annotations present on the resource.
     */
    readonly annotations: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * Output only. The number of backups in this backup vault.
     */
    readonly backupCount: pulumi.Output<string>;
    /**
     * Required. The default and minimum enforced retention for each backup within the backup vault. The enforced retention for each backup can be extended.
     */
    readonly backupMinimumEnforcedRetentionDuration: pulumi.Output<string>;
    /**
     * How a backup's enforced retention end time is inherited. Default value is `INHERIT_VAULT_RETENTION` if not provided during creation.
     * Possible values are: `BACKUP_RETENTION_INHERITANCE_UNSPECIFIED`, `INHERIT_VAULT_RETENTION`, `MATCH_BACKUP_EXPIRE_TIME`.
     */
    readonly backupRetentionInheritance: pulumi.Output<string | undefined>;
    /**
     * Required. ID of the requesting object.
     */
    readonly backupVaultId: pulumi.Output<string>;
    /**
     * Output only. The time when the instance was created.
     */
    readonly createTime: pulumi.Output<string>;
    /**
     * Output only. Set to true when there are no backups nested under this resource.
     */
    readonly deletable: pulumi.Output<boolean>;
    /**
     * Optional. The description of the BackupVault instance (2048 characters or less).
     */
    readonly description: pulumi.Output<string | undefined>;
    readonly effectiveAnnotations: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    readonly effectiveLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Optional. Time after which the BackupVault resource is locked.
     */
    readonly effectiveTime: pulumi.Output<string | undefined>;
    /**
     * Encryption configuration for the backup vault.
     * Structure is documented below.
     */
    readonly encryptionConfig: pulumi.Output<outputs.backupdisasterrecovery.BackupVaultEncryptionConfig | undefined>;
    /**
     * Optional. Server specified ETag for the backup vault resource to prevent simultaneous updates from overwiting each other.
     */
    readonly etag: pulumi.Output<string>;
    /**
     * (Optional, Deprecated)
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance containing no backups, but still containing empty datasources.
     * * deletion of a backup vault instance that is being referenced by an active backup plan.
     *
     * > **Warning:** `forceDelete` is deprecated and will be removed in a future major release. Use `ignoreInactiveDatasources` instead.
     *
     * @deprecated `forceDelete` is deprecated and will be removed in a future major release. Use `ignoreInactiveDatasources` instead.
     */
    readonly forceDelete: pulumi.Output<boolean | undefined>;
    /**
     * If set, allow update to extend the minimum enforced retention for backup vault. This overrides
     * the restriction against conflicting retention periods. This conflict may occur when the
     * expiration schedule defined by the associated backup plan is shorter than the minimum
     * retention set by the backup vault.
     */
    readonly forceUpdate: pulumi.Output<boolean | undefined>;
    /**
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance that is being referenced by an active backup plan.
     */
    readonly ignoreBackupPlanReferences: pulumi.Output<boolean | undefined>;
    /**
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance containing no backups, but still containing empty datasources.
     */
    readonly ignoreInactiveDatasources: pulumi.Output<boolean | undefined>;
    /**
     * Optional. Resource labels to represent user provided metadata.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The GCP location for the backup vault.
     */
    readonly location: pulumi.Output<string>;
    /**
     * Output only. Identifier. The resource name.
     */
    readonly name: pulumi.Output<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    readonly project: pulumi.Output<string>;
    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Output only. Service account used by the BackupVault Service for this BackupVault.  The user should grant this account permissions in their workload project to enable the service to run backups and restores there.
     */
    readonly serviceAccount: pulumi.Output<string>;
    /**
     * Output only. The BackupVault resource instance state.
     * Possible values:
     * STATE_UNSPECIFIED
     * CREATING
     * ACTIVE
     * DELETING
     * ERROR
     */
    readonly state: pulumi.Output<string>;
    /**
     * Output only. Total size of the storage used by all backup resources.
     */
    readonly totalStoredBytes: pulumi.Output<string>;
    /**
     * Output only. Output only Immutable after resource creation until resource deletion.
     */
    readonly uid: pulumi.Output<string>;
    /**
     * Output only. The time when the instance was updated.
     */
    readonly updateTime: pulumi.Output<string>;
    /**
     * Create a BackupVault resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: BackupVaultArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering BackupVault resources.
 */
export interface BackupVaultState {
    /**
     * Access restriction for the backup vault. Default value is `WITHIN_ORGANIZATION` if not provided during creation.
     * Default value is `WITHIN_ORGANIZATION`.
     * Possible values are: `ACCESS_RESTRICTION_UNSPECIFIED`, `WITHIN_PROJECT`, `WITHIN_ORGANIZATION`, `UNRESTRICTED`, `WITHIN_ORG_BUT_UNRESTRICTED_FOR_BA`.
     */
    accessRestriction?: pulumi.Input<string>;
    /**
     * Allow idempotent deletion of backup vault. The request will still succeed in case the backup vault does not exist.
     */
    allowMissing?: pulumi.Input<boolean>;
    /**
     * Optional. User annotations. See https://google.aip.dev/128#annotations
     * Stores small amounts of arbitrary data.
     * **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.
     * Please refer to the field `effectiveAnnotations` for all of the annotations present on the resource.
     */
    annotations?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Output only. The number of backups in this backup vault.
     */
    backupCount?: pulumi.Input<string>;
    /**
     * Required. The default and minimum enforced retention for each backup within the backup vault. The enforced retention for each backup can be extended.
     */
    backupMinimumEnforcedRetentionDuration?: pulumi.Input<string>;
    /**
     * How a backup's enforced retention end time is inherited. Default value is `INHERIT_VAULT_RETENTION` if not provided during creation.
     * Possible values are: `BACKUP_RETENTION_INHERITANCE_UNSPECIFIED`, `INHERIT_VAULT_RETENTION`, `MATCH_BACKUP_EXPIRE_TIME`.
     */
    backupRetentionInheritance?: pulumi.Input<string>;
    /**
     * Required. ID of the requesting object.
     */
    backupVaultId?: pulumi.Input<string>;
    /**
     * Output only. The time when the instance was created.
     */
    createTime?: pulumi.Input<string>;
    /**
     * Output only. Set to true when there are no backups nested under this resource.
     */
    deletable?: pulumi.Input<boolean>;
    /**
     * Optional. The description of the BackupVault instance (2048 characters or less).
     */
    description?: pulumi.Input<string>;
    effectiveAnnotations?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    effectiveLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Optional. Time after which the BackupVault resource is locked.
     */
    effectiveTime?: pulumi.Input<string>;
    /**
     * Encryption configuration for the backup vault.
     * Structure is documented below.
     */
    encryptionConfig?: pulumi.Input<inputs.backupdisasterrecovery.BackupVaultEncryptionConfig>;
    /**
     * Optional. Server specified ETag for the backup vault resource to prevent simultaneous updates from overwiting each other.
     */
    etag?: pulumi.Input<string>;
    /**
     * (Optional, Deprecated)
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance containing no backups, but still containing empty datasources.
     * * deletion of a backup vault instance that is being referenced by an active backup plan.
     *
     * > **Warning:** `forceDelete` is deprecated and will be removed in a future major release. Use `ignoreInactiveDatasources` instead.
     *
     * @deprecated `forceDelete` is deprecated and will be removed in a future major release. Use `ignoreInactiveDatasources` instead.
     */
    forceDelete?: pulumi.Input<boolean>;
    /**
     * If set, allow update to extend the minimum enforced retention for backup vault. This overrides
     * the restriction against conflicting retention periods. This conflict may occur when the
     * expiration schedule defined by the associated backup plan is shorter than the minimum
     * retention set by the backup vault.
     */
    forceUpdate?: pulumi.Input<boolean>;
    /**
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance that is being referenced by an active backup plan.
     */
    ignoreBackupPlanReferences?: pulumi.Input<boolean>;
    /**
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance containing no backups, but still containing empty datasources.
     */
    ignoreInactiveDatasources?: pulumi.Input<boolean>;
    /**
     * Optional. Resource labels to represent user provided metadata.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The GCP location for the backup vault.
     */
    location?: pulumi.Input<string>;
    /**
     * Output only. Identifier. The resource name.
     */
    name?: pulumi.Input<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Output only. Service account used by the BackupVault Service for this BackupVault.  The user should grant this account permissions in their workload project to enable the service to run backups and restores there.
     */
    serviceAccount?: pulumi.Input<string>;
    /**
     * Output only. The BackupVault resource instance state.
     * Possible values:
     * STATE_UNSPECIFIED
     * CREATING
     * ACTIVE
     * DELETING
     * ERROR
     */
    state?: pulumi.Input<string>;
    /**
     * Output only. Total size of the storage used by all backup resources.
     */
    totalStoredBytes?: pulumi.Input<string>;
    /**
     * Output only. Output only Immutable after resource creation until resource deletion.
     */
    uid?: pulumi.Input<string>;
    /**
     * Output only. The time when the instance was updated.
     */
    updateTime?: pulumi.Input<string>;
}
/**
 * The set of arguments for constructing a BackupVault resource.
 */
export interface BackupVaultArgs {
    /**
     * Access restriction for the backup vault. Default value is `WITHIN_ORGANIZATION` if not provided during creation.
     * Default value is `WITHIN_ORGANIZATION`.
     * Possible values are: `ACCESS_RESTRICTION_UNSPECIFIED`, `WITHIN_PROJECT`, `WITHIN_ORGANIZATION`, `UNRESTRICTED`, `WITHIN_ORG_BUT_UNRESTRICTED_FOR_BA`.
     */
    accessRestriction?: pulumi.Input<string>;
    /**
     * Allow idempotent deletion of backup vault. The request will still succeed in case the backup vault does not exist.
     */
    allowMissing?: pulumi.Input<boolean>;
    /**
     * Optional. User annotations. See https://google.aip.dev/128#annotations
     * Stores small amounts of arbitrary data.
     * **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.
     * Please refer to the field `effectiveAnnotations` for all of the annotations present on the resource.
     */
    annotations?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * Required. The default and minimum enforced retention for each backup within the backup vault. The enforced retention for each backup can be extended.
     */
    backupMinimumEnforcedRetentionDuration: pulumi.Input<string>;
    /**
     * How a backup's enforced retention end time is inherited. Default value is `INHERIT_VAULT_RETENTION` if not provided during creation.
     * Possible values are: `BACKUP_RETENTION_INHERITANCE_UNSPECIFIED`, `INHERIT_VAULT_RETENTION`, `MATCH_BACKUP_EXPIRE_TIME`.
     */
    backupRetentionInheritance?: pulumi.Input<string>;
    /**
     * Required. ID of the requesting object.
     */
    backupVaultId: pulumi.Input<string>;
    /**
     * Optional. The description of the BackupVault instance (2048 characters or less).
     */
    description?: pulumi.Input<string>;
    /**
     * Optional. Time after which the BackupVault resource is locked.
     */
    effectiveTime?: pulumi.Input<string>;
    /**
     * Encryption configuration for the backup vault.
     * Structure is documented below.
     */
    encryptionConfig?: pulumi.Input<inputs.backupdisasterrecovery.BackupVaultEncryptionConfig>;
    /**
     * (Optional, Deprecated)
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance containing no backups, but still containing empty datasources.
     * * deletion of a backup vault instance that is being referenced by an active backup plan.
     *
     * > **Warning:** `forceDelete` is deprecated and will be removed in a future major release. Use `ignoreInactiveDatasources` instead.
     *
     * @deprecated `forceDelete` is deprecated and will be removed in a future major release. Use `ignoreInactiveDatasources` instead.
     */
    forceDelete?: pulumi.Input<boolean>;
    /**
     * If set, allow update to extend the minimum enforced retention for backup vault. This overrides
     * the restriction against conflicting retention periods. This conflict may occur when the
     * expiration schedule defined by the associated backup plan is shorter than the minimum
     * retention set by the backup vault.
     */
    forceUpdate?: pulumi.Input<boolean>;
    /**
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance that is being referenced by an active backup plan.
     */
    ignoreBackupPlanReferences?: pulumi.Input<boolean>;
    /**
     * If set, the following restrictions against deletion of the backup vault instance can be overridden:
     * * deletion of a backup vault instance containing no backups, but still containing empty datasources.
     */
    ignoreInactiveDatasources?: pulumi.Input<boolean>;
    /**
     * Optional. Resource labels to represent user provided metadata.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The GCP location for the backup vault.
     */
    location: pulumi.Input<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string>;
}
