// *** 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.dataproc.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final WorkflowTemplatePlacementClusterSelectorArgs Empty = new WorkflowTemplatePlacementClusterSelectorArgs();

    /**
     * Required. The cluster labels. Cluster must have all labels to match.
     * 
     */
    @Import(name="clusterLabels", required=true)
    private Output<Map<String,String>> clusterLabels;

    /**
     * @return Required. The cluster labels. Cluster must have all labels to match.
     * 
     */
    public Output<Map<String,String>> clusterLabels() {
        return this.clusterLabels;
    }

    /**
     * The zone where workflow process executes. This parameter does not affect the selection of the cluster. If unspecified, the zone of the first cluster matching the selector is used.
     * 
     */
    @Import(name="zone")
    private @Nullable Output<String> zone;

    /**
     * @return The zone where workflow process executes. This parameter does not affect the selection of the cluster. If unspecified, the zone of the first cluster matching the selector is used.
     * 
     */
    public Optional<Output<String>> zone() {
        return Optional.ofNullable(this.zone);
    }

    private WorkflowTemplatePlacementClusterSelectorArgs() {}

    private WorkflowTemplatePlacementClusterSelectorArgs(WorkflowTemplatePlacementClusterSelectorArgs $) {
        this.clusterLabels = $.clusterLabels;
        this.zone = $.zone;
    }

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

    public static final class Builder {
        private WorkflowTemplatePlacementClusterSelectorArgs $;

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

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

        /**
         * @param clusterLabels Required. The cluster labels. Cluster must have all labels to match.
         * 
         * @return builder
         * 
         */
        public Builder clusterLabels(Output<Map<String,String>> clusterLabels) {
            $.clusterLabels = clusterLabels;
            return this;
        }

        /**
         * @param clusterLabels Required. The cluster labels. Cluster must have all labels to match.
         * 
         * @return builder
         * 
         */
        public Builder clusterLabels(Map<String,String> clusterLabels) {
            return clusterLabels(Output.of(clusterLabels));
        }

        /**
         * @param zone The zone where workflow process executes. This parameter does not affect the selection of the cluster. If unspecified, the zone of the first cluster matching the selector is used.
         * 
         * @return builder
         * 
         */
        public Builder zone(@Nullable Output<String> zone) {
            $.zone = zone;
            return this;
        }

        /**
         * @param zone The zone where workflow process executes. This parameter does not affect the selection of the cluster. If unspecified, the zone of the first cluster matching the selector is used.
         * 
         * @return builder
         * 
         */
        public Builder zone(String zone) {
            return zone(Output.of(zone));
        }

        public WorkflowTemplatePlacementClusterSelectorArgs build() {
            $.clusterLabels = Objects.requireNonNull($.clusterLabels, "expected parameter 'clusterLabels' to be non-null");
            return $;
        }
    }

}
