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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.looker.inputs.InstanceAdminSettingsArgs;
import com.pulumi.gcp.looker.inputs.InstanceDenyMaintenancePeriodArgs;
import com.pulumi.gcp.looker.inputs.InstanceEncryptionConfigArgs;
import com.pulumi.gcp.looker.inputs.InstanceMaintenanceWindowArgs;
import com.pulumi.gcp.looker.inputs.InstanceOauthConfigArgs;
import com.pulumi.gcp.looker.inputs.InstanceUserMetadataArgs;
import java.lang.Boolean;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final InstanceState Empty = new InstanceState();

    /**
     * Looker instance Admin settings.
     * Structure is documented below.
     * 
     */
    @Import(name="adminSettings")
    private @Nullable Output<InstanceAdminSettingsArgs> adminSettings;

    /**
     * @return Looker instance Admin settings.
     * Structure is documented below.
     * 
     */
    public Optional<Output<InstanceAdminSettingsArgs>> adminSettings() {
        return Optional.ofNullable(this.adminSettings);
    }

    /**
     * Network name in the consumer project in the format of: projects/{project}/global/networks/{network}
     * Note that the consumer network may be in a different GCP project than the consumer
     * project that is hosting the Looker Instance.
     * 
     */
    @Import(name="consumerNetwork")
    private @Nullable Output<String> consumerNetwork;

    /**
     * @return Network name in the consumer project in the format of: projects/{project}/global/networks/{network}
     * Note that the consumer network may be in a different GCP project than the consumer
     * project that is hosting the Looker Instance.
     * 
     */
    public Optional<Output<String>> consumerNetwork() {
        return Optional.ofNullable(this.consumerNetwork);
    }

    /**
     * The time the instance was created in RFC3339 UTC &#34;Zulu&#34; format,
     * accurate to nanoseconds.
     * 
     */
    @Import(name="createTime")
    private @Nullable Output<String> createTime;

    /**
     * @return The time the instance was created in RFC3339 UTC &#34;Zulu&#34; format,
     * accurate to nanoseconds.
     * 
     */
    public Optional<Output<String>> createTime() {
        return Optional.ofNullable(this.createTime);
    }

    /**
     * Maintenance denial period for this instance.
     * You must allow at least 14 days of maintenance availability
     * between any two deny maintenance periods.
     * Structure is documented below.
     * 
     */
    @Import(name="denyMaintenancePeriod")
    private @Nullable Output<InstanceDenyMaintenancePeriodArgs> denyMaintenancePeriod;

    /**
     * @return Maintenance denial period for this instance.
     * You must allow at least 14 days of maintenance availability
     * between any two deny maintenance periods.
     * Structure is documented below.
     * 
     */
    public Optional<Output<InstanceDenyMaintenancePeriodArgs>> denyMaintenancePeriod() {
        return Optional.ofNullable(this.denyMaintenancePeriod);
    }

    /**
     * Public Egress IP (IPv4).
     * 
     */
    @Import(name="egressPublicIp")
    private @Nullable Output<String> egressPublicIp;

    /**
     * @return Public Egress IP (IPv4).
     * 
     */
    public Optional<Output<String>> egressPublicIp() {
        return Optional.ofNullable(this.egressPublicIp);
    }

    /**
     * Looker instance encryption settings.
     * Structure is documented below.
     * 
     */
    @Import(name="encryptionConfig")
    private @Nullable Output<InstanceEncryptionConfigArgs> encryptionConfig;

    /**
     * @return Looker instance encryption settings.
     * Structure is documented below.
     * 
     */
    public Optional<Output<InstanceEncryptionConfigArgs>> encryptionConfig() {
        return Optional.ofNullable(this.encryptionConfig);
    }

    /**
     * Private Ingress IP (IPv4).
     * 
     */
    @Import(name="ingressPrivateIp")
    private @Nullable Output<String> ingressPrivateIp;

    /**
     * @return Private Ingress IP (IPv4).
     * 
     */
    public Optional<Output<String>> ingressPrivateIp() {
        return Optional.ofNullable(this.ingressPrivateIp);
    }

    /**
     * Public Ingress IP (IPv4).
     * 
     */
    @Import(name="ingressPublicIp")
    private @Nullable Output<String> ingressPublicIp;

    /**
     * @return Public Ingress IP (IPv4).
     * 
     */
    public Optional<Output<String>> ingressPublicIp() {
        return Optional.ofNullable(this.ingressPublicIp);
    }

    /**
     * Looker instance URI which can be used to access the Looker Instance UI.
     * 
     */
    @Import(name="lookerUri")
    private @Nullable Output<String> lookerUri;

    /**
     * @return Looker instance URI which can be used to access the Looker Instance UI.
     * 
     */
    public Optional<Output<String>> lookerUri() {
        return Optional.ofNullable(this.lookerUri);
    }

    /**
     * The Looker version that the instance is using.
     * 
     */
    @Import(name="lookerVersion")
    private @Nullable Output<String> lookerVersion;

    /**
     * @return The Looker version that the instance is using.
     * 
     */
    public Optional<Output<String>> lookerVersion() {
        return Optional.ofNullable(this.lookerVersion);
    }

    /**
     * Maintenance window for an instance.
     * Maintenance of your instance takes place once a month, and will require
     * your instance to be restarted during updates, which will temporarily
     * disrupt service.
     * Structure is documented below.
     * 
     */
    @Import(name="maintenanceWindow")
    private @Nullable Output<InstanceMaintenanceWindowArgs> maintenanceWindow;

    /**
     * @return Maintenance window for an instance.
     * Maintenance of your instance takes place once a month, and will require
     * your instance to be restarted during updates, which will temporarily
     * disrupt service.
     * Structure is documented below.
     * 
     */
    public Optional<Output<InstanceMaintenanceWindowArgs>> maintenanceWindow() {
        return Optional.ofNullable(this.maintenanceWindow);
    }

    /**
     * The ID of the instance or a fully qualified identifier for the instance.
     * 
     * ***
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The ID of the instance or a fully qualified identifier for the instance.
     * 
     * ***
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * Looker Instance OAuth login settings.
     * Structure is documented below.
     * 
     */
    @Import(name="oauthConfig")
    private @Nullable Output<InstanceOauthConfigArgs> oauthConfig;

    /**
     * @return Looker Instance OAuth login settings.
     * Structure is documented below.
     * 
     */
    public Optional<Output<InstanceOauthConfigArgs>> oauthConfig() {
        return Optional.ofNullable(this.oauthConfig);
    }

    /**
     * Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:
     * - LOOKER_CORE_TRIAL: trial instance
     * - LOOKER_CORE_STANDARD: pay as you go standard instance
     * - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance
     * - LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance
     * - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance
     * - LOOKER_MODELER: standalone modeling service
     *   Default value is `LOOKER_CORE_TRIAL`.
     *   Possible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`, `LOOKER_MODELER`.
     * 
     */
    @Import(name="platformEdition")
    private @Nullable Output<String> platformEdition;

    /**
     * @return Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:
     * - LOOKER_CORE_TRIAL: trial instance
     * - LOOKER_CORE_STANDARD: pay as you go standard instance
     * - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance
     * - LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance
     * - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance
     * - LOOKER_MODELER: standalone modeling service
     *   Default value is `LOOKER_CORE_TRIAL`.
     *   Possible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`, `LOOKER_MODELER`.
     * 
     */
    public Optional<Output<String>> platformEdition() {
        return Optional.ofNullable(this.platformEdition);
    }

    /**
     * Whether private IP is enabled on the Looker instance.
     * 
     */
    @Import(name="privateIpEnabled")
    private @Nullable Output<Boolean> privateIpEnabled;

    /**
     * @return Whether private IP is enabled on the Looker instance.
     * 
     */
    public Optional<Output<Boolean>> privateIpEnabled() {
        return Optional.ofNullable(this.privateIpEnabled);
    }

    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    @Import(name="project")
    private @Nullable Output<String> project;

    /**
     * @return The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    public Optional<Output<String>> project() {
        return Optional.ofNullable(this.project);
    }

    /**
     * Whether public IP is enabled on the Looker instance.
     * 
     */
    @Import(name="publicIpEnabled")
    private @Nullable Output<Boolean> publicIpEnabled;

    /**
     * @return Whether public IP is enabled on the Looker instance.
     * 
     */
    public Optional<Output<Boolean>> publicIpEnabled() {
        return Optional.ofNullable(this.publicIpEnabled);
    }

    /**
     * The name of the Looker region of the instance.
     * 
     */
    @Import(name="region")
    private @Nullable Output<String> region;

    /**
     * @return The name of the Looker region of the instance.
     * 
     */
    public Optional<Output<String>> region() {
        return Optional.ofNullable(this.region);
    }

    /**
     * Name of a reserved IP address range within the consumer network, to be used for
     * private service access connection. User may or may not specify this in a request.
     * 
     */
    @Import(name="reservedRange")
    private @Nullable Output<String> reservedRange;

    /**
     * @return Name of a reserved IP address range within the consumer network, to be used for
     * private service access connection. User may or may not specify this in a request.
     * 
     */
    public Optional<Output<String>> reservedRange() {
        return Optional.ofNullable(this.reservedRange);
    }

    /**
     * The time the instance was updated in RFC3339 UTC &#34;Zulu&#34; format,
     * accurate to nanoseconds.
     * 
     */
    @Import(name="updateTime")
    private @Nullable Output<String> updateTime;

    /**
     * @return The time the instance was updated in RFC3339 UTC &#34;Zulu&#34; format,
     * accurate to nanoseconds.
     * 
     */
    public Optional<Output<String>> updateTime() {
        return Optional.ofNullable(this.updateTime);
    }

    /**
     * Metadata about users for a Looker instance.
     * These settings are only available when platform edition LOOKER_CORE_STANDARD is set.
     * There are ten Standard and two Developer users included in the cost of the product.
     * You can allocate additional Standard, Viewer, and Developer users for this instance.
     * It is an optional step and can be modified later.
     * With the Standard edition of Looker (Google Cloud core), you can provision up to 50
     * total users, distributed across Viewer, Standard, and Developer.
     * Structure is documented below.
     * 
     */
    @Import(name="userMetadata")
    private @Nullable Output<InstanceUserMetadataArgs> userMetadata;

    /**
     * @return Metadata about users for a Looker instance.
     * These settings are only available when platform edition LOOKER_CORE_STANDARD is set.
     * There are ten Standard and two Developer users included in the cost of the product.
     * You can allocate additional Standard, Viewer, and Developer users for this instance.
     * It is an optional step and can be modified later.
     * With the Standard edition of Looker (Google Cloud core), you can provision up to 50
     * total users, distributed across Viewer, Standard, and Developer.
     * Structure is documented below.
     * 
     */
    public Optional<Output<InstanceUserMetadataArgs>> userMetadata() {
        return Optional.ofNullable(this.userMetadata);
    }

    private InstanceState() {}

    private InstanceState(InstanceState $) {
        this.adminSettings = $.adminSettings;
        this.consumerNetwork = $.consumerNetwork;
        this.createTime = $.createTime;
        this.denyMaintenancePeriod = $.denyMaintenancePeriod;
        this.egressPublicIp = $.egressPublicIp;
        this.encryptionConfig = $.encryptionConfig;
        this.ingressPrivateIp = $.ingressPrivateIp;
        this.ingressPublicIp = $.ingressPublicIp;
        this.lookerUri = $.lookerUri;
        this.lookerVersion = $.lookerVersion;
        this.maintenanceWindow = $.maintenanceWindow;
        this.name = $.name;
        this.oauthConfig = $.oauthConfig;
        this.platformEdition = $.platformEdition;
        this.privateIpEnabled = $.privateIpEnabled;
        this.project = $.project;
        this.publicIpEnabled = $.publicIpEnabled;
        this.region = $.region;
        this.reservedRange = $.reservedRange;
        this.updateTime = $.updateTime;
        this.userMetadata = $.userMetadata;
    }

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

    public static final class Builder {
        private InstanceState $;

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

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

        /**
         * @param adminSettings Looker instance Admin settings.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder adminSettings(@Nullable Output<InstanceAdminSettingsArgs> adminSettings) {
            $.adminSettings = adminSettings;
            return this;
        }

        /**
         * @param adminSettings Looker instance Admin settings.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder adminSettings(InstanceAdminSettingsArgs adminSettings) {
            return adminSettings(Output.of(adminSettings));
        }

        /**
         * @param consumerNetwork Network name in the consumer project in the format of: projects/{project}/global/networks/{network}
         * Note that the consumer network may be in a different GCP project than the consumer
         * project that is hosting the Looker Instance.
         * 
         * @return builder
         * 
         */
        public Builder consumerNetwork(@Nullable Output<String> consumerNetwork) {
            $.consumerNetwork = consumerNetwork;
            return this;
        }

        /**
         * @param consumerNetwork Network name in the consumer project in the format of: projects/{project}/global/networks/{network}
         * Note that the consumer network may be in a different GCP project than the consumer
         * project that is hosting the Looker Instance.
         * 
         * @return builder
         * 
         */
        public Builder consumerNetwork(String consumerNetwork) {
            return consumerNetwork(Output.of(consumerNetwork));
        }

        /**
         * @param createTime The time the instance was created in RFC3339 UTC &#34;Zulu&#34; format,
         * accurate to nanoseconds.
         * 
         * @return builder
         * 
         */
        public Builder createTime(@Nullable Output<String> createTime) {
            $.createTime = createTime;
            return this;
        }

        /**
         * @param createTime The time the instance was created in RFC3339 UTC &#34;Zulu&#34; format,
         * accurate to nanoseconds.
         * 
         * @return builder
         * 
         */
        public Builder createTime(String createTime) {
            return createTime(Output.of(createTime));
        }

        /**
         * @param denyMaintenancePeriod Maintenance denial period for this instance.
         * You must allow at least 14 days of maintenance availability
         * between any two deny maintenance periods.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder denyMaintenancePeriod(@Nullable Output<InstanceDenyMaintenancePeriodArgs> denyMaintenancePeriod) {
            $.denyMaintenancePeriod = denyMaintenancePeriod;
            return this;
        }

        /**
         * @param denyMaintenancePeriod Maintenance denial period for this instance.
         * You must allow at least 14 days of maintenance availability
         * between any two deny maintenance periods.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder denyMaintenancePeriod(InstanceDenyMaintenancePeriodArgs denyMaintenancePeriod) {
            return denyMaintenancePeriod(Output.of(denyMaintenancePeriod));
        }

        /**
         * @param egressPublicIp Public Egress IP (IPv4).
         * 
         * @return builder
         * 
         */
        public Builder egressPublicIp(@Nullable Output<String> egressPublicIp) {
            $.egressPublicIp = egressPublicIp;
            return this;
        }

        /**
         * @param egressPublicIp Public Egress IP (IPv4).
         * 
         * @return builder
         * 
         */
        public Builder egressPublicIp(String egressPublicIp) {
            return egressPublicIp(Output.of(egressPublicIp));
        }

        /**
         * @param encryptionConfig Looker instance encryption settings.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder encryptionConfig(@Nullable Output<InstanceEncryptionConfigArgs> encryptionConfig) {
            $.encryptionConfig = encryptionConfig;
            return this;
        }

        /**
         * @param encryptionConfig Looker instance encryption settings.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder encryptionConfig(InstanceEncryptionConfigArgs encryptionConfig) {
            return encryptionConfig(Output.of(encryptionConfig));
        }

        /**
         * @param ingressPrivateIp Private Ingress IP (IPv4).
         * 
         * @return builder
         * 
         */
        public Builder ingressPrivateIp(@Nullable Output<String> ingressPrivateIp) {
            $.ingressPrivateIp = ingressPrivateIp;
            return this;
        }

        /**
         * @param ingressPrivateIp Private Ingress IP (IPv4).
         * 
         * @return builder
         * 
         */
        public Builder ingressPrivateIp(String ingressPrivateIp) {
            return ingressPrivateIp(Output.of(ingressPrivateIp));
        }

        /**
         * @param ingressPublicIp Public Ingress IP (IPv4).
         * 
         * @return builder
         * 
         */
        public Builder ingressPublicIp(@Nullable Output<String> ingressPublicIp) {
            $.ingressPublicIp = ingressPublicIp;
            return this;
        }

        /**
         * @param ingressPublicIp Public Ingress IP (IPv4).
         * 
         * @return builder
         * 
         */
        public Builder ingressPublicIp(String ingressPublicIp) {
            return ingressPublicIp(Output.of(ingressPublicIp));
        }

        /**
         * @param lookerUri Looker instance URI which can be used to access the Looker Instance UI.
         * 
         * @return builder
         * 
         */
        public Builder lookerUri(@Nullable Output<String> lookerUri) {
            $.lookerUri = lookerUri;
            return this;
        }

        /**
         * @param lookerUri Looker instance URI which can be used to access the Looker Instance UI.
         * 
         * @return builder
         * 
         */
        public Builder lookerUri(String lookerUri) {
            return lookerUri(Output.of(lookerUri));
        }

        /**
         * @param lookerVersion The Looker version that the instance is using.
         * 
         * @return builder
         * 
         */
        public Builder lookerVersion(@Nullable Output<String> lookerVersion) {
            $.lookerVersion = lookerVersion;
            return this;
        }

        /**
         * @param lookerVersion The Looker version that the instance is using.
         * 
         * @return builder
         * 
         */
        public Builder lookerVersion(String lookerVersion) {
            return lookerVersion(Output.of(lookerVersion));
        }

        /**
         * @param maintenanceWindow Maintenance window for an instance.
         * Maintenance of your instance takes place once a month, and will require
         * your instance to be restarted during updates, which will temporarily
         * disrupt service.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder maintenanceWindow(@Nullable Output<InstanceMaintenanceWindowArgs> maintenanceWindow) {
            $.maintenanceWindow = maintenanceWindow;
            return this;
        }

        /**
         * @param maintenanceWindow Maintenance window for an instance.
         * Maintenance of your instance takes place once a month, and will require
         * your instance to be restarted during updates, which will temporarily
         * disrupt service.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder maintenanceWindow(InstanceMaintenanceWindowArgs maintenanceWindow) {
            return maintenanceWindow(Output.of(maintenanceWindow));
        }

        /**
         * @param name The ID of the instance or a fully qualified identifier for the instance.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The ID of the instance or a fully qualified identifier for the instance.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param oauthConfig Looker Instance OAuth login settings.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder oauthConfig(@Nullable Output<InstanceOauthConfigArgs> oauthConfig) {
            $.oauthConfig = oauthConfig;
            return this;
        }

        /**
         * @param oauthConfig Looker Instance OAuth login settings.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder oauthConfig(InstanceOauthConfigArgs oauthConfig) {
            return oauthConfig(Output.of(oauthConfig));
        }

        /**
         * @param platformEdition Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:
         * - LOOKER_CORE_TRIAL: trial instance
         * - LOOKER_CORE_STANDARD: pay as you go standard instance
         * - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance
         * - LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance
         * - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance
         * - LOOKER_MODELER: standalone modeling service
         *   Default value is `LOOKER_CORE_TRIAL`.
         *   Possible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`, `LOOKER_MODELER`.
         * 
         * @return builder
         * 
         */
        public Builder platformEdition(@Nullable Output<String> platformEdition) {
            $.platformEdition = platformEdition;
            return this;
        }

        /**
         * @param platformEdition Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:
         * - LOOKER_CORE_TRIAL: trial instance
         * - LOOKER_CORE_STANDARD: pay as you go standard instance
         * - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance
         * - LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance
         * - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance
         * - LOOKER_MODELER: standalone modeling service
         *   Default value is `LOOKER_CORE_TRIAL`.
         *   Possible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`, `LOOKER_MODELER`.
         * 
         * @return builder
         * 
         */
        public Builder platformEdition(String platformEdition) {
            return platformEdition(Output.of(platformEdition));
        }

        /**
         * @param privateIpEnabled Whether private IP is enabled on the Looker instance.
         * 
         * @return builder
         * 
         */
        public Builder privateIpEnabled(@Nullable Output<Boolean> privateIpEnabled) {
            $.privateIpEnabled = privateIpEnabled;
            return this;
        }

        /**
         * @param privateIpEnabled Whether private IP is enabled on the Looker instance.
         * 
         * @return builder
         * 
         */
        public Builder privateIpEnabled(Boolean privateIpEnabled) {
            return privateIpEnabled(Output.of(privateIpEnabled));
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(@Nullable Output<String> project) {
            $.project = project;
            return this;
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(String project) {
            return project(Output.of(project));
        }

        /**
         * @param publicIpEnabled Whether public IP is enabled on the Looker instance.
         * 
         * @return builder
         * 
         */
        public Builder publicIpEnabled(@Nullable Output<Boolean> publicIpEnabled) {
            $.publicIpEnabled = publicIpEnabled;
            return this;
        }

        /**
         * @param publicIpEnabled Whether public IP is enabled on the Looker instance.
         * 
         * @return builder
         * 
         */
        public Builder publicIpEnabled(Boolean publicIpEnabled) {
            return publicIpEnabled(Output.of(publicIpEnabled));
        }

        /**
         * @param region The name of the Looker region of the instance.
         * 
         * @return builder
         * 
         */
        public Builder region(@Nullable Output<String> region) {
            $.region = region;
            return this;
        }

        /**
         * @param region The name of the Looker region of the instance.
         * 
         * @return builder
         * 
         */
        public Builder region(String region) {
            return region(Output.of(region));
        }

        /**
         * @param reservedRange Name of a reserved IP address range within the consumer network, to be used for
         * private service access connection. User may or may not specify this in a request.
         * 
         * @return builder
         * 
         */
        public Builder reservedRange(@Nullable Output<String> reservedRange) {
            $.reservedRange = reservedRange;
            return this;
        }

        /**
         * @param reservedRange Name of a reserved IP address range within the consumer network, to be used for
         * private service access connection. User may or may not specify this in a request.
         * 
         * @return builder
         * 
         */
        public Builder reservedRange(String reservedRange) {
            return reservedRange(Output.of(reservedRange));
        }

        /**
         * @param updateTime The time the instance was updated in RFC3339 UTC &#34;Zulu&#34; format,
         * accurate to nanoseconds.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(@Nullable Output<String> updateTime) {
            $.updateTime = updateTime;
            return this;
        }

        /**
         * @param updateTime The time the instance was updated in RFC3339 UTC &#34;Zulu&#34; format,
         * accurate to nanoseconds.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(String updateTime) {
            return updateTime(Output.of(updateTime));
        }

        /**
         * @param userMetadata Metadata about users for a Looker instance.
         * These settings are only available when platform edition LOOKER_CORE_STANDARD is set.
         * There are ten Standard and two Developer users included in the cost of the product.
         * You can allocate additional Standard, Viewer, and Developer users for this instance.
         * It is an optional step and can be modified later.
         * With the Standard edition of Looker (Google Cloud core), you can provision up to 50
         * total users, distributed across Viewer, Standard, and Developer.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder userMetadata(@Nullable Output<InstanceUserMetadataArgs> userMetadata) {
            $.userMetadata = userMetadata;
            return this;
        }

        /**
         * @param userMetadata Metadata about users for a Looker instance.
         * These settings are only available when platform edition LOOKER_CORE_STANDARD is set.
         * There are ten Standard and two Developer users included in the cost of the product.
         * You can allocate additional Standard, Viewer, and Developer users for this instance.
         * It is an optional step and can be modified later.
         * With the Standard edition of Looker (Google Cloud core), you can provision up to 50
         * total users, distributed across Viewer, Standard, and Developer.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder userMetadata(InstanceUserMetadataArgs userMetadata) {
            return userMetadata(Output.of(userMetadata));
        }

        public InstanceState build() {
            return $;
        }
    }

}
