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

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


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

    public static final EnvironmentState Empty = new EnvironmentState();

    /**
     * The default, publicly resolvable, name of this Container App Environment.
     * 
     */
    @Import(name="defaultDomain")
    private @Nullable Output<String> defaultDomain;

    /**
     * @return The default, publicly resolvable, name of this Container App Environment.
     * 
     */
    public Optional<Output<String>> defaultDomain() {
        return Optional.ofNullable(this.defaultDomain);
    }

    /**
     * The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.
     * 
     */
    @Import(name="dockerBridgeCidr")
    private @Nullable Output<String> dockerBridgeCidr;

    /**
     * @return The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.
     * 
     */
    public Optional<Output<String>> dockerBridgeCidr() {
        return Optional.ofNullable(this.dockerBridgeCidr);
    }

    /**
     * The existing Subnet to use for the Container Apps Control Plane. Changing this forces a new resource to be created.
     * 
     * &gt; **NOTE:** The Subnet must have a `/21` or larger address space.
     * 
     */
    @Import(name="infrastructureSubnetId")
    private @Nullable Output<String> infrastructureSubnetId;

    /**
     * @return The existing Subnet to use for the Container Apps Control Plane. Changing this forces a new resource to be created.
     * 
     * &gt; **NOTE:** The Subnet must have a `/21` or larger address space.
     * 
     */
    public Optional<Output<String>> infrastructureSubnetId() {
        return Optional.ofNullable(this.infrastructureSubnetId);
    }

    /**
     * Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. Changing this forces a new resource to be created.
     * 
     * &gt; **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.
     * 
     */
    @Import(name="internalLoadBalancerEnabled")
    private @Nullable Output<Boolean> internalLoadBalancerEnabled;

    /**
     * @return Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. Changing this forces a new resource to be created.
     * 
     * &gt; **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.
     * 
     */
    public Optional<Output<Boolean>> internalLoadBalancerEnabled() {
        return Optional.ofNullable(this.internalLoadBalancerEnabled);
    }

    /**
     * Specifies the supported Azure location where the Container App Environment is to exist. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

    /**
     * @return Specifies the supported Azure location where the Container App Environment is to exist. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="logAnalyticsWorkspaceId")
    private @Nullable Output<String> logAnalyticsWorkspaceId;

    /**
     * @return The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> logAnalyticsWorkspaceId() {
        return Optional.ofNullable(this.logAnalyticsWorkspaceId);
    }

    /**
     * The name of the Container Apps Managed Environment. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The name of the Container Apps Managed Environment. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.
     * 
     */
    @Import(name="platformReservedCidr")
    private @Nullable Output<String> platformReservedCidr;

    /**
     * @return The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.
     * 
     */
    public Optional<Output<String>> platformReservedCidr() {
        return Optional.ofNullable(this.platformReservedCidr);
    }

    /**
     * The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.
     * 
     */
    @Import(name="platformReservedDnsIpAddress")
    private @Nullable Output<String> platformReservedDnsIpAddress;

    /**
     * @return The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.
     * 
     */
    public Optional<Output<String>> platformReservedDnsIpAddress() {
        return Optional.ofNullable(this.platformReservedDnsIpAddress);
    }

    /**
     * The name of the resource group in which the Container App Environment is to be created. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="resourceGroupName")
    private @Nullable Output<String> resourceGroupName;

    /**
     * @return The name of the resource group in which the Container App Environment is to be created. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> resourceGroupName() {
        return Optional.ofNullable(this.resourceGroupName);
    }

    /**
     * The Static IP address of the Environment.
     * 
     */
    @Import(name="staticIpAddress")
    private @Nullable Output<String> staticIpAddress;

    /**
     * @return The Static IP address of the Environment.
     * 
     */
    public Optional<Output<String>> staticIpAddress() {
        return Optional.ofNullable(this.staticIpAddress);
    }

    /**
     * A mapping of tags to assign to the resource.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A mapping of tags to assign to the resource.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    private EnvironmentState() {}

    private EnvironmentState(EnvironmentState $) {
        this.defaultDomain = $.defaultDomain;
        this.dockerBridgeCidr = $.dockerBridgeCidr;
        this.infrastructureSubnetId = $.infrastructureSubnetId;
        this.internalLoadBalancerEnabled = $.internalLoadBalancerEnabled;
        this.location = $.location;
        this.logAnalyticsWorkspaceId = $.logAnalyticsWorkspaceId;
        this.name = $.name;
        this.platformReservedCidr = $.platformReservedCidr;
        this.platformReservedDnsIpAddress = $.platformReservedDnsIpAddress;
        this.resourceGroupName = $.resourceGroupName;
        this.staticIpAddress = $.staticIpAddress;
        this.tags = $.tags;
    }

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

    public static final class Builder {
        private EnvironmentState $;

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

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

        /**
         * @param defaultDomain The default, publicly resolvable, name of this Container App Environment.
         * 
         * @return builder
         * 
         */
        public Builder defaultDomain(@Nullable Output<String> defaultDomain) {
            $.defaultDomain = defaultDomain;
            return this;
        }

        /**
         * @param defaultDomain The default, publicly resolvable, name of this Container App Environment.
         * 
         * @return builder
         * 
         */
        public Builder defaultDomain(String defaultDomain) {
            return defaultDomain(Output.of(defaultDomain));
        }

        /**
         * @param dockerBridgeCidr The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.
         * 
         * @return builder
         * 
         */
        public Builder dockerBridgeCidr(@Nullable Output<String> dockerBridgeCidr) {
            $.dockerBridgeCidr = dockerBridgeCidr;
            return this;
        }

        /**
         * @param dockerBridgeCidr The network addressing in which the Container Apps in this Container App Environment will reside in CIDR notation.
         * 
         * @return builder
         * 
         */
        public Builder dockerBridgeCidr(String dockerBridgeCidr) {
            return dockerBridgeCidr(Output.of(dockerBridgeCidr));
        }

        /**
         * @param infrastructureSubnetId The existing Subnet to use for the Container Apps Control Plane. Changing this forces a new resource to be created.
         * 
         * &gt; **NOTE:** The Subnet must have a `/21` or larger address space.
         * 
         * @return builder
         * 
         */
        public Builder infrastructureSubnetId(@Nullable Output<String> infrastructureSubnetId) {
            $.infrastructureSubnetId = infrastructureSubnetId;
            return this;
        }

        /**
         * @param infrastructureSubnetId The existing Subnet to use for the Container Apps Control Plane. Changing this forces a new resource to be created.
         * 
         * &gt; **NOTE:** The Subnet must have a `/21` or larger address space.
         * 
         * @return builder
         * 
         */
        public Builder infrastructureSubnetId(String infrastructureSubnetId) {
            return infrastructureSubnetId(Output.of(infrastructureSubnetId));
        }

        /**
         * @param internalLoadBalancerEnabled Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. Changing this forces a new resource to be created.
         * 
         * &gt; **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.
         * 
         * @return builder
         * 
         */
        public Builder internalLoadBalancerEnabled(@Nullable Output<Boolean> internalLoadBalancerEnabled) {
            $.internalLoadBalancerEnabled = internalLoadBalancerEnabled;
            return this;
        }

        /**
         * @param internalLoadBalancerEnabled Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. Changing this forces a new resource to be created.
         * 
         * &gt; **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified.
         * 
         * @return builder
         * 
         */
        public Builder internalLoadBalancerEnabled(Boolean internalLoadBalancerEnabled) {
            return internalLoadBalancerEnabled(Output.of(internalLoadBalancerEnabled));
        }

        /**
         * @param location Specifies the supported Azure location where the Container App Environment is to exist. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location Specifies the supported Azure location where the Container App Environment is to exist. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param logAnalyticsWorkspaceId The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder logAnalyticsWorkspaceId(@Nullable Output<String> logAnalyticsWorkspaceId) {
            $.logAnalyticsWorkspaceId = logAnalyticsWorkspaceId;
            return this;
        }

        /**
         * @param logAnalyticsWorkspaceId The ID for the Log Analytics Workspace to link this Container Apps Managed Environment to. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder logAnalyticsWorkspaceId(String logAnalyticsWorkspaceId) {
            return logAnalyticsWorkspaceId(Output.of(logAnalyticsWorkspaceId));
        }

        /**
         * @param name The name of the Container Apps Managed Environment. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name of the Container Apps Managed Environment. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param platformReservedCidr The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.
         * 
         * @return builder
         * 
         */
        public Builder platformReservedCidr(@Nullable Output<String> platformReservedCidr) {
            $.platformReservedCidr = platformReservedCidr;
            return this;
        }

        /**
         * @param platformReservedCidr The IP range, in CIDR notation, that is reserved for environment infrastructure IP addresses.
         * 
         * @return builder
         * 
         */
        public Builder platformReservedCidr(String platformReservedCidr) {
            return platformReservedCidr(Output.of(platformReservedCidr));
        }

        /**
         * @param platformReservedDnsIpAddress The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.
         * 
         * @return builder
         * 
         */
        public Builder platformReservedDnsIpAddress(@Nullable Output<String> platformReservedDnsIpAddress) {
            $.platformReservedDnsIpAddress = platformReservedDnsIpAddress;
            return this;
        }

        /**
         * @param platformReservedDnsIpAddress The IP address from the IP range defined by `platform_reserved_cidr` that is reserved for the internal DNS server.
         * 
         * @return builder
         * 
         */
        public Builder platformReservedDnsIpAddress(String platformReservedDnsIpAddress) {
            return platformReservedDnsIpAddress(Output.of(platformReservedDnsIpAddress));
        }

        /**
         * @param resourceGroupName The name of the resource group in which the Container App Environment is to be created. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(@Nullable Output<String> resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param resourceGroupName The name of the resource group in which the Container App Environment is to be created. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param staticIpAddress The Static IP address of the Environment.
         * 
         * @return builder
         * 
         */
        public Builder staticIpAddress(@Nullable Output<String> staticIpAddress) {
            $.staticIpAddress = staticIpAddress;
            return this;
        }

        /**
         * @param staticIpAddress The Static IP address of the Environment.
         * 
         * @return builder
         * 
         */
        public Builder staticIpAddress(String staticIpAddress) {
            return staticIpAddress(Output.of(staticIpAddress));
        }

        /**
         * @param tags A mapping of tags to assign to the resource.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags to assign to the resource.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        public EnvironmentState build() {
            return $;
        }
    }

}
