// *** 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.azure.arckubernetes;

import com.pulumi.azure.arckubernetes.inputs.FluxConfigurationBlobStorageArgs;
import com.pulumi.azure.arckubernetes.inputs.FluxConfigurationBucketArgs;
import com.pulumi.azure.arckubernetes.inputs.FluxConfigurationGitRepositoryArgs;
import com.pulumi.azure.arckubernetes.inputs.FluxConfigurationKustomizationArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final FluxConfigurationArgs Empty = new FluxConfigurationArgs();

    /**
     * An `blob_storage` block as defined below.
     * 
     */
    @Import(name="blobStorage")
    private @Nullable Output<FluxConfigurationBlobStorageArgs> blobStorage;

    /**
     * @return An `blob_storage` block as defined below.
     * 
     */
    public Optional<Output<FluxConfigurationBlobStorageArgs>> blobStorage() {
        return Optional.ofNullable(this.blobStorage);
    }

    /**
     * A `bucket` block as defined below.
     * 
     */
    @Import(name="bucket")
    private @Nullable Output<FluxConfigurationBucketArgs> bucket;

    /**
     * @return A `bucket` block as defined below.
     * 
     */
    public Optional<Output<FluxConfigurationBucketArgs>> bucket() {
        return Optional.ofNullable(this.bucket);
    }

    /**
     * Specifies the Cluster ID. Changing this forces a new Arc Kubernetes Cluster Extension to be created.
     * 
     */
    @Import(name="clusterId", required=true)
    private Output<String> clusterId;

    /**
     * @return Specifies the Cluster ID. Changing this forces a new Arc Kubernetes Cluster Extension to be created.
     * 
     */
    public Output<String> clusterId() {
        return this.clusterId;
    }

    /**
     * Whether the configuration will keep its reconciliation of its kustomizations and sources with the repository. Defaults to `true`.
     * 
     */
    @Import(name="continuousReconciliationEnabled")
    private @Nullable Output<Boolean> continuousReconciliationEnabled;

    /**
     * @return Whether the configuration will keep its reconciliation of its kustomizations and sources with the repository. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> continuousReconciliationEnabled() {
        return Optional.ofNullable(this.continuousReconciliationEnabled);
    }

    /**
     * A `git_repository` block as defined below.
     * 
     */
    @Import(name="gitRepository")
    private @Nullable Output<FluxConfigurationGitRepositoryArgs> gitRepository;

    /**
     * @return A `git_repository` block as defined below.
     * 
     */
    public Optional<Output<FluxConfigurationGitRepositoryArgs>> gitRepository() {
        return Optional.ofNullable(this.gitRepository);
    }

    /**
     * A `kustomizations` block as defined below.
     * 
     */
    @Import(name="kustomizations", required=true)
    private Output<List<FluxConfigurationKustomizationArgs>> kustomizations;

    /**
     * @return A `kustomizations` block as defined below.
     * 
     */
    public Output<List<FluxConfigurationKustomizationArgs>> kustomizations() {
        return this.kustomizations;
    }

    /**
     * Specifies the name which should be used for this Arc Kubernetes Flux Configuration. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Specifies the name which should be used for this Arc Kubernetes Flux Configuration. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * Specifies the namespace to which this configuration is installed to. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
     * 
     */
    @Import(name="namespace", required=true)
    private Output<String> namespace;

    /**
     * @return Specifies the namespace to which this configuration is installed to. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
     * 
     */
    public Output<String> namespace() {
        return this.namespace;
    }

    /**
     * Specifies the scope at which the operator will be installed. Possible values are `cluster` and `namespace`. Defaults to `namespace`. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
     * 
     */
    @Import(name="scope")
    private @Nullable Output<String> scope;

    /**
     * @return Specifies the scope at which the operator will be installed. Possible values are `cluster` and `namespace`. Defaults to `namespace`. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
     * 
     */
    public Optional<Output<String>> scope() {
        return Optional.ofNullable(this.scope);
    }

    private FluxConfigurationArgs() {}

    private FluxConfigurationArgs(FluxConfigurationArgs $) {
        this.blobStorage = $.blobStorage;
        this.bucket = $.bucket;
        this.clusterId = $.clusterId;
        this.continuousReconciliationEnabled = $.continuousReconciliationEnabled;
        this.gitRepository = $.gitRepository;
        this.kustomizations = $.kustomizations;
        this.name = $.name;
        this.namespace = $.namespace;
        this.scope = $.scope;
    }

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

    public static final class Builder {
        private FluxConfigurationArgs $;

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

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

        /**
         * @param blobStorage An `blob_storage` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder blobStorage(@Nullable Output<FluxConfigurationBlobStorageArgs> blobStorage) {
            $.blobStorage = blobStorage;
            return this;
        }

        /**
         * @param blobStorage An `blob_storage` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder blobStorage(FluxConfigurationBlobStorageArgs blobStorage) {
            return blobStorage(Output.of(blobStorage));
        }

        /**
         * @param bucket A `bucket` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder bucket(@Nullable Output<FluxConfigurationBucketArgs> bucket) {
            $.bucket = bucket;
            return this;
        }

        /**
         * @param bucket A `bucket` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder bucket(FluxConfigurationBucketArgs bucket) {
            return bucket(Output.of(bucket));
        }

        /**
         * @param clusterId Specifies the Cluster ID. Changing this forces a new Arc Kubernetes Cluster Extension to be created.
         * 
         * @return builder
         * 
         */
        public Builder clusterId(Output<String> clusterId) {
            $.clusterId = clusterId;
            return this;
        }

        /**
         * @param clusterId Specifies the Cluster ID. Changing this forces a new Arc Kubernetes Cluster Extension to be created.
         * 
         * @return builder
         * 
         */
        public Builder clusterId(String clusterId) {
            return clusterId(Output.of(clusterId));
        }

        /**
         * @param continuousReconciliationEnabled Whether the configuration will keep its reconciliation of its kustomizations and sources with the repository. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder continuousReconciliationEnabled(@Nullable Output<Boolean> continuousReconciliationEnabled) {
            $.continuousReconciliationEnabled = continuousReconciliationEnabled;
            return this;
        }

        /**
         * @param continuousReconciliationEnabled Whether the configuration will keep its reconciliation of its kustomizations and sources with the repository. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder continuousReconciliationEnabled(Boolean continuousReconciliationEnabled) {
            return continuousReconciliationEnabled(Output.of(continuousReconciliationEnabled));
        }

        /**
         * @param gitRepository A `git_repository` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder gitRepository(@Nullable Output<FluxConfigurationGitRepositoryArgs> gitRepository) {
            $.gitRepository = gitRepository;
            return this;
        }

        /**
         * @param gitRepository A `git_repository` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder gitRepository(FluxConfigurationGitRepositoryArgs gitRepository) {
            return gitRepository(Output.of(gitRepository));
        }

        /**
         * @param kustomizations A `kustomizations` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder kustomizations(Output<List<FluxConfigurationKustomizationArgs>> kustomizations) {
            $.kustomizations = kustomizations;
            return this;
        }

        /**
         * @param kustomizations A `kustomizations` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder kustomizations(List<FluxConfigurationKustomizationArgs> kustomizations) {
            return kustomizations(Output.of(kustomizations));
        }

        /**
         * @param kustomizations A `kustomizations` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder kustomizations(FluxConfigurationKustomizationArgs... kustomizations) {
            return kustomizations(List.of(kustomizations));
        }

        /**
         * @param name Specifies the name which should be used for this Arc Kubernetes Flux Configuration. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Specifies the name which should be used for this Arc Kubernetes Flux Configuration. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param namespace Specifies the namespace to which this configuration is installed to. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
         * 
         * @return builder
         * 
         */
        public Builder namespace(Output<String> namespace) {
            $.namespace = namespace;
            return this;
        }

        /**
         * @param namespace Specifies the namespace to which this configuration is installed to. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
         * 
         * @return builder
         * 
         */
        public Builder namespace(String namespace) {
            return namespace(Output.of(namespace));
        }

        /**
         * @param scope Specifies the scope at which the operator will be installed. Possible values are `cluster` and `namespace`. Defaults to `namespace`. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
         * 
         * @return builder
         * 
         */
        public Builder scope(@Nullable Output<String> scope) {
            $.scope = scope;
            return this;
        }

        /**
         * @param scope Specifies the scope at which the operator will be installed. Possible values are `cluster` and `namespace`. Defaults to `namespace`. Changing this forces a new Arc Kubernetes Flux Configuration to be created.
         * 
         * @return builder
         * 
         */
        public Builder scope(String scope) {
            return scope(Output.of(scope));
        }

        public FluxConfigurationArgs build() {
            $.clusterId = Objects.requireNonNull($.clusterId, "expected parameter 'clusterId' to be non-null");
            $.kustomizations = Objects.requireNonNull($.kustomizations, "expected parameter 'kustomizations' to be non-null");
            $.namespace = Objects.requireNonNull($.namespace, "expected parameter 'namespace' to be non-null");
            return $;
        }
    }

}
