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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.gkeonprem.inputs.VMwareClusterLoadBalancerF5ConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.VMwareClusterLoadBalancerManualLbConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.VMwareClusterLoadBalancerMetalLbConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.VMwareClusterLoadBalancerVipConfigArgs;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final VMwareClusterLoadBalancerArgs Empty = new VMwareClusterLoadBalancerArgs();

    /**
     * Configuration for F5 Big IP typed load balancers.
     * Structure is documented below.
     * 
     */
    @Import(name="f5Config")
    private @Nullable Output<VMwareClusterLoadBalancerF5ConfigArgs> f5Config;

    /**
     * @return Configuration for F5 Big IP typed load balancers.
     * Structure is documented below.
     * 
     */
    public Optional<Output<VMwareClusterLoadBalancerF5ConfigArgs>> f5Config() {
        return Optional.ofNullable(this.f5Config);
    }

    /**
     * Manually configured load balancers.
     * Structure is documented below.
     * 
     */
    @Import(name="manualLbConfig")
    private @Nullable Output<VMwareClusterLoadBalancerManualLbConfigArgs> manualLbConfig;

    /**
     * @return Manually configured load balancers.
     * Structure is documented below.
     * 
     */
    public Optional<Output<VMwareClusterLoadBalancerManualLbConfigArgs>> manualLbConfig() {
        return Optional.ofNullable(this.manualLbConfig);
    }

    /**
     * Configuration for MetalLB typed load balancers.
     * Structure is documented below.
     * 
     */
    @Import(name="metalLbConfig")
    private @Nullable Output<VMwareClusterLoadBalancerMetalLbConfigArgs> metalLbConfig;

    /**
     * @return Configuration for MetalLB typed load balancers.
     * Structure is documented below.
     * 
     */
    public Optional<Output<VMwareClusterLoadBalancerMetalLbConfigArgs>> metalLbConfig() {
        return Optional.ofNullable(this.metalLbConfig);
    }

    /**
     * The VIPs used by the load balancer.
     * Structure is documented below.
     * 
     */
    @Import(name="vipConfig")
    private @Nullable Output<VMwareClusterLoadBalancerVipConfigArgs> vipConfig;

    /**
     * @return The VIPs used by the load balancer.
     * Structure is documented below.
     * 
     */
    public Optional<Output<VMwareClusterLoadBalancerVipConfigArgs>> vipConfig() {
        return Optional.ofNullable(this.vipConfig);
    }

    private VMwareClusterLoadBalancerArgs() {}

    private VMwareClusterLoadBalancerArgs(VMwareClusterLoadBalancerArgs $) {
        this.f5Config = $.f5Config;
        this.manualLbConfig = $.manualLbConfig;
        this.metalLbConfig = $.metalLbConfig;
        this.vipConfig = $.vipConfig;
    }

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

    public static final class Builder {
        private VMwareClusterLoadBalancerArgs $;

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

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

        /**
         * @param f5Config Configuration for F5 Big IP typed load balancers.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder f5Config(@Nullable Output<VMwareClusterLoadBalancerF5ConfigArgs> f5Config) {
            $.f5Config = f5Config;
            return this;
        }

        /**
         * @param f5Config Configuration for F5 Big IP typed load balancers.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder f5Config(VMwareClusterLoadBalancerF5ConfigArgs f5Config) {
            return f5Config(Output.of(f5Config));
        }

        /**
         * @param manualLbConfig Manually configured load balancers.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder manualLbConfig(@Nullable Output<VMwareClusterLoadBalancerManualLbConfigArgs> manualLbConfig) {
            $.manualLbConfig = manualLbConfig;
            return this;
        }

        /**
         * @param manualLbConfig Manually configured load balancers.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder manualLbConfig(VMwareClusterLoadBalancerManualLbConfigArgs manualLbConfig) {
            return manualLbConfig(Output.of(manualLbConfig));
        }

        /**
         * @param metalLbConfig Configuration for MetalLB typed load balancers.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder metalLbConfig(@Nullable Output<VMwareClusterLoadBalancerMetalLbConfigArgs> metalLbConfig) {
            $.metalLbConfig = metalLbConfig;
            return this;
        }

        /**
         * @param metalLbConfig Configuration for MetalLB typed load balancers.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder metalLbConfig(VMwareClusterLoadBalancerMetalLbConfigArgs metalLbConfig) {
            return metalLbConfig(Output.of(metalLbConfig));
        }

        /**
         * @param vipConfig The VIPs used by the load balancer.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder vipConfig(@Nullable Output<VMwareClusterLoadBalancerVipConfigArgs> vipConfig) {
            $.vipConfig = vipConfig;
            return this;
        }

        /**
         * @param vipConfig The VIPs used by the load balancer.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder vipConfig(VMwareClusterLoadBalancerVipConfigArgs vipConfig) {
            return vipConfig(Output.of(vipConfig));
        }

        public VMwareClusterLoadBalancerArgs build() {
            return $;
        }
    }

}
