# frozen_string_literal: true

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module Workstations
      module V1
        # A workstation cluster resource in the Cloud Workstations API.
        #
        # Defines a group of workstations in a particular region and the
        # VPC network they're attached to.
        # @!attribute [rw] name
        #   @return [::String]
        #     Full name of this workstation cluster.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Optional. Human-readable name for this workstation cluster.
        # @!attribute [r] uid
        #   @return [::String]
        #     Output only. A system-assigned unique identifier for this workstation
        #     cluster.
        # @!attribute [r] reconciling
        #   @return [::Boolean]
        #     Output only. Indicates whether this workstation cluster is currently being
        #     updated to match its intended state.
        # @!attribute [rw] annotations
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Optional. Client-specified annotations.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Optional.
        #     [Labels](https://cloud.google.com/workstations/docs/label-resources) that
        #     are applied to the workstation cluster and that are also propagated to the
        #     underlying Compute Engine resources.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation cluster was created.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation cluster was most recently updated.
        # @!attribute [r] delete_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation cluster was soft-deleted.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. Checksum computed by the server. May be sent on update and delete
        #     requests to make sure that the client has an up-to-date value before
        #     proceeding.
        # @!attribute [rw] network
        #   @return [::String]
        #     Immutable. Name of the Compute Engine network in which instances associated
        #     with this workstation cluster will be created.
        # @!attribute [rw] subnetwork
        #   @return [::String]
        #     Immutable. Name of the Compute Engine subnetwork in which instances
        #     associated with this workstation cluster will be created. Must be part of
        #     the subnetwork specified for this workstation cluster.
        # @!attribute [r] control_plane_ip
        #   @return [::String]
        #     Output only. The private IP address of the control plane for this
        #     workstation cluster. Workstation VMs need access to this IP address to work
        #     with the service, so make sure that your firewall rules allow egress from
        #     the workstation VMs to this address.
        # @!attribute [rw] private_cluster_config
        #   @return [::Google::Cloud::Workstations::V1::WorkstationCluster::PrivateClusterConfig]
        #     Optional. Configuration for private workstation cluster.
        # @!attribute [r] degraded
        #   @return [::Boolean]
        #     Output only. Whether this workstation cluster is in degraded mode, in which
        #     case it may require user action to restore full functionality. Details can
        #     be found in
        #     {::Google::Cloud::Workstations::V1::WorkstationCluster#conditions conditions}.
        # @!attribute [r] conditions
        #   @return [::Array<::Google::Rpc::Status>]
        #     Output only. Status conditions describing the workstation cluster's current
        #     state.
        class WorkstationCluster
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Configuration options for private workstation clusters.
          # @!attribute [rw] enable_private_endpoint
          #   @return [::Boolean]
          #     Immutable. Whether Workstations endpoint is private.
          # @!attribute [r] cluster_hostname
          #   @return [::String]
          #     Output only. Hostname for the workstation cluster. This field will be
          #     populated only when private endpoint is enabled. To access workstations
          #     in the workstation cluster, create a new DNS zone mapping this domain
          #     name to an internal IP address and a forwarding rule mapping that address
          #     to the service attachment.
          # @!attribute [r] service_attachment_uri
          #   @return [::String]
          #     Output only. Service attachment URI for the workstation cluster. The
          #     service attachemnt is created when private endpoint is enabled. To access
          #     workstations in the workstation cluster, configure access to the managed
          #     service using [Private Service
          #     Connect](https://cloud.google.com/vpc/docs/configure-private-service-connect-services).
          # @!attribute [rw] allowed_projects
          #   @return [::Array<::String>]
          #     Optional. Additional projects that are allowed to attach to the
          #     workstation cluster's service attachment. By default, the workstation
          #     cluster's project and the VPC host project (if different) are allowed.
          class PrivateClusterConfig
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class AnnotationsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # A workstation configuration resource in the Cloud Workstations API.
        #
        # Workstation configurations act as templates for workstations. The workstation
        # configuration defines details such as the workstation virtual machine (VM)
        # instance type, persistent storage, container image defining environment,
        # which IDE or Code Editor to use, and more. Administrators and platform teams
        # can also use [Identity and Access Management
        # (IAM)](https://cloud.google.com/iam/docs/overview) rules to grant access to
        # teams or to individual developers.
        # @!attribute [rw] name
        #   @return [::String]
        #     Full name of this workstation configuration.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Optional. Human-readable name for this workstation configuration.
        # @!attribute [r] uid
        #   @return [::String]
        #     Output only. A system-assigned unique identifier for this workstation
        #     configuration.
        # @!attribute [r] reconciling
        #   @return [::Boolean]
        #     Output only. Indicates whether this workstation configuration is currently
        #     being updated to match its intended state.
        # @!attribute [rw] annotations
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Optional. Client-specified annotations.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Optional.
        #     [Labels](https://cloud.google.com/workstations/docs/label-resources) that
        #     are applied to the workstation configuration and that are also propagated
        #     to the underlying Compute Engine resources.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation configuration was created.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation configuration was most recently
        #     updated.
        # @!attribute [r] delete_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation configuration was soft-deleted.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. Checksum computed by the server. May be sent on update and delete
        #     requests to make sure that the client has an up-to-date value before
        #     proceeding.
        # @!attribute [rw] idle_timeout
        #   @return [::Google::Protobuf::Duration]
        #     Optional. Number of seconds to wait before automatically stopping a
        #     workstation after it last received user traffic.
        #
        #     A value of `"0s"` indicates that Cloud Workstations VMs created with this
        #     configuration should never time out due to idleness.
        #     Provide
        #     [duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#duration)
        #     terminated by `s` for seconds—for example, `"7200s"` (2 hours).
        #     The default is `"1200s"` (20 minutes).
        # @!attribute [rw] running_timeout
        #   @return [::Google::Protobuf::Duration]
        #     Optional. Number of seconds that a workstation can run until it is
        #     automatically shut down. We recommend that workstations be shut down daily
        #     to reduce costs and so that security updates can be applied upon restart.
        #     The
        #     {::Google::Cloud::Workstations::V1::WorkstationConfig#idle_timeout idle_timeout}
        #     and
        #     {::Google::Cloud::Workstations::V1::WorkstationConfig#running_timeout running_timeout}
        #     fields are independent of each other. Note that the
        #     {::Google::Cloud::Workstations::V1::WorkstationConfig#running_timeout running_timeout}
        #     field shuts down VMs after the specified time, regardless of whether or not
        #     the VMs are idle.
        #
        #     Provide duration terminated by `s` for seconds—for example, `"54000s"`
        #     (15 hours). Defaults to `"43200s"` (12 hours). A value of `"0s"` indicates
        #     that workstations using this configuration should never time out. If
        #     {::Google::Cloud::Workstations::V1::WorkstationConfig#encryption_key encryption_key}
        #     is set, it must be greater than `"0s"` and less than
        #     `"86400s"` (24 hours).
        #
        #     Warning: A value of `"0s"` indicates that Cloud Workstations VMs created
        #     with this configuration have no maximum running time. This is strongly
        #     discouraged because you incur costs and will not pick up security updates.
        # @!attribute [rw] host
        #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::Host]
        #     Optional. Runtime host for the workstation.
        # @!attribute [rw] persistent_directories
        #   @return [::Array<::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory>]
        #     Optional. Directories to persist across workstation sessions.
        # @!attribute [rw] container
        #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::Container]
        #     Optional. Container that runs upon startup for each workstation using this
        #     workstation configuration.
        # @!attribute [rw] encryption_key
        #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::CustomerEncryptionKey]
        #     Immutable. Encrypts resources of this workstation configuration using a
        #     customer-managed encryption key (CMEK).
        #
        #     If specified, the boot disk of the Compute Engine instance and the
        #     persistent disk are encrypted using this encryption key. If
        #     this field is not set, the disks are encrypted using a generated
        #     key. Customer-managed encryption keys do not protect disk metadata.
        #
        #     If the customer-managed encryption key is rotated, when the workstation
        #     instance is stopped, the system attempts to recreate the
        #     persistent disk with the new version of the key. Be sure to keep
        #     older versions of the key until the persistent disk is recreated.
        #     Otherwise, data on the persistent disk might be lost.
        #
        #     If the encryption key is revoked, the workstation session automatically
        #     stops within 7 hours.
        #
        #     Immutable after the workstation configuration is created.
        # @!attribute [rw] readiness_checks
        #   @return [::Array<::Google::Cloud::Workstations::V1::WorkstationConfig::ReadinessCheck>]
        #     Optional. Readiness checks to perform when starting a workstation using
        #     this workstation configuration. Mark a workstation as running only after
        #     all specified readiness checks return 200 status codes.
        # @!attribute [rw] replica_zones
        #   @return [::Array<::String>]
        #     Optional. Immutable. Specifies the zones used to replicate the VM and disk
        #     resources within the region. If set, exactly two zones within the
        #     workstation cluster's region must be specified—for example,
        #     `['us-central1-a', 'us-central1-f']`. If this field is empty, two default
        #     zones within the region are used.
        #
        #     Immutable after the workstation configuration is created.
        # @!attribute [r] degraded
        #   @return [::Boolean]
        #     Output only. Whether this resource is degraded, in which case it may
        #     require user action to restore full functionality. See also the
        #     {::Google::Cloud::Workstations::V1::WorkstationConfig#conditions conditions}
        #     field.
        # @!attribute [r] conditions
        #   @return [::Array<::Google::Rpc::Status>]
        #     Output only. Status conditions describing the current resource state.
        class WorkstationConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Runtime host for a workstation.
          # @!attribute [rw] gce_instance
          #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::Host::GceInstance]
          #     Specifies a Compute Engine instance as the host.
          class Host
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # A runtime using a Compute Engine instance.
            # @!attribute [rw] machine_type
            #   @return [::String]
            #     Optional. The type of machine to use for VM instances—for example,
            #     `"e2-standard-4"`. For more information about machine types that
            #     Cloud Workstations supports, see the list of
            #     [available machine
            #     types](https://cloud.google.com/workstations/docs/available-machine-types).
            # @!attribute [rw] service_account
            #   @return [::String]
            #     Optional. The email address of the service account for Cloud
            #     Workstations VMs created with this configuration. When specified, be
            #     sure that the service account has `logginglogEntries.create` permission
            #     on the project so it can write logs out to Cloud Logging. If using a
            #     custom container image, the service account must have permissions to
            #     pull the specified image.
            #
            #     If you as the administrator want to be able to `ssh` into the
            #     underlying VM, you need to set this value to a service account
            #     for which you have the `iam.serviceAccounts.actAs` permission.
            #     Conversely, if you don't want anyone to be able to `ssh` into the
            #     underlying VM, use a service account where no one has that
            #     permission.
            #
            #     If not set, VMs run with a service account provided by the
            #     Cloud Workstations service, and the image must be publicly
            #     accessible.
            # @!attribute [rw] service_account_scopes
            #   @return [::Array<::String>]
            #     Optional. Scopes to grant to the
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::Host::GceInstance#service_account service_account}.
            #     Various scopes are automatically added based on feature usage. When
            #     specified, users of workstations under this configuration must have
            #     `iam.serviceAccounts.actAs` on the service account.
            # @!attribute [rw] tags
            #   @return [::Array<::String>]
            #     Optional. Network tags to add to the Compute Engine VMs backing the
            #     workstations. This option applies
            #     [network
            #     tags](https://cloud.google.com/vpc/docs/add-remove-network-tags) to VMs
            #     created with this configuration. These network tags enable the creation
            #     of [firewall
            #     rules](https://cloud.google.com/workstations/docs/configure-firewall-rules).
            # @!attribute [rw] pool_size
            #   @return [::Integer]
            #     Optional. The number of VMs that the system should keep idle so that
            #     new workstations can be started quickly for new users. Defaults to `0`
            #     in the API.
            # @!attribute [r] pooled_instances
            #   @return [::Integer]
            #     Output only. Number of instances currently available in the pool for
            #     faster workstation startup.
            # @!attribute [rw] disable_public_ip_addresses
            #   @return [::Boolean]
            #     Optional. When set to true, disables public IP addresses for VMs. If
            #     you disable public IP addresses, you must set up Private Google Access
            #     or Cloud NAT on your network. If you use Private Google Access and you
            #     use `private.googleapis.com` or `restricted.googleapis.com` for
            #     Container Registry and Artifact Registry, make sure that you set
            #     up DNS records for domains `*.gcr.io` and `*.pkg.dev`.
            #     Defaults to false (VMs have public IP addresses).
            # @!attribute [rw] enable_nested_virtualization
            #   @return [::Boolean]
            #     Optional. Whether to enable nested virtualization on Cloud Workstations
            #     VMs created under this workstation configuration.
            #
            #     Nested virtualization lets you run virtual machine (VM) instances
            #     inside your workstation. Before enabling nested virtualization,
            #     consider the following important considerations. Cloud Workstations
            #     instances are subject to the [same restrictions as Compute Engine
            #     instances](https://cloud.google.com/compute/docs/instances/nested-virtualization/overview#restrictions):
            #
            #     * **Organization policy**: projects, folders, or
            #     organizations may be restricted from creating nested VMs if the
            #     **Disable VM nested virtualization** constraint is enforced in
            #     the organization policy. For more information, see the
            #     Compute Engine section,
            #     [Checking whether nested virtualization is
            #     allowed](https://cloud.google.com/compute/docs/instances/nested-virtualization/managing-constraint#checking_whether_nested_virtualization_is_allowed).
            #     * **Performance**: nested VMs might experience a 10% or greater
            #     decrease in performance for workloads that are CPU-bound and
            #     possibly greater than a 10% decrease for workloads that are
            #     input/output bound.
            #     * **Machine Type**: nested virtualization can only be enabled on
            #     workstation configurations that specify a
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::Host::GceInstance#machine_type machine_type}
            #     in the N1 or N2 machine series.
            #     * **GPUs**: nested virtualization may not be enabled on workstation
            #     configurations with accelerators.
            #     * **Operating System**: Because
            #     [Container-Optimized
            #     OS](https://cloud.google.com/compute/docs/images/os-details#container-optimized_os_cos)
            #     does not support nested virtualization, when nested virtualization is
            #     enabled, the underlying Compute Engine VM instances boot from an
            #     [Ubuntu
            #     LTS](https://cloud.google.com/compute/docs/images/os-details#ubuntu_lts)
            #     image.
            # @!attribute [rw] shielded_instance_config
            #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::Host::GceInstance::GceShieldedInstanceConfig]
            #     Optional. A set of Compute Engine Shielded instance options.
            # @!attribute [rw] confidential_instance_config
            #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::Host::GceInstance::GceConfidentialInstanceConfig]
            #     Optional. A set of Compute Engine Confidential VM instance options.
            # @!attribute [rw] boot_disk_size_gb
            #   @return [::Integer]
            #     Optional. The size of the boot disk for the VM in gigabytes (GB).
            #     The minimum boot disk size is `30` GB. Defaults to `50` GB.
            class GceInstance
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods

              # A set of Compute Engine Shielded instance options.
              # @!attribute [rw] enable_secure_boot
              #   @return [::Boolean]
              #     Optional. Whether the instance has Secure Boot enabled.
              # @!attribute [rw] enable_vtpm
              #   @return [::Boolean]
              #     Optional. Whether the instance has the vTPM enabled.
              # @!attribute [rw] enable_integrity_monitoring
              #   @return [::Boolean]
              #     Optional. Whether the instance has integrity monitoring enabled.
              class GceShieldedInstanceConfig
                include ::Google::Protobuf::MessageExts
                extend ::Google::Protobuf::MessageExts::ClassMethods
              end

              # A set of Compute Engine Confidential VM instance options.
              # @!attribute [rw] enable_confidential_compute
              #   @return [::Boolean]
              #     Optional. Whether the instance has confidential compute enabled.
              class GceConfidentialInstanceConfig
                include ::Google::Protobuf::MessageExts
                extend ::Google::Protobuf::MessageExts::ClassMethods
              end
            end
          end

          # A directory to persist across workstation sessions.
          # @!attribute [rw] gce_pd
          #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk]
          #     A PersistentDirectory backed by a Compute Engine persistent disk.
          # @!attribute [rw] mount_path
          #   @return [::String]
          #     Optional. Location of this directory in the running workstation.
          class PersistentDirectory
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # A PersistentDirectory backed by a Compute Engine regional persistent
            # disk. The
            # {::Google::Cloud::Workstations::V1::WorkstationConfig#persistent_directories persistent_directories}
            # field is repeated, but it may contain only one entry. It creates a
            # [persistent
            # disk](https://cloud.google.com/compute/docs/disks/persistent-disks) that
            # mounts to the workstation VM at `/home` when the session starts and
            # detaches when the session ends. If this field is empty, workstations
            # created with this configuration do not have a persistent home
            # directory.
            # @!attribute [rw] size_gb
            #   @return [::Integer]
            #     Optional. The GB capacity of a persistent home directory for each
            #     workstation created with this configuration. Must be empty if
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk#source_snapshot source_snapshot}
            #     is set.
            #
            #     Valid values are `10`, `50`, `100`, `200`, `500`, or `1000`.
            #     Defaults to `200`. If less than `200` GB, the
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk#disk_type disk_type}
            #     must be
            #     `"pd-balanced"` or `"pd-ssd"`.
            # @!attribute [rw] fs_type
            #   @return [::String]
            #     Optional. Type of file system that the disk should be formatted with.
            #     The workstation image must support this file system type. Must be empty
            #     if
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk#source_snapshot source_snapshot}
            #     is set. Defaults to `"ext4"`.
            # @!attribute [rw] disk_type
            #   @return [::String]
            #     Optional. The [type of the persistent
            #     disk](https://cloud.google.com/compute/docs/disks#disk-types) for the
            #     home directory. Defaults to `"pd-standard"`.
            # @!attribute [rw] source_snapshot
            #   @return [::String]
            #     Optional. Name of the snapshot to use as the source for the disk. If
            #     set,
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk#size_gb size_gb}
            #     and
            #     {::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk#fs_type fs_type}
            #     must be empty.
            # @!attribute [rw] reclaim_policy
            #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig::PersistentDirectory::GceRegionalPersistentDisk::ReclaimPolicy]
            #     Optional. Whether the persistent disk should be deleted when the
            #     workstation is deleted. Valid values are `DELETE` and `RETAIN`.
            #     Defaults to `DELETE`.
            class GceRegionalPersistentDisk
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods

              # Value representing what should happen to the disk after the workstation
              # is deleted.
              module ReclaimPolicy
                # Do not use.
                RECLAIM_POLICY_UNSPECIFIED = 0

                # Delete the persistent disk when deleting the workstation.
                DELETE = 1

                # Keep the persistent disk when deleting the workstation.
                # An administrator must manually delete the disk.
                RETAIN = 2
              end
            end
          end

          # A Docker container.
          # @!attribute [rw] image
          #   @return [::String]
          #     Optional. A Docker container image that defines a custom environment.
          #
          #     Cloud Workstations provides a number of
          #     [preconfigured
          #     images](https://cloud.google.com/workstations/docs/preconfigured-base-images),
          #     but you can create your own
          #     [custom container
          #     images](https://cloud.google.com/workstations/docs/custom-container-images).
          #     If using a private image, the `host.gceInstance.serviceAccount` field
          #     must be specified in the workstation configuration and must have
          #     permission to pull the specified image. Otherwise, the image must be
          #     publicly accessible.
          # @!attribute [rw] command
          #   @return [::Array<::String>]
          #     Optional. If set, overrides the default ENTRYPOINT specified by the
          #     image.
          # @!attribute [rw] args
          #   @return [::Array<::String>]
          #     Optional. Arguments passed to the entrypoint.
          # @!attribute [rw] env
          #   @return [::Google::Protobuf::Map{::String => ::String}]
          #     Optional. Environment variables passed to the container's entrypoint.
          # @!attribute [rw] working_dir
          #   @return [::String]
          #     Optional. If set, overrides the default DIR specified by the image.
          # @!attribute [rw] run_as_user
          #   @return [::Integer]
          #     Optional. If set, overrides the USER specified in the image with the
          #     given uid.
          class Container
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # @!attribute [rw] key
            #   @return [::String]
            # @!attribute [rw] value
            #   @return [::String]
            class EnvEntry
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end

          # A customer-managed encryption key (CMEK) for the Compute Engine
          # resources of the associated workstation configuration. Specify the name of
          # your Cloud KMS encryption key and the default service account.
          # We recommend that you use a separate service account and follow
          # [Cloud KMS best
          # practices](https://cloud.google.com/kms/docs/separation-of-duties).
          # @!attribute [rw] kms_key
          #   @return [::String]
          #     Immutable. The name of the Google Cloud KMS encryption key. For example,
          #     `"projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY_NAME"`.
          #     The key must be in the same region as the workstation configuration.
          # @!attribute [rw] kms_key_service_account
          #   @return [::String]
          #     Immutable. The service account to use with the specified
          #     KMS key. We recommend that you use a separate service account
          #     and follow KMS best practices. For more information, see
          #     [Separation of
          #     duties](https://cloud.google.com/kms/docs/separation-of-duties) and
          #     `gcloud kms keys add-iam-policy-binding`
          #     [`--member`](https://cloud.google.com/sdk/gcloud/reference/kms/keys/add-iam-policy-binding#--member).
          class CustomerEncryptionKey
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # A readiness check to be performed on a workstation.
          # @!attribute [rw] path
          #   @return [::String]
          #     Optional. Path to which the request should be sent.
          # @!attribute [rw] port
          #   @return [::Integer]
          #     Optional. Port to which the request should be sent.
          class ReadinessCheck
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class AnnotationsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # A single instance of a developer workstation with its own persistent storage.
        # @!attribute [rw] name
        #   @return [::String]
        #     Full name of this workstation.
        # @!attribute [rw] display_name
        #   @return [::String]
        #     Optional. Human-readable name for this workstation.
        # @!attribute [r] uid
        #   @return [::String]
        #     Output only. A system-assigned unique identifier for this workstation.
        # @!attribute [r] reconciling
        #   @return [::Boolean]
        #     Output only. Indicates whether this workstation is currently being updated
        #     to match its intended state.
        # @!attribute [rw] annotations
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Optional. Client-specified annotations.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Optional.
        #     [Labels](https://cloud.google.com/workstations/docs/label-resources) that
        #     are applied to the workstation and that are also propagated to the
        #     underlying Compute Engine resources.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation was created.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation was most recently updated.
        # @!attribute [r] start_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation was most recently successfully
        #     started, regardless of the workstation's initial state.
        # @!attribute [r] delete_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time when this workstation was soft-deleted.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. Checksum computed by the server. May be sent on update and delete
        #     requests to make sure that the client has an up-to-date value before
        #     proceeding.
        # @!attribute [r] state
        #   @return [::Google::Cloud::Workstations::V1::Workstation::State]
        #     Output only. Current state of the workstation.
        # @!attribute [r] host
        #   @return [::String]
        #     Output only. Host to which clients can send HTTPS traffic that will be
        #     received by the workstation. Authorized traffic will be received to the
        #     workstation as HTTP on port 80. To send traffic to a different port,
        #     clients may prefix the host with the destination port in the format
        #     `{port}-{host}`.
        class Workstation
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class AnnotationsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Whether a workstation is running and ready to receive user requests.
          module State
            # Do not use.
            STATE_UNSPECIFIED = 0

            # The workstation is not yet ready to accept requests from users but will
            # be soon.
            STATE_STARTING = 1

            # The workstation is ready to accept requests from users.
            STATE_RUNNING = 2

            # The workstation is being stopped.
            STATE_STOPPING = 3

            # The workstation is stopped and will not be able to receive requests until
            # it is started.
            STATE_STOPPED = 4
          end
        end

        # Request message for GetWorkstationCluster.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the requested resource.
        class GetWorkstationClusterRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for ListWorkstationClusters.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     Optional. Maximum number of items to return.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     Optional. next_page_token value returned from a previous List request, if
        #     any.
        class ListWorkstationClustersRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response message for ListWorkstationClusters.
        # @!attribute [rw] workstation_clusters
        #   @return [::Array<::Google::Cloud::Workstations::V1::WorkstationCluster>]
        #     The requested workstation clusters.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     Token to retrieve the next page of results, or empty if there are no more
        #     results in the list.
        # @!attribute [rw] unreachable
        #   @return [::Array<::String>]
        #     Unreachable resources.
        class ListWorkstationClustersResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Message for creating a CreateWorkstationCluster.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] workstation_cluster_id
        #   @return [::String]
        #     Required. ID to use for the workstation cluster.
        # @!attribute [rw] workstation_cluster
        #   @return [::Google::Cloud::Workstations::V1::WorkstationCluster]
        #     Required. Workstation cluster to create.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        class CreateWorkstationClusterRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for UpdateWorkstationCluster.
        # @!attribute [rw] workstation_cluster
        #   @return [::Google::Cloud::Workstations::V1::WorkstationCluster]
        #     Required. Workstation cluster to update.
        # @!attribute [rw] update_mask
        #   @return [::Google::Protobuf::FieldMask]
        #     Required. Mask that specifies which fields in the workstation cluster
        #     should be updated.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] allow_missing
        #   @return [::Boolean]
        #     Optional. If set, and the workstation cluster is not found, a new
        #     workstation cluster will be created. In this situation, update_mask is
        #     ignored.
        class UpdateWorkstationClusterRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Message for deleting a workstation cluster.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the workstation cluster to delete.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     apply it.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. If set, the request will be rejected if the latest version of the
        #     workstation cluster on the server does not have this ETag.
        # @!attribute [rw] force
        #   @return [::Boolean]
        #     Optional. If set, any workstation configurations and workstations in the
        #     workstation cluster are also deleted. Otherwise, the request only
        #     works if the workstation cluster has no configurations or workstations.
        class DeleteWorkstationClusterRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for GetWorkstationConfig.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the requested resource.
        class GetWorkstationConfigRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for ListWorkstationConfigs.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     Optional. Maximum number of items to return.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     Optional. next_page_token value returned from a previous List request, if
        #     any.
        class ListWorkstationConfigsRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response message for ListWorkstationConfigs.
        # @!attribute [rw] workstation_configs
        #   @return [::Array<::Google::Cloud::Workstations::V1::WorkstationConfig>]
        #     The requested configs.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     Token to retrieve the next page of results, or empty if there are no more
        #     results in the list.
        # @!attribute [rw] unreachable
        #   @return [::Array<::String>]
        #     Unreachable resources.
        class ListWorkstationConfigsResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for ListUsableWorkstationConfigs.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     Optional. Maximum number of items to return.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     Optional. next_page_token value returned from a previous List request, if
        #     any.
        class ListUsableWorkstationConfigsRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response message for ListUsableWorkstationConfigs.
        # @!attribute [rw] workstation_configs
        #   @return [::Array<::Google::Cloud::Workstations::V1::WorkstationConfig>]
        #     The requested configs.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     Token to retrieve the next page of results, or empty if there are no more
        #     results in the list.
        # @!attribute [rw] unreachable
        #   @return [::Array<::String>]
        #     Unreachable resources.
        class ListUsableWorkstationConfigsResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Message for creating a CreateWorkstationConfig.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] workstation_config_id
        #   @return [::String]
        #     Required. ID to use for the workstation configuration.
        # @!attribute [rw] workstation_config
        #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig]
        #     Required. Config to create.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        class CreateWorkstationConfigRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for UpdateWorkstationConfig.
        # @!attribute [rw] workstation_config
        #   @return [::Google::Cloud::Workstations::V1::WorkstationConfig]
        #     Required. Config to update.
        # @!attribute [rw] update_mask
        #   @return [::Google::Protobuf::FieldMask]
        #     Required. Mask specifying which fields in the workstation configuration
        #     should be updated.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] allow_missing
        #   @return [::Boolean]
        #     Optional. If set and the workstation configuration is not found, a new
        #     workstation configuration will be created. In this situation,
        #     update_mask is ignored.
        class UpdateWorkstationConfigRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Message for deleting a workstation configuration.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the workstation configuration to delete.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. If set, the request is rejected if the latest version of the
        #     workstation configuration on the server does not have this ETag.
        # @!attribute [rw] force
        #   @return [::Boolean]
        #     Optional. If set, any workstations in the workstation configuration are
        #     also deleted. Otherwise, the request works only if the workstation
        #     configuration has no workstations.
        class DeleteWorkstationConfigRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for GetWorkstation.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the requested resource.
        class GetWorkstationRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for ListWorkstations.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     Optional. Maximum number of items to return.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     Optional. next_page_token value returned from a previous List request, if
        #     any.
        class ListWorkstationsRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response message for ListWorkstations.
        # @!attribute [rw] workstations
        #   @return [::Array<::Google::Cloud::Workstations::V1::Workstation>]
        #     The requested workstations.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     Optional. Token to retrieve the next page of results, or empty if there are
        #     no more results in the list.
        # @!attribute [rw] unreachable
        #   @return [::Array<::String>]
        #     Optional. Unreachable resources.
        class ListWorkstationsResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for ListUsableWorkstations.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     Optional. Maximum number of items to return.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     Optional. next_page_token value returned from a previous List request, if
        #     any.
        class ListUsableWorkstationsRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response message for ListUsableWorkstations.
        # @!attribute [rw] workstations
        #   @return [::Array<::Google::Cloud::Workstations::V1::Workstation>]
        #     The requested workstations.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     Token to retrieve the next page of results, or empty if there are no more
        #     results in the list.
        # @!attribute [rw] unreachable
        #   @return [::Array<::String>]
        #     Unreachable resources.
        class ListUsableWorkstationsResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Message for creating a CreateWorkstation.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. Parent resource name.
        # @!attribute [rw] workstation_id
        #   @return [::String]
        #     Required. ID to use for the workstation.
        # @!attribute [rw] workstation
        #   @return [::Google::Cloud::Workstations::V1::Workstation]
        #     Required. Workstation to create.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        class CreateWorkstationRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for UpdateWorkstation.
        # @!attribute [rw] workstation
        #   @return [::Google::Cloud::Workstations::V1::Workstation]
        #     Required. Workstation to update.
        # @!attribute [rw] update_mask
        #   @return [::Google::Protobuf::FieldMask]
        #     Required. Mask specifying which fields in the workstation configuration
        #     should be updated.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] allow_missing
        #   @return [::Boolean]
        #     Optional. If set and the workstation configuration is not found, a new
        #     workstation configuration is created. In this situation, update_mask
        #     is ignored.
        class UpdateWorkstationRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for DeleteWorkstation.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the workstation to delete.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. If set, the request will be rejected if the latest version of the
        #     workstation on the server does not have this ETag.
        class DeleteWorkstationRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for StartWorkstation.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the workstation to start.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. If set, the request will be rejected if the latest version of the
        #     workstation on the server does not have this ETag.
        class StartWorkstationRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for StopWorkstation.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Name of the workstation to stop.
        # @!attribute [rw] validate_only
        #   @return [::Boolean]
        #     Optional. If set, validate the request and preview the review, but do not
        #     actually apply it.
        # @!attribute [rw] etag
        #   @return [::String]
        #     Optional. If set, the request will be rejected if the latest version of the
        #     workstation on the server does not have this ETag.
        class StopWorkstationRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request message for GenerateAccessToken.
        # @!attribute [rw] expire_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Desired expiration time of the access token. This value must
        #     be at most 24 hours in the future. If a value is not specified, the
        #     token's expiration time will be set to a default value of 1 hour in the
        #     future.
        # @!attribute [rw] ttl
        #   @return [::Google::Protobuf::Duration]
        #     Desired lifetime duration of the access token. This value must
        #     be at most 24 hours. If a value is not specified, the token's lifetime
        #     will be set to a default value of 1 hour.
        # @!attribute [rw] workstation
        #   @return [::String]
        #     Required. Name of the workstation for which the access token should be
        #     generated.
        class GenerateAccessTokenRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response message for GenerateAccessToken.
        # @!attribute [rw] access_token
        #   @return [::String]
        #     The generated bearer access token. To use this token, include it in an
        #     Authorization header of an HTTP request sent to the associated
        #     workstation's hostname—for example, `Authorization: Bearer
        #     <access_token>`.
        # @!attribute [rw] expire_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Time at which the generated token will expire.
        class GenerateAccessTokenResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Metadata for long-running operations.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time that the operation was created.
        # @!attribute [r] end_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. Time that the operation finished running.
        # @!attribute [r] target
        #   @return [::String]
        #     Output only. Server-defined resource path for the target of the operation.
        # @!attribute [r] verb
        #   @return [::String]
        #     Output only. Name of the verb executed by the operation.
        # @!attribute [r] status_message
        #   @return [::String]
        #     Output only. Human-readable status of the operation, if any.
        # @!attribute [r] requested_cancellation
        #   @return [::Boolean]
        #     Output only. Identifies whether the user has requested cancellation
        #     of the operation.
        # @!attribute [r] api_version
        #   @return [::String]
        #     Output only. API version used to start the operation.
        class OperationMetadata
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end
      end
    end
  end
end