// *** 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.azure.containerservice.inputs.KubernetesClusterIngressApplicationGatewayIngressApplicationGatewayIdentityArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final KubernetesClusterIngressApplicationGatewayArgs Empty = new KubernetesClusterIngressApplicationGatewayArgs();

    /**
     * The ID of the Application Gateway associated with the ingress controller deployed to this Kubernetes Cluster.
     * 
     */
    @Import(name="effectiveGatewayId")
    private @Nullable Output<String> effectiveGatewayId;

    /**
     * @return The ID of the Application Gateway associated with the ingress controller deployed to this Kubernetes Cluster.
     * 
     */
    public Optional<Output<String>> effectiveGatewayId() {
        return Optional.ofNullable(this.effectiveGatewayId);
    }

    /**
     * The ID of the Application Gateway to integrate with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-existing) page for further details.
     * 
     */
    @Import(name="gatewayId")
    private @Nullable Output<String> gatewayId;

    /**
     * @return The ID of the Application Gateway to integrate with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-existing) page for further details.
     * 
     */
    public Optional<Output<String>> gatewayId() {
        return Optional.ofNullable(this.gatewayId);
    }

    /**
     * The name of the Application Gateway to be used or created in the Nodepool Resource Group, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
     * 
     */
    @Import(name="gatewayName")
    private @Nullable Output<String> gatewayName;

    /**
     * @return The name of the Application Gateway to be used or created in the Nodepool Resource Group, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
     * 
     */
    public Optional<Output<String>> gatewayName() {
        return Optional.ofNullable(this.gatewayName);
    }

    /**
     * An `ingress_application_gateway_identity` block is exported. The exported attributes are defined below.
     * 
     */
    @Import(name="ingressApplicationGatewayIdentities")
    private @Nullable Output<List<KubernetesClusterIngressApplicationGatewayIngressApplicationGatewayIdentityArgs>> ingressApplicationGatewayIdentities;

    /**
     * @return An `ingress_application_gateway_identity` block is exported. The exported attributes are defined below.
     * 
     */
    public Optional<Output<List<KubernetesClusterIngressApplicationGatewayIngressApplicationGatewayIdentityArgs>>> ingressApplicationGatewayIdentities() {
        return Optional.ofNullable(this.ingressApplicationGatewayIdentities);
    }

    /**
     * The subnet CIDR to be used to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
     * 
     */
    @Import(name="subnetCidr")
    private @Nullable Output<String> subnetCidr;

    /**
     * @return The subnet CIDR to be used to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
     * 
     */
    public Optional<Output<String>> subnetCidr() {
        return Optional.ofNullable(this.subnetCidr);
    }

    /**
     * The ID of the subnet on which to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
     * 
     * &gt; **Note:** Exactly one of `gateway_id`, `subnet_id` or `subnet_cidr` must be specified.
     * 
     * &gt; **Note:** If specifying `ingress_application_gateway` in conjunction with `only_critical_addons_enabled`, the AGIC pod will fail to start. A separate `azure.containerservice.KubernetesClusterNodePool` is required to run the AGIC pod successfully. This is because AGIC is classed as a &#34;non-critical addon&#34;.
     * 
     */
    @Import(name="subnetId")
    private @Nullable Output<String> subnetId;

    /**
     * @return The ID of the subnet on which to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
     * 
     * &gt; **Note:** Exactly one of `gateway_id`, `subnet_id` or `subnet_cidr` must be specified.
     * 
     * &gt; **Note:** If specifying `ingress_application_gateway` in conjunction with `only_critical_addons_enabled`, the AGIC pod will fail to start. A separate `azure.containerservice.KubernetesClusterNodePool` is required to run the AGIC pod successfully. This is because AGIC is classed as a &#34;non-critical addon&#34;.
     * 
     */
    public Optional<Output<String>> subnetId() {
        return Optional.ofNullable(this.subnetId);
    }

    private KubernetesClusterIngressApplicationGatewayArgs() {}

    private KubernetesClusterIngressApplicationGatewayArgs(KubernetesClusterIngressApplicationGatewayArgs $) {
        this.effectiveGatewayId = $.effectiveGatewayId;
        this.gatewayId = $.gatewayId;
        this.gatewayName = $.gatewayName;
        this.ingressApplicationGatewayIdentities = $.ingressApplicationGatewayIdentities;
        this.subnetCidr = $.subnetCidr;
        this.subnetId = $.subnetId;
    }

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

    public static final class Builder {
        private KubernetesClusterIngressApplicationGatewayArgs $;

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

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

        /**
         * @param effectiveGatewayId The ID of the Application Gateway associated with the ingress controller deployed to this Kubernetes Cluster.
         * 
         * @return builder
         * 
         */
        public Builder effectiveGatewayId(@Nullable Output<String> effectiveGatewayId) {
            $.effectiveGatewayId = effectiveGatewayId;
            return this;
        }

        /**
         * @param effectiveGatewayId The ID of the Application Gateway associated with the ingress controller deployed to this Kubernetes Cluster.
         * 
         * @return builder
         * 
         */
        public Builder effectiveGatewayId(String effectiveGatewayId) {
            return effectiveGatewayId(Output.of(effectiveGatewayId));
        }

        /**
         * @param gatewayId The ID of the Application Gateway to integrate with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-existing) page for further details.
         * 
         * @return builder
         * 
         */
        public Builder gatewayId(@Nullable Output<String> gatewayId) {
            $.gatewayId = gatewayId;
            return this;
        }

        /**
         * @param gatewayId The ID of the Application Gateway to integrate with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-existing) page for further details.
         * 
         * @return builder
         * 
         */
        public Builder gatewayId(String gatewayId) {
            return gatewayId(Output.of(gatewayId));
        }

        /**
         * @param gatewayName The name of the Application Gateway to be used or created in the Nodepool Resource Group, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
         * 
         * @return builder
         * 
         */
        public Builder gatewayName(@Nullable Output<String> gatewayName) {
            $.gatewayName = gatewayName;
            return this;
        }

        /**
         * @param gatewayName The name of the Application Gateway to be used or created in the Nodepool Resource Group, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
         * 
         * @return builder
         * 
         */
        public Builder gatewayName(String gatewayName) {
            return gatewayName(Output.of(gatewayName));
        }

        /**
         * @param ingressApplicationGatewayIdentities An `ingress_application_gateway_identity` block is exported. The exported attributes are defined below.
         * 
         * @return builder
         * 
         */
        public Builder ingressApplicationGatewayIdentities(@Nullable Output<List<KubernetesClusterIngressApplicationGatewayIngressApplicationGatewayIdentityArgs>> ingressApplicationGatewayIdentities) {
            $.ingressApplicationGatewayIdentities = ingressApplicationGatewayIdentities;
            return this;
        }

        /**
         * @param ingressApplicationGatewayIdentities An `ingress_application_gateway_identity` block is exported. The exported attributes are defined below.
         * 
         * @return builder
         * 
         */
        public Builder ingressApplicationGatewayIdentities(List<KubernetesClusterIngressApplicationGatewayIngressApplicationGatewayIdentityArgs> ingressApplicationGatewayIdentities) {
            return ingressApplicationGatewayIdentities(Output.of(ingressApplicationGatewayIdentities));
        }

        /**
         * @param ingressApplicationGatewayIdentities An `ingress_application_gateway_identity` block is exported. The exported attributes are defined below.
         * 
         * @return builder
         * 
         */
        public Builder ingressApplicationGatewayIdentities(KubernetesClusterIngressApplicationGatewayIngressApplicationGatewayIdentityArgs... ingressApplicationGatewayIdentities) {
            return ingressApplicationGatewayIdentities(List.of(ingressApplicationGatewayIdentities));
        }

        /**
         * @param subnetCidr The subnet CIDR to be used to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
         * 
         * @return builder
         * 
         */
        public Builder subnetCidr(@Nullable Output<String> subnetCidr) {
            $.subnetCidr = subnetCidr;
            return this;
        }

        /**
         * @param subnetCidr The subnet CIDR to be used to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
         * 
         * @return builder
         * 
         */
        public Builder subnetCidr(String subnetCidr) {
            return subnetCidr(Output.of(subnetCidr));
        }

        /**
         * @param subnetId The ID of the subnet on which to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
         * 
         * &gt; **Note:** Exactly one of `gateway_id`, `subnet_id` or `subnet_cidr` must be specified.
         * 
         * &gt; **Note:** If specifying `ingress_application_gateway` in conjunction with `only_critical_addons_enabled`, the AGIC pod will fail to start. A separate `azure.containerservice.KubernetesClusterNodePool` is required to run the AGIC pod successfully. This is because AGIC is classed as a &#34;non-critical addon&#34;.
         * 
         * @return builder
         * 
         */
        public Builder subnetId(@Nullable Output<String> subnetId) {
            $.subnetId = subnetId;
            return this;
        }

        /**
         * @param subnetId The ID of the subnet on which to create an Application Gateway, which in turn will be integrated with the ingress controller of this Kubernetes Cluster. See [this](https://docs.microsoft.com/azure/application-gateway/tutorial-ingress-controller-add-on-new) page for further details.
         * 
         * &gt; **Note:** Exactly one of `gateway_id`, `subnet_id` or `subnet_cidr` must be specified.
         * 
         * &gt; **Note:** If specifying `ingress_application_gateway` in conjunction with `only_critical_addons_enabled`, the AGIC pod will fail to start. A separate `azure.containerservice.KubernetesClusterNodePool` is required to run the AGIC pod successfully. This is because AGIC is classed as a &#34;non-critical addon&#34;.
         * 
         * @return builder
         * 
         */
        public Builder subnetId(String subnetId) {
            return subnetId(Output.of(subnetId));
        }

        public KubernetesClusterIngressApplicationGatewayArgs build() {
            return $;
        }
    }

}
