// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.gkebackup.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigEncryptionKeyArgs;
import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;
import com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedNamespacesArgs;
import java.lang.Boolean;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class BackupPlanBackupConfigArgs extends com.pulumi.resources.ResourceArgs {

    public static final BackupPlanBackupConfigArgs Empty = new BackupPlanBackupConfigArgs();

    /**
     * If True, include all namespaced resources.
     * 
     */
    @Import(name="allNamespaces")
    private @Nullable Output<Boolean> allNamespaces;

    /**
     * @return If True, include all namespaced resources.
     * 
     */
    public Optional<Output<Boolean>> allNamespaces() {
        return Optional.ofNullable(this.allNamespaces);
    }

    /**
     * This defines a customer managed encryption key that will be used to encrypt the &#34;config&#34;
     * portion (the Kubernetes resources) of Backups created via this plan.
     * Structure is documented below.
     * 
     */
    @Import(name="encryptionKey")
    private @Nullable Output<BackupPlanBackupConfigEncryptionKeyArgs> encryptionKey;

    /**
     * @return This defines a customer managed encryption key that will be used to encrypt the &#34;config&#34;
     * portion (the Kubernetes resources) of Backups created via this plan.
     * Structure is documented below.
     * 
     */
    public Optional<Output<BackupPlanBackupConfigEncryptionKeyArgs>> encryptionKey() {
        return Optional.ofNullable(this.encryptionKey);
    }

    /**
     * This flag specifies whether Kubernetes Secret resources should be included
     * when they fall into the scope of Backups.
     * 
     */
    @Import(name="includeSecrets")
    private @Nullable Output<Boolean> includeSecrets;

    /**
     * @return This flag specifies whether Kubernetes Secret resources should be included
     * when they fall into the scope of Backups.
     * 
     */
    public Optional<Output<Boolean>> includeSecrets() {
        return Optional.ofNullable(this.includeSecrets);
    }

    /**
     * This flag specifies whether volume data should be backed up when PVCs are
     * included in the scope of a Backup.
     * 
     */
    @Import(name="includeVolumeData")
    private @Nullable Output<Boolean> includeVolumeData;

    /**
     * @return This flag specifies whether volume data should be backed up when PVCs are
     * included in the scope of a Backup.
     * 
     */
    public Optional<Output<Boolean>> includeVolumeData() {
        return Optional.ofNullable(this.includeVolumeData);
    }

    /**
     * A list of namespaced Kubernetes Resources.
     * Structure is documented below.
     * 
     */
    @Import(name="selectedApplications")
    private @Nullable Output<BackupPlanBackupConfigSelectedApplicationsArgs> selectedApplications;

    /**
     * @return A list of namespaced Kubernetes Resources.
     * Structure is documented below.
     * 
     */
    public Optional<Output<BackupPlanBackupConfigSelectedApplicationsArgs>> selectedApplications() {
        return Optional.ofNullable(this.selectedApplications);
    }

    /**
     * If set, include just the resources in the listed namespaces.
     * Structure is documented below.
     * 
     */
    @Import(name="selectedNamespaces")
    private @Nullable Output<BackupPlanBackupConfigSelectedNamespacesArgs> selectedNamespaces;

    /**
     * @return If set, include just the resources in the listed namespaces.
     * Structure is documented below.
     * 
     */
    public Optional<Output<BackupPlanBackupConfigSelectedNamespacesArgs>> selectedNamespaces() {
        return Optional.ofNullable(this.selectedNamespaces);
    }

    private BackupPlanBackupConfigArgs() {}

    private BackupPlanBackupConfigArgs(BackupPlanBackupConfigArgs $) {
        this.allNamespaces = $.allNamespaces;
        this.encryptionKey = $.encryptionKey;
        this.includeSecrets = $.includeSecrets;
        this.includeVolumeData = $.includeVolumeData;
        this.selectedApplications = $.selectedApplications;
        this.selectedNamespaces = $.selectedNamespaces;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(BackupPlanBackupConfigArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private BackupPlanBackupConfigArgs $;

        public Builder() {
            $ = new BackupPlanBackupConfigArgs();
        }

        public Builder(BackupPlanBackupConfigArgs defaults) {
            $ = new BackupPlanBackupConfigArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param allNamespaces If True, include all namespaced resources.
         * 
         * @return builder
         * 
         */
        public Builder allNamespaces(@Nullable Output<Boolean> allNamespaces) {
            $.allNamespaces = allNamespaces;
            return this;
        }

        /**
         * @param allNamespaces If True, include all namespaced resources.
         * 
         * @return builder
         * 
         */
        public Builder allNamespaces(Boolean allNamespaces) {
            return allNamespaces(Output.of(allNamespaces));
        }

        /**
         * @param encryptionKey This defines a customer managed encryption key that will be used to encrypt the &#34;config&#34;
         * portion (the Kubernetes resources) of Backups created via this plan.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder encryptionKey(@Nullable Output<BackupPlanBackupConfigEncryptionKeyArgs> encryptionKey) {
            $.encryptionKey = encryptionKey;
            return this;
        }

        /**
         * @param encryptionKey This defines a customer managed encryption key that will be used to encrypt the &#34;config&#34;
         * portion (the Kubernetes resources) of Backups created via this plan.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder encryptionKey(BackupPlanBackupConfigEncryptionKeyArgs encryptionKey) {
            return encryptionKey(Output.of(encryptionKey));
        }

        /**
         * @param includeSecrets This flag specifies whether Kubernetes Secret resources should be included
         * when they fall into the scope of Backups.
         * 
         * @return builder
         * 
         */
        public Builder includeSecrets(@Nullable Output<Boolean> includeSecrets) {
            $.includeSecrets = includeSecrets;
            return this;
        }

        /**
         * @param includeSecrets This flag specifies whether Kubernetes Secret resources should be included
         * when they fall into the scope of Backups.
         * 
         * @return builder
         * 
         */
        public Builder includeSecrets(Boolean includeSecrets) {
            return includeSecrets(Output.of(includeSecrets));
        }

        /**
         * @param includeVolumeData This flag specifies whether volume data should be backed up when PVCs are
         * included in the scope of a Backup.
         * 
         * @return builder
         * 
         */
        public Builder includeVolumeData(@Nullable Output<Boolean> includeVolumeData) {
            $.includeVolumeData = includeVolumeData;
            return this;
        }

        /**
         * @param includeVolumeData This flag specifies whether volume data should be backed up when PVCs are
         * included in the scope of a Backup.
         * 
         * @return builder
         * 
         */
        public Builder includeVolumeData(Boolean includeVolumeData) {
            return includeVolumeData(Output.of(includeVolumeData));
        }

        /**
         * @param selectedApplications A list of namespaced Kubernetes Resources.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder selectedApplications(@Nullable Output<BackupPlanBackupConfigSelectedApplicationsArgs> selectedApplications) {
            $.selectedApplications = selectedApplications;
            return this;
        }

        /**
         * @param selectedApplications A list of namespaced Kubernetes Resources.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs selectedApplications) {
            return selectedApplications(Output.of(selectedApplications));
        }

        /**
         * @param selectedNamespaces If set, include just the resources in the listed namespaces.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder selectedNamespaces(@Nullable Output<BackupPlanBackupConfigSelectedNamespacesArgs> selectedNamespaces) {
            $.selectedNamespaces = selectedNamespaces;
            return this;
        }

        /**
         * @param selectedNamespaces If set, include just the resources in the listed namespaces.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder selectedNamespaces(BackupPlanBackupConfigSelectedNamespacesArgs selectedNamespaces) {
            return selectedNamespaces(Output.of(selectedNamespaces));
        }

        public BackupPlanBackupConfigArgs build() {
            return $;
        }
    }

}
