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

import com.pulumi.azure.appservice.inputs.AppServiceAuthSettingsArgs;
import com.pulumi.azure.appservice.inputs.AppServiceBackupArgs;
import com.pulumi.azure.appservice.inputs.AppServiceConnectionStringArgs;
import com.pulumi.azure.appservice.inputs.AppServiceIdentityArgs;
import com.pulumi.azure.appservice.inputs.AppServiceLogsArgs;
import com.pulumi.azure.appservice.inputs.AppServiceSiteConfigArgs;
import com.pulumi.azure.appservice.inputs.AppServiceSiteCredentialArgs;
import com.pulumi.azure.appservice.inputs.AppServiceSourceControlArgs;
import com.pulumi.azure.appservice.inputs.AppServiceStorageAccountArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final AppServiceState Empty = new AppServiceState();

    /**
     * The ID of the App Service Plan within which to create this App Service.
     * 
     */
    @Import(name="appServicePlanId")
    private @Nullable Output<String> appServicePlanId;

    /**
     * @return The ID of the App Service Plan within which to create this App Service.
     * 
     */
    public Optional<Output<String>> appServicePlanId() {
        return Optional.ofNullable(this.appServicePlanId);
    }

    /**
     * A key-value pair of App Settings.
     * 
     */
    @Import(name="appSettings")
    private @Nullable Output<Map<String,String>> appSettings;

    /**
     * @return A key-value pair of App Settings.
     * 
     */
    public Optional<Output<Map<String,String>>> appSettings() {
        return Optional.ofNullable(this.appSettings);
    }

    /**
     * A `auth_settings` block as defined below.
     * 
     */
    @Import(name="authSettings")
    private @Nullable Output<AppServiceAuthSettingsArgs> authSettings;

    /**
     * @return A `auth_settings` block as defined below.
     * 
     */
    public Optional<Output<AppServiceAuthSettingsArgs>> authSettings() {
        return Optional.ofNullable(this.authSettings);
    }

    /**
     * A `backup` block as defined below.
     * 
     */
    @Import(name="backup")
    private @Nullable Output<AppServiceBackupArgs> backup;

    /**
     * @return A `backup` block as defined below.
     * 
     */
    public Optional<Output<AppServiceBackupArgs>> backup() {
        return Optional.ofNullable(this.backup);
    }

    /**
     * Should the App Service send session affinity cookies, which route client requests in the same session to the same instance?
     * 
     */
    @Import(name="clientAffinityEnabled")
    private @Nullable Output<Boolean> clientAffinityEnabled;

    /**
     * @return Should the App Service send session affinity cookies, which route client requests in the same session to the same instance?
     * 
     */
    public Optional<Output<Boolean>> clientAffinityEnabled() {
        return Optional.ofNullable(this.clientAffinityEnabled);
    }

    /**
     * Does the App Service require client certificates for incoming requests? Defaults to `false`.
     * 
     */
    @Import(name="clientCertEnabled")
    private @Nullable Output<Boolean> clientCertEnabled;

    /**
     * @return Does the App Service require client certificates for incoming requests? Defaults to `false`.
     * 
     */
    public Optional<Output<Boolean>> clientCertEnabled() {
        return Optional.ofNullable(this.clientCertEnabled);
    }

    /**
     * Mode of client certificates for this App Service. Possible values are `Required`, `Optional` and `OptionalInteractiveUser`. If this parameter is set, `client_cert_enabled` must be set to `true`, otherwise this parameter is ignored.
     * 
     */
    @Import(name="clientCertMode")
    private @Nullable Output<String> clientCertMode;

    /**
     * @return Mode of client certificates for this App Service. Possible values are `Required`, `Optional` and `OptionalInteractiveUser`. If this parameter is set, `client_cert_enabled` must be set to `true`, otherwise this parameter is ignored.
     * 
     */
    public Optional<Output<String>> clientCertMode() {
        return Optional.ofNullable(this.clientCertMode);
    }

    /**
     * One or more `connection_string` blocks as defined below.
     * 
     */
    @Import(name="connectionStrings")
    private @Nullable Output<List<AppServiceConnectionStringArgs>> connectionStrings;

    /**
     * @return One or more `connection_string` blocks as defined below.
     * 
     */
    public Optional<Output<List<AppServiceConnectionStringArgs>>> connectionStrings() {
        return Optional.ofNullable(this.connectionStrings);
    }

    /**
     * An identifier used by App Service to perform domain ownership verification via DNS TXT record.
     * 
     */
    @Import(name="customDomainVerificationId")
    private @Nullable Output<String> customDomainVerificationId;

    /**
     * @return An identifier used by App Service to perform domain ownership verification via DNS TXT record.
     * 
     */
    public Optional<Output<String>> customDomainVerificationId() {
        return Optional.ofNullable(this.customDomainVerificationId);
    }

    /**
     * The Default Hostname associated with the App Service - such as `mysite.azurewebsites.net`
     * 
     */
    @Import(name="defaultSiteHostname")
    private @Nullable Output<String> defaultSiteHostname;

    /**
     * @return The Default Hostname associated with the App Service - such as `mysite.azurewebsites.net`
     * 
     */
    public Optional<Output<String>> defaultSiteHostname() {
        return Optional.ofNullable(this.defaultSiteHostname);
    }

    /**
     * Is the App Service Enabled? Defaults to `true`.
     * 
     */
    @Import(name="enabled")
    private @Nullable Output<Boolean> enabled;

    /**
     * @return Is the App Service Enabled? Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> enabled() {
        return Optional.ofNullable(this.enabled);
    }

    /**
     * Can the App Service only be accessed via HTTPS? Defaults to `false`.
     * 
     */
    @Import(name="httpsOnly")
    private @Nullable Output<Boolean> httpsOnly;

    /**
     * @return Can the App Service only be accessed via HTTPS? Defaults to `false`.
     * 
     */
    public Optional<Output<Boolean>> httpsOnly() {
        return Optional.ofNullable(this.httpsOnly);
    }

    /**
     * An `identity` block as defined below.
     * 
     */
    @Import(name="identity")
    private @Nullable Output<AppServiceIdentityArgs> identity;

    /**
     * @return An `identity` block as defined below.
     * 
     */
    public Optional<Output<AppServiceIdentityArgs>> identity() {
        return Optional.ofNullable(this.identity);
    }

    /**
     * The User Assigned Identity Id used for looking up KeyVault secrets. The identity must be assigned to the application. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
     * 
     */
    @Import(name="keyVaultReferenceIdentityId")
    private @Nullable Output<String> keyVaultReferenceIdentityId;

    /**
     * @return The User Assigned Identity Id used for looking up KeyVault secrets. The identity must be assigned to the application. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
     * 
     */
    public Optional<Output<String>> keyVaultReferenceIdentityId() {
        return Optional.ofNullable(this.keyVaultReferenceIdentityId);
    }

    /**
     * Specifies the supported Azure location where the resource exists. 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 resource exists. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * A `logs` block as defined below.
     * 
     */
    @Import(name="logs")
    private @Nullable Output<AppServiceLogsArgs> logs;

    /**
     * @return A `logs` block as defined below.
     * 
     */
    public Optional<Output<AppServiceLogsArgs>> logs() {
        return Optional.ofNullable(this.logs);
    }

    /**
     * Specifies the name of the App Service. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Specifies the name of the App Service. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`
     * 
     */
    @Import(name="outboundIpAddressLists")
    private @Nullable Output<List<String>> outboundIpAddressLists;

    /**
     * @return A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`
     * 
     */
    public Optional<Output<List<String>>> outboundIpAddressLists() {
        return Optional.ofNullable(this.outboundIpAddressLists);
    }

    /**
     * A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12`
     * 
     */
    @Import(name="outboundIpAddresses")
    private @Nullable Output<String> outboundIpAddresses;

    /**
     * @return A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12`
     * 
     */
    public Optional<Output<String>> outboundIpAddresses() {
        return Optional.ofNullable(this.outboundIpAddresses);
    }

    /**
     * A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;, &#34;52.143.43.17&#34;]` - not all of which are necessarily in use. Superset of `outbound_ip_address_list`.
     * 
     */
    @Import(name="possibleOutboundIpAddressLists")
    private @Nullable Output<List<String>> possibleOutboundIpAddressLists;

    /**
     * @return A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;, &#34;52.143.43.17&#34;]` - not all of which are necessarily in use. Superset of `outbound_ip_address_list`.
     * 
     */
    public Optional<Output<List<String>>> possibleOutboundIpAddressLists() {
        return Optional.ofNullable(this.possibleOutboundIpAddressLists);
    }

    /**
     * A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12,52.143.43.17` - not all of which are necessarily in use. Superset of `outbound_ip_addresses`.
     * 
     */
    @Import(name="possibleOutboundIpAddresses")
    private @Nullable Output<String> possibleOutboundIpAddresses;

    /**
     * @return A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12,52.143.43.17` - not all of which are necessarily in use. Superset of `outbound_ip_addresses`.
     * 
     */
    public Optional<Output<String>> possibleOutboundIpAddresses() {
        return Optional.ofNullable(this.possibleOutboundIpAddresses);
    }

    /**
     * The name of the resource group in which to create the App Service. 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 to create the App Service. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> resourceGroupName() {
        return Optional.ofNullable(this.resourceGroupName);
    }

    /**
     * A `site_config` block as defined below.
     * 
     */
    @Import(name="siteConfig")
    private @Nullable Output<AppServiceSiteConfigArgs> siteConfig;

    /**
     * @return A `site_config` block as defined below.
     * 
     */
    public Optional<Output<AppServiceSiteConfigArgs>> siteConfig() {
        return Optional.ofNullable(this.siteConfig);
    }

    /**
     * A `site_credential` block as defined below, which contains the site-level credentials used to publish to this App Service.
     * 
     */
    @Import(name="siteCredentials")
    private @Nullable Output<List<AppServiceSiteCredentialArgs>> siteCredentials;

    /**
     * @return A `site_credential` block as defined below, which contains the site-level credentials used to publish to this App Service.
     * 
     */
    public Optional<Output<List<AppServiceSiteCredentialArgs>>> siteCredentials() {
        return Optional.ofNullable(this.siteCredentials);
    }

    /**
     * A Source Control block as defined below
     * 
     */
    @Import(name="sourceControl")
    private @Nullable Output<AppServiceSourceControlArgs> sourceControl;

    /**
     * @return A Source Control block as defined below
     * 
     */
    public Optional<Output<AppServiceSourceControlArgs>> sourceControl() {
        return Optional.ofNullable(this.sourceControl);
    }

    /**
     * One or more `storage_account` blocks as defined below.
     * 
     */
    @Import(name="storageAccounts")
    private @Nullable Output<List<AppServiceStorageAccountArgs>> storageAccounts;

    /**
     * @return One or more `storage_account` blocks as defined below.
     * 
     */
    public Optional<Output<List<AppServiceStorageAccountArgs>>> storageAccounts() {
        return Optional.ofNullable(this.storageAccounts);
    }

    /**
     * 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 AppServiceState() {}

    private AppServiceState(AppServiceState $) {
        this.appServicePlanId = $.appServicePlanId;
        this.appSettings = $.appSettings;
        this.authSettings = $.authSettings;
        this.backup = $.backup;
        this.clientAffinityEnabled = $.clientAffinityEnabled;
        this.clientCertEnabled = $.clientCertEnabled;
        this.clientCertMode = $.clientCertMode;
        this.connectionStrings = $.connectionStrings;
        this.customDomainVerificationId = $.customDomainVerificationId;
        this.defaultSiteHostname = $.defaultSiteHostname;
        this.enabled = $.enabled;
        this.httpsOnly = $.httpsOnly;
        this.identity = $.identity;
        this.keyVaultReferenceIdentityId = $.keyVaultReferenceIdentityId;
        this.location = $.location;
        this.logs = $.logs;
        this.name = $.name;
        this.outboundIpAddressLists = $.outboundIpAddressLists;
        this.outboundIpAddresses = $.outboundIpAddresses;
        this.possibleOutboundIpAddressLists = $.possibleOutboundIpAddressLists;
        this.possibleOutboundIpAddresses = $.possibleOutboundIpAddresses;
        this.resourceGroupName = $.resourceGroupName;
        this.siteConfig = $.siteConfig;
        this.siteCredentials = $.siteCredentials;
        this.sourceControl = $.sourceControl;
        this.storageAccounts = $.storageAccounts;
        this.tags = $.tags;
    }

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

    public static final class Builder {
        private AppServiceState $;

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

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

        /**
         * @param appServicePlanId The ID of the App Service Plan within which to create this App Service.
         * 
         * @return builder
         * 
         */
        public Builder appServicePlanId(@Nullable Output<String> appServicePlanId) {
            $.appServicePlanId = appServicePlanId;
            return this;
        }

        /**
         * @param appServicePlanId The ID of the App Service Plan within which to create this App Service.
         * 
         * @return builder
         * 
         */
        public Builder appServicePlanId(String appServicePlanId) {
            return appServicePlanId(Output.of(appServicePlanId));
        }

        /**
         * @param appSettings A key-value pair of App Settings.
         * 
         * @return builder
         * 
         */
        public Builder appSettings(@Nullable Output<Map<String,String>> appSettings) {
            $.appSettings = appSettings;
            return this;
        }

        /**
         * @param appSettings A key-value pair of App Settings.
         * 
         * @return builder
         * 
         */
        public Builder appSettings(Map<String,String> appSettings) {
            return appSettings(Output.of(appSettings));
        }

        /**
         * @param authSettings A `auth_settings` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authSettings(@Nullable Output<AppServiceAuthSettingsArgs> authSettings) {
            $.authSettings = authSettings;
            return this;
        }

        /**
         * @param authSettings A `auth_settings` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authSettings(AppServiceAuthSettingsArgs authSettings) {
            return authSettings(Output.of(authSettings));
        }

        /**
         * @param backup A `backup` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder backup(@Nullable Output<AppServiceBackupArgs> backup) {
            $.backup = backup;
            return this;
        }

        /**
         * @param backup A `backup` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder backup(AppServiceBackupArgs backup) {
            return backup(Output.of(backup));
        }

        /**
         * @param clientAffinityEnabled Should the App Service send session affinity cookies, which route client requests in the same session to the same instance?
         * 
         * @return builder
         * 
         */
        public Builder clientAffinityEnabled(@Nullable Output<Boolean> clientAffinityEnabled) {
            $.clientAffinityEnabled = clientAffinityEnabled;
            return this;
        }

        /**
         * @param clientAffinityEnabled Should the App Service send session affinity cookies, which route client requests in the same session to the same instance?
         * 
         * @return builder
         * 
         */
        public Builder clientAffinityEnabled(Boolean clientAffinityEnabled) {
            return clientAffinityEnabled(Output.of(clientAffinityEnabled));
        }

        /**
         * @param clientCertEnabled Does the App Service require client certificates for incoming requests? Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder clientCertEnabled(@Nullable Output<Boolean> clientCertEnabled) {
            $.clientCertEnabled = clientCertEnabled;
            return this;
        }

        /**
         * @param clientCertEnabled Does the App Service require client certificates for incoming requests? Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder clientCertEnabled(Boolean clientCertEnabled) {
            return clientCertEnabled(Output.of(clientCertEnabled));
        }

        /**
         * @param clientCertMode Mode of client certificates for this App Service. Possible values are `Required`, `Optional` and `OptionalInteractiveUser`. If this parameter is set, `client_cert_enabled` must be set to `true`, otherwise this parameter is ignored.
         * 
         * @return builder
         * 
         */
        public Builder clientCertMode(@Nullable Output<String> clientCertMode) {
            $.clientCertMode = clientCertMode;
            return this;
        }

        /**
         * @param clientCertMode Mode of client certificates for this App Service. Possible values are `Required`, `Optional` and `OptionalInteractiveUser`. If this parameter is set, `client_cert_enabled` must be set to `true`, otherwise this parameter is ignored.
         * 
         * @return builder
         * 
         */
        public Builder clientCertMode(String clientCertMode) {
            return clientCertMode(Output.of(clientCertMode));
        }

        /**
         * @param connectionStrings One or more `connection_string` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(@Nullable Output<List<AppServiceConnectionStringArgs>> connectionStrings) {
            $.connectionStrings = connectionStrings;
            return this;
        }

        /**
         * @param connectionStrings One or more `connection_string` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(List<AppServiceConnectionStringArgs> connectionStrings) {
            return connectionStrings(Output.of(connectionStrings));
        }

        /**
         * @param connectionStrings One or more `connection_string` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(AppServiceConnectionStringArgs... connectionStrings) {
            return connectionStrings(List.of(connectionStrings));
        }

        /**
         * @param customDomainVerificationId An identifier used by App Service to perform domain ownership verification via DNS TXT record.
         * 
         * @return builder
         * 
         */
        public Builder customDomainVerificationId(@Nullable Output<String> customDomainVerificationId) {
            $.customDomainVerificationId = customDomainVerificationId;
            return this;
        }

        /**
         * @param customDomainVerificationId An identifier used by App Service to perform domain ownership verification via DNS TXT record.
         * 
         * @return builder
         * 
         */
        public Builder customDomainVerificationId(String customDomainVerificationId) {
            return customDomainVerificationId(Output.of(customDomainVerificationId));
        }

        /**
         * @param defaultSiteHostname The Default Hostname associated with the App Service - such as `mysite.azurewebsites.net`
         * 
         * @return builder
         * 
         */
        public Builder defaultSiteHostname(@Nullable Output<String> defaultSiteHostname) {
            $.defaultSiteHostname = defaultSiteHostname;
            return this;
        }

        /**
         * @param defaultSiteHostname The Default Hostname associated with the App Service - such as `mysite.azurewebsites.net`
         * 
         * @return builder
         * 
         */
        public Builder defaultSiteHostname(String defaultSiteHostname) {
            return defaultSiteHostname(Output.of(defaultSiteHostname));
        }

        /**
         * @param enabled Is the App Service Enabled? Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(@Nullable Output<Boolean> enabled) {
            $.enabled = enabled;
            return this;
        }

        /**
         * @param enabled Is the App Service Enabled? Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(Boolean enabled) {
            return enabled(Output.of(enabled));
        }

        /**
         * @param httpsOnly Can the App Service only be accessed via HTTPS? Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder httpsOnly(@Nullable Output<Boolean> httpsOnly) {
            $.httpsOnly = httpsOnly;
            return this;
        }

        /**
         * @param httpsOnly Can the App Service only be accessed via HTTPS? Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder httpsOnly(Boolean httpsOnly) {
            return httpsOnly(Output.of(httpsOnly));
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(@Nullable Output<AppServiceIdentityArgs> identity) {
            $.identity = identity;
            return this;
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(AppServiceIdentityArgs identity) {
            return identity(Output.of(identity));
        }

        /**
         * @param keyVaultReferenceIdentityId The User Assigned Identity Id used for looking up KeyVault secrets. The identity must be assigned to the application. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
         * 
         * @return builder
         * 
         */
        public Builder keyVaultReferenceIdentityId(@Nullable Output<String> keyVaultReferenceIdentityId) {
            $.keyVaultReferenceIdentityId = keyVaultReferenceIdentityId;
            return this;
        }

        /**
         * @param keyVaultReferenceIdentityId The User Assigned Identity Id used for looking up KeyVault secrets. The identity must be assigned to the application. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
         * 
         * @return builder
         * 
         */
        public Builder keyVaultReferenceIdentityId(String keyVaultReferenceIdentityId) {
            return keyVaultReferenceIdentityId(Output.of(keyVaultReferenceIdentityId));
        }

        /**
         * @param location Specifies the supported Azure location where the resource exists. 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 resource exists. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param logs A `logs` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder logs(@Nullable Output<AppServiceLogsArgs> logs) {
            $.logs = logs;
            return this;
        }

        /**
         * @param logs A `logs` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder logs(AppServiceLogsArgs logs) {
            return logs(Output.of(logs));
        }

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

        /**
         * @param name Specifies the name of the App Service. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param outboundIpAddressLists A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressLists(@Nullable Output<List<String>> outboundIpAddressLists) {
            $.outboundIpAddressLists = outboundIpAddressLists;
            return this;
        }

        /**
         * @param outboundIpAddressLists A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressLists(List<String> outboundIpAddressLists) {
            return outboundIpAddressLists(Output.of(outboundIpAddressLists));
        }

        /**
         * @param outboundIpAddressLists A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;]`
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddressLists(String... outboundIpAddressLists) {
            return outboundIpAddressLists(List.of(outboundIpAddressLists));
        }

        /**
         * @param outboundIpAddresses A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12`
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddresses(@Nullable Output<String> outboundIpAddresses) {
            $.outboundIpAddresses = outboundIpAddresses;
            return this;
        }

        /**
         * @param outboundIpAddresses A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12`
         * 
         * @return builder
         * 
         */
        public Builder outboundIpAddresses(String outboundIpAddresses) {
            return outboundIpAddresses(Output.of(outboundIpAddresses));
        }

        /**
         * @param possibleOutboundIpAddressLists A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;, &#34;52.143.43.17&#34;]` - not all of which are necessarily in use. Superset of `outbound_ip_address_list`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddressLists(@Nullable Output<List<String>> possibleOutboundIpAddressLists) {
            $.possibleOutboundIpAddressLists = possibleOutboundIpAddressLists;
            return this;
        }

        /**
         * @param possibleOutboundIpAddressLists A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;, &#34;52.143.43.17&#34;]` - not all of which are necessarily in use. Superset of `outbound_ip_address_list`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddressLists(List<String> possibleOutboundIpAddressLists) {
            return possibleOutboundIpAddressLists(Output.of(possibleOutboundIpAddressLists));
        }

        /**
         * @param possibleOutboundIpAddressLists A list of outbound IP addresses - such as `[&#34;52.23.25.3&#34;, &#34;52.143.43.12&#34;, &#34;52.143.43.17&#34;]` - not all of which are necessarily in use. Superset of `outbound_ip_address_list`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddressLists(String... possibleOutboundIpAddressLists) {
            return possibleOutboundIpAddressLists(List.of(possibleOutboundIpAddressLists));
        }

        /**
         * @param possibleOutboundIpAddresses A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12,52.143.43.17` - not all of which are necessarily in use. Superset of `outbound_ip_addresses`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddresses(@Nullable Output<String> possibleOutboundIpAddresses) {
            $.possibleOutboundIpAddresses = possibleOutboundIpAddresses;
            return this;
        }

        /**
         * @param possibleOutboundIpAddresses A comma separated list of outbound IP addresses - such as `52.23.25.3,52.143.43.12,52.143.43.17` - not all of which are necessarily in use. Superset of `outbound_ip_addresses`.
         * 
         * @return builder
         * 
         */
        public Builder possibleOutboundIpAddresses(String possibleOutboundIpAddresses) {
            return possibleOutboundIpAddresses(Output.of(possibleOutboundIpAddresses));
        }

        /**
         * @param resourceGroupName The name of the resource group in which to create the App Service. 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 to create the App Service. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param siteConfig A `site_config` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteConfig(@Nullable Output<AppServiceSiteConfigArgs> siteConfig) {
            $.siteConfig = siteConfig;
            return this;
        }

        /**
         * @param siteConfig A `site_config` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteConfig(AppServiceSiteConfigArgs siteConfig) {
            return siteConfig(Output.of(siteConfig));
        }

        /**
         * @param siteCredentials A `site_credential` block as defined below, which contains the site-level credentials used to publish to this App Service.
         * 
         * @return builder
         * 
         */
        public Builder siteCredentials(@Nullable Output<List<AppServiceSiteCredentialArgs>> siteCredentials) {
            $.siteCredentials = siteCredentials;
            return this;
        }

        /**
         * @param siteCredentials A `site_credential` block as defined below, which contains the site-level credentials used to publish to this App Service.
         * 
         * @return builder
         * 
         */
        public Builder siteCredentials(List<AppServiceSiteCredentialArgs> siteCredentials) {
            return siteCredentials(Output.of(siteCredentials));
        }

        /**
         * @param siteCredentials A `site_credential` block as defined below, which contains the site-level credentials used to publish to this App Service.
         * 
         * @return builder
         * 
         */
        public Builder siteCredentials(AppServiceSiteCredentialArgs... siteCredentials) {
            return siteCredentials(List.of(siteCredentials));
        }

        /**
         * @param sourceControl A Source Control block as defined below
         * 
         * @return builder
         * 
         */
        public Builder sourceControl(@Nullable Output<AppServiceSourceControlArgs> sourceControl) {
            $.sourceControl = sourceControl;
            return this;
        }

        /**
         * @param sourceControl A Source Control block as defined below
         * 
         * @return builder
         * 
         */
        public Builder sourceControl(AppServiceSourceControlArgs sourceControl) {
            return sourceControl(Output.of(sourceControl));
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(@Nullable Output<List<AppServiceStorageAccountArgs>> storageAccounts) {
            $.storageAccounts = storageAccounts;
            return this;
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(List<AppServiceStorageAccountArgs> storageAccounts) {
            return storageAccounts(Output.of(storageAccounts));
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(AppServiceStorageAccountArgs... storageAccounts) {
            return storageAccounts(List.of(storageAccounts));
        }

        /**
         * @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 AppServiceState build() {
            return $;
        }
    }

}
