// *** 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.BareMetalClusterLoadBalancerBgpLbConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.BareMetalClusterLoadBalancerManualLbConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.BareMetalClusterLoadBalancerMetalLbConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.BareMetalClusterLoadBalancerPortConfigArgs;
import com.pulumi.gcp.gkeonprem.inputs.BareMetalClusterLoadBalancerVipConfigArgs;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final BareMetalClusterLoadBalancerArgs Empty = new BareMetalClusterLoadBalancerArgs();

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

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

    /**
     * A nested object resource
     * Structure is documented below.
     * 
     */
    @Import(name="manualLbConfig")
    private @Nullable Output<BareMetalClusterLoadBalancerManualLbConfigArgs> manualLbConfig;

    /**
     * @return A nested object resource
     * Structure is documented below.
     * 
     */
    public Optional<Output<BareMetalClusterLoadBalancerManualLbConfigArgs>> manualLbConfig() {
        return Optional.ofNullable(this.manualLbConfig);
    }

    /**
     * A nested object resource
     * Structure is documented below.
     * 
     */
    @Import(name="metalLbConfig")
    private @Nullable Output<BareMetalClusterLoadBalancerMetalLbConfigArgs> metalLbConfig;

    /**
     * @return A nested object resource
     * Structure is documented below.
     * 
     */
    public Optional<Output<BareMetalClusterLoadBalancerMetalLbConfigArgs>> metalLbConfig() {
        return Optional.ofNullable(this.metalLbConfig);
    }

    /**
     * Specifies the load balancer ports.
     * Structure is documented below.
     * 
     */
    @Import(name="portConfig", required=true)
    private Output<BareMetalClusterLoadBalancerPortConfigArgs> portConfig;

    /**
     * @return Specifies the load balancer ports.
     * Structure is documented below.
     * 
     */
    public Output<BareMetalClusterLoadBalancerPortConfigArgs> portConfig() {
        return this.portConfig;
    }

    /**
     * Specified the Bare Metal Load Balancer Config
     * Structure is documented below.
     * 
     */
    @Import(name="vipConfig", required=true)
    private Output<BareMetalClusterLoadBalancerVipConfigArgs> vipConfig;

    /**
     * @return Specified the Bare Metal Load Balancer Config
     * Structure is documented below.
     * 
     */
    public Output<BareMetalClusterLoadBalancerVipConfigArgs> vipConfig() {
        return this.vipConfig;
    }

    private BareMetalClusterLoadBalancerArgs() {}

    private BareMetalClusterLoadBalancerArgs(BareMetalClusterLoadBalancerArgs $) {
        this.bgpLbConfig = $.bgpLbConfig;
        this.manualLbConfig = $.manualLbConfig;
        this.metalLbConfig = $.metalLbConfig;
        this.portConfig = $.portConfig;
        this.vipConfig = $.vipConfig;
    }

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

    public static final class Builder {
        private BareMetalClusterLoadBalancerArgs $;

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

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

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

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

        /**
         * @param manualLbConfig A nested object resource
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder manualLbConfig(@Nullable Output<BareMetalClusterLoadBalancerManualLbConfigArgs> manualLbConfig) {
            $.manualLbConfig = manualLbConfig;
            return this;
        }

        /**
         * @param manualLbConfig A nested object resource
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder manualLbConfig(BareMetalClusterLoadBalancerManualLbConfigArgs manualLbConfig) {
            return manualLbConfig(Output.of(manualLbConfig));
        }

        /**
         * @param metalLbConfig A nested object resource
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder metalLbConfig(@Nullable Output<BareMetalClusterLoadBalancerMetalLbConfigArgs> metalLbConfig) {
            $.metalLbConfig = metalLbConfig;
            return this;
        }

        /**
         * @param metalLbConfig A nested object resource
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder metalLbConfig(BareMetalClusterLoadBalancerMetalLbConfigArgs metalLbConfig) {
            return metalLbConfig(Output.of(metalLbConfig));
        }

        /**
         * @param portConfig Specifies the load balancer ports.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder portConfig(Output<BareMetalClusterLoadBalancerPortConfigArgs> portConfig) {
            $.portConfig = portConfig;
            return this;
        }

        /**
         * @param portConfig Specifies the load balancer ports.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder portConfig(BareMetalClusterLoadBalancerPortConfigArgs portConfig) {
            return portConfig(Output.of(portConfig));
        }

        /**
         * @param vipConfig Specified the Bare Metal Load Balancer Config
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder vipConfig(Output<BareMetalClusterLoadBalancerVipConfigArgs> vipConfig) {
            $.vipConfig = vipConfig;
            return this;
        }

        /**
         * @param vipConfig Specified the Bare Metal Load Balancer Config
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder vipConfig(BareMetalClusterLoadBalancerVipConfigArgs vipConfig) {
            return vipConfig(Output.of(vipConfig));
        }

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

}
