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

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


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

    public static final KubernetesClusterNetworkProfileLoadBalancerProfileArgs Empty = new KubernetesClusterNetworkProfileLoadBalancerProfileArgs();

    /**
     * The outcome (resource IDs) of the specified arguments.
     * 
     */
    @Import(name="effectiveOutboundIps")
    private @Nullable Output<List<String>> effectiveOutboundIps;

    /**
     * @return The outcome (resource IDs) of the specified arguments.
     * 
     */
    public Optional<Output<List<String>>> effectiveOutboundIps() {
        return Optional.ofNullable(this.effectiveOutboundIps);
    }

    /**
     * Desired outbound flow idle timeout in minutes for the cluster load balancer. Must be between `4` and `120` inclusive. Defaults to `30`.
     * 
     */
    @Import(name="idleTimeoutInMinutes")
    private @Nullable Output<Integer> idleTimeoutInMinutes;

    /**
     * @return Desired outbound flow idle timeout in minutes for the cluster load balancer. Must be between `4` and `120` inclusive. Defaults to `30`.
     * 
     */
    public Optional<Output<Integer>> idleTimeoutInMinutes() {
        return Optional.ofNullable(this.idleTimeoutInMinutes);
    }

    /**
     * Count of desired managed outbound IPs for the cluster load balancer. Must be between `1` and `100` inclusive.
     * 
     */
    @Import(name="managedOutboundIpCount")
    private @Nullable Output<Integer> managedOutboundIpCount;

    /**
     * @return Count of desired managed outbound IPs for the cluster load balancer. Must be between `1` and `100` inclusive.
     * 
     */
    public Optional<Output<Integer>> managedOutboundIpCount() {
        return Optional.ofNullable(this.managedOutboundIpCount);
    }

    /**
     * The desired number of IPv6 outbound IPs created and managed by Azure for the cluster load balancer. Must be in the range of 1 to 100 (inclusive). The default value is 0 for single-stack and 1 for dual-stack.
     * 
     * &gt; **Note:** `managed_outbound_ipv6_count` requires dual-stack networking. To enable dual-stack networking the Preview Feature `Microsoft.ContainerService/AKS-EnableDualStack` needs to be enabled and the Resource Provider re-registered, see [the documentation](https://docs.microsoft.com/azure/aks/configure-kubenet-dual-stack?tabs=azure-cli%2Ckubectl#register-the-aks-enabledualstack-preview-feature) for more information.
     * 
     */
    @Import(name="managedOutboundIpv6Count")
    private @Nullable Output<Integer> managedOutboundIpv6Count;

    /**
     * @return The desired number of IPv6 outbound IPs created and managed by Azure for the cluster load balancer. Must be in the range of 1 to 100 (inclusive). The default value is 0 for single-stack and 1 for dual-stack.
     * 
     * &gt; **Note:** `managed_outbound_ipv6_count` requires dual-stack networking. To enable dual-stack networking the Preview Feature `Microsoft.ContainerService/AKS-EnableDualStack` needs to be enabled and the Resource Provider re-registered, see [the documentation](https://docs.microsoft.com/azure/aks/configure-kubenet-dual-stack?tabs=azure-cli%2Ckubectl#register-the-aks-enabledualstack-preview-feature) for more information.
     * 
     */
    public Optional<Output<Integer>> managedOutboundIpv6Count() {
        return Optional.ofNullable(this.managedOutboundIpv6Count);
    }

    /**
     * The ID of the Public IP Addresses which should be used for outbound communication for the cluster load balancer.
     * 
     * &gt; **Note:** Set `outbound_ip_address_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_address_ids` will revert the load balancing for the cluster back to a managed one.
     * 
     */
    @Import(name="outboundIpAddressIds")
    private @Nullable Output<List<String>> outboundIpAddressIds;

    /**
     * @return The ID of the Public IP Addresses which should be used for outbound communication for the cluster load balancer.
     * 
     * &gt; **Note:** Set `outbound_ip_address_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_address_ids` will revert the load balancing for the cluster back to a managed one.
     * 
     */
    public Optional<Output<List<String>>> outboundIpAddressIds() {
        return Optional.ofNullable(this.outboundIpAddressIds);
    }

    /**
     * The ID of the outbound Public IP Address Prefixes which should be used for the cluster load balancer.
     * 
     * &gt; **Note:** Set `outbound_ip_prefix_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_prefix_ids` will revert the load balancing for the cluster back to a managed one.
     * 
     */
    @Import(name="outboundIpPrefixIds")
    private @Nullable Output<List<String>> outboundIpPrefixIds;

    /**
     * @return The ID of the outbound Public IP Address Prefixes which should be used for the cluster load balancer.
     * 
     * &gt; **Note:** Set `outbound_ip_prefix_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_prefix_ids` will revert the load balancing for the cluster back to a managed one.
     * 
     */
    public Optional<Output<List<String>>> outboundIpPrefixIds() {
        return Optional.ofNullable(this.outboundIpPrefixIds);
    }

    /**
     * Number of desired SNAT port for each VM in the clusters load balancer. Must be between `0` and `64000` inclusive. Defaults to `0`.
     * 
     */
    @Import(name="outboundPortsAllocated")
    private @Nullable Output<Integer> outboundPortsAllocated;

    /**
     * @return Number of desired SNAT port for each VM in the clusters load balancer. Must be between `0` and `64000` inclusive. Defaults to `0`.
     * 
     */
    public Optional<Output<Integer>> outboundPortsAllocated() {
        return Optional.ofNullable(this.outboundPortsAllocated);
    }

    private KubernetesClusterNetworkProfileLoadBalancerProfileArgs() {}

    private KubernetesClusterNetworkProfileLoadBalancerProfileArgs(KubernetesClusterNetworkProfileLoadBalancerProfileArgs $) {
        this.effectiveOutboundIps = $.effectiveOutboundIps;
        this.idleTimeoutInMinutes = $.idleTimeoutInMinutes;
        this.managedOutboundIpCount = $.managedOutboundIpCount;
        this.managedOutboundIpv6Count = $.managedOutboundIpv6Count;
        this.outboundIpAddressIds = $.outboundIpAddressIds;
        this.outboundIpPrefixIds = $.outboundIpPrefixIds;
        this.outboundPortsAllocated = $.outboundPortsAllocated;
    }

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

    public static final class Builder {
        private KubernetesClusterNetworkProfileLoadBalancerProfileArgs $;

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

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

        /**
         * @param effectiveOutboundIps The outcome (resource IDs) of the specified arguments.
         * 
         * @return builder
         * 
         */
        public Builder effectiveOutboundIps(@Nullable Output<List<String>> effectiveOutboundIps) {
            $.effectiveOutboundIps = effectiveOutboundIps;
            return this;
        }

        /**
         * @param effectiveOutboundIps The outcome (resource IDs) of the specified arguments.
         * 
         * @return builder
         * 
         */
        public Builder effectiveOutboundIps(List<String> effectiveOutboundIps) {
            return effectiveOutboundIps(Output.of(effectiveOutboundIps));
        }

        /**
         * @param effectiveOutboundIps The outcome (resource IDs) of the specified arguments.
         * 
         * @return builder
         * 
         */
        public Builder effectiveOutboundIps(String... effectiveOutboundIps) {
            return effectiveOutboundIps(List.of(effectiveOutboundIps));
        }

        /**
         * @param idleTimeoutInMinutes Desired outbound flow idle timeout in minutes for the cluster load balancer. Must be between `4` and `120` inclusive. Defaults to `30`.
         * 
         * @return builder
         * 
         */
        public Builder idleTimeoutInMinutes(@Nullable Output<Integer> idleTimeoutInMinutes) {
            $.idleTimeoutInMinutes = idleTimeoutInMinutes;
            return this;
        }

        /**
         * @param idleTimeoutInMinutes Desired outbound flow idle timeout in minutes for the cluster load balancer. Must be between `4` and `120` inclusive. Defaults to `30`.
         * 
         * @return builder
         * 
         */
        public Builder idleTimeoutInMinutes(Integer idleTimeoutInMinutes) {
            return idleTimeoutInMinutes(Output.of(idleTimeoutInMinutes));
        }

        /**
         * @param managedOutboundIpCount Count of desired managed outbound IPs for the cluster load balancer. Must be between `1` and `100` inclusive.
         * 
         * @return builder
         * 
         */
        public Builder managedOutboundIpCount(@Nullable Output<Integer> managedOutboundIpCount) {
            $.managedOutboundIpCount = managedOutboundIpCount;
            return this;
        }

        /**
         * @param managedOutboundIpCount Count of desired managed outbound IPs for the cluster load balancer. Must be between `1` and `100` inclusive.
         * 
         * @return builder
         * 
         */
        public Builder managedOutboundIpCount(Integer managedOutboundIpCount) {
            return managedOutboundIpCount(Output.of(managedOutboundIpCount));
        }

        /**
         * @param managedOutboundIpv6Count The desired number of IPv6 outbound IPs created and managed by Azure for the cluster load balancer. Must be in the range of 1 to 100 (inclusive). The default value is 0 for single-stack and 1 for dual-stack.
         * 
         * &gt; **Note:** `managed_outbound_ipv6_count` requires dual-stack networking. To enable dual-stack networking the Preview Feature `Microsoft.ContainerService/AKS-EnableDualStack` needs to be enabled and the Resource Provider re-registered, see [the documentation](https://docs.microsoft.com/azure/aks/configure-kubenet-dual-stack?tabs=azure-cli%2Ckubectl#register-the-aks-enabledualstack-preview-feature) for more information.
         * 
         * @return builder
         * 
         */
        public Builder managedOutboundIpv6Count(@Nullable Output<Integer> managedOutboundIpv6Count) {
            $.managedOutboundIpv6Count = managedOutboundIpv6Count;
            return this;
        }

        /**
         * @param managedOutboundIpv6Count The desired number of IPv6 outbound IPs created and managed by Azure for the cluster load balancer. Must be in the range of 1 to 100 (inclusive). The default value is 0 for single-stack and 1 for dual-stack.
         * 
         * &gt; **Note:** `managed_outbound_ipv6_count` requires dual-stack networking. To enable dual-stack networking the Preview Feature `Microsoft.ContainerService/AKS-EnableDualStack` needs to be enabled and the Resource Provider re-registered, see [the documentation](https://docs.microsoft.com/azure/aks/configure-kubenet-dual-stack?tabs=azure-cli%2Ckubectl#register-the-aks-enabledualstack-preview-feature) for more information.
         * 
         * @return builder
         * 
         */
        public Builder managedOutboundIpv6Count(Integer managedOutboundIpv6Count) {
            return managedOutboundIpv6Count(Output.of(managedOutboundIpv6Count));
        }

        /**
         * @param outboundIpAddressIds The ID of the Public IP Addresses which should be used for outbound communication for the cluster load balancer.
         * 
         * &gt; **Note:** Set `outbound_ip_address_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_address_ids` will revert the load balancing for the cluster back to a managed one.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressIds(@Nullable Output<List<String>> outboundIpAddressIds) {
            $.outboundIpAddressIds = outboundIpAddressIds;
            return this;
        }

        /**
         * @param outboundIpAddressIds The ID of the Public IP Addresses which should be used for outbound communication for the cluster load balancer.
         * 
         * &gt; **Note:** Set `outbound_ip_address_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_address_ids` will revert the load balancing for the cluster back to a managed one.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressIds(List<String> outboundIpAddressIds) {
            return outboundIpAddressIds(Output.of(outboundIpAddressIds));
        }

        /**
         * @param outboundIpAddressIds The ID of the Public IP Addresses which should be used for outbound communication for the cluster load balancer.
         * 
         * &gt; **Note:** Set `outbound_ip_address_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_address_ids` will revert the load balancing for the cluster back to a managed one.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressIds(String... outboundIpAddressIds) {
            return outboundIpAddressIds(List.of(outboundIpAddressIds));
        }

        /**
         * @param outboundIpPrefixIds The ID of the outbound Public IP Address Prefixes which should be used for the cluster load balancer.
         * 
         * &gt; **Note:** Set `outbound_ip_prefix_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_prefix_ids` will revert the load balancing for the cluster back to a managed one.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpPrefixIds(@Nullable Output<List<String>> outboundIpPrefixIds) {
            $.outboundIpPrefixIds = outboundIpPrefixIds;
            return this;
        }

        /**
         * @param outboundIpPrefixIds The ID of the outbound Public IP Address Prefixes which should be used for the cluster load balancer.
         * 
         * &gt; **Note:** Set `outbound_ip_prefix_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_prefix_ids` will revert the load balancing for the cluster back to a managed one.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpPrefixIds(List<String> outboundIpPrefixIds) {
            return outboundIpPrefixIds(Output.of(outboundIpPrefixIds));
        }

        /**
         * @param outboundIpPrefixIds The ID of the outbound Public IP Address Prefixes which should be used for the cluster load balancer.
         * 
         * &gt; **Note:** Set `outbound_ip_prefix_ids` to an empty slice `[]` in order to unlink it from the cluster. Unlinking a `outbound_ip_prefix_ids` will revert the load balancing for the cluster back to a managed one.
         * 
         * @return builder
         * 
         */
        public Builder outboundIpPrefixIds(String... outboundIpPrefixIds) {
            return outboundIpPrefixIds(List.of(outboundIpPrefixIds));
        }

        /**
         * @param outboundPortsAllocated Number of desired SNAT port for each VM in the clusters load balancer. Must be between `0` and `64000` inclusive. Defaults to `0`.
         * 
         * @return builder
         * 
         */
        public Builder outboundPortsAllocated(@Nullable Output<Integer> outboundPortsAllocated) {
            $.outboundPortsAllocated = outboundPortsAllocated;
            return this;
        }

        /**
         * @param outboundPortsAllocated Number of desired SNAT port for each VM in the clusters load balancer. Must be between `0` and `64000` inclusive. Defaults to `0`.
         * 
         * @return builder
         * 
         */
        public Builder outboundPortsAllocated(Integer outboundPortsAllocated) {
            return outboundPortsAllocated(Output.of(outboundPortsAllocated));
        }

        public KubernetesClusterNetworkProfileLoadBalancerProfileArgs build() {
            return $;
        }
    }

}
