# Copyright 2020 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
#
#      http://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.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module AppengineV1beta
      
      # Google Cloud Endpoints (https://cloud.google.com/endpoints) configuration for
      # API handlers.
      class ApiConfigHandler
        include Google::Apis::Core::Hashable
      
        # Action to take when users access resources that require authentication.
        # Defaults to redirect.
        # Corresponds to the JSON property `authFailAction`
        # @return [String]
        attr_accessor :auth_fail_action
      
        # Level of login required to access this resource. Defaults to optional.
        # Corresponds to the JSON property `login`
        # @return [String]
        attr_accessor :login
      
        # Path to the script from the application root directory.
        # Corresponds to the JSON property `script`
        # @return [String]
        attr_accessor :script
      
        # Security (HTTPS) enforcement for this URL.
        # Corresponds to the JSON property `securityLevel`
        # @return [String]
        attr_accessor :security_level
      
        # URL to serve the endpoint at.
        # Corresponds to the JSON property `url`
        # @return [String]
        attr_accessor :url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auth_fail_action = args[:auth_fail_action] if args.key?(:auth_fail_action)
          @login = args[:login] if args.key?(:login)
          @script = args[:script] if args.key?(:script)
          @security_level = args[:security_level] if args.key?(:security_level)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Uses Google Cloud Endpoints to handle requests.
      class ApiEndpointHandler
        include Google::Apis::Core::Hashable
      
        # Path to the script from the application root directory.
        # Corresponds to the JSON property `scriptPath`
        # @return [String]
        attr_accessor :script_path
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @script_path = args[:script_path] if args.key?(:script_path)
        end
      end
      
      # An Application resource contains the top-level configuration of an App Engine
      # application.
      class Application
        include Google::Apis::Core::Hashable
      
        # Google Apps authentication domain that controls which users can access this
        # application.Defaults to open access for any Google Account.
        # Corresponds to the JSON property `authDomain`
        # @return [String]
        attr_accessor :auth_domain
      
        # Output only. Google Cloud Storage bucket that can be used for storing files
        # associated with this application. This bucket is associated with the
        # application and can be used by the gcloud deployment commands.@OutputOnly
        # Corresponds to the JSON property `codeBucket`
        # @return [String]
        attr_accessor :code_bucket
      
        # The type of the Cloud Firestore or Cloud Datastore database associated with
        # this application.
        # Corresponds to the JSON property `databaseType`
        # @return [String]
        attr_accessor :database_type
      
        # Output only. Google Cloud Storage bucket that can be used by this application
        # to store content.@OutputOnly
        # Corresponds to the JSON property `defaultBucket`
        # @return [String]
        attr_accessor :default_bucket
      
        # Cookie expiration policy for this application.
        # Corresponds to the JSON property `defaultCookieExpiration`
        # @return [String]
        attr_accessor :default_cookie_expiration
      
        # Output only. Hostname used to reach this application, as resolved by App
        # Engine.@OutputOnly
        # Corresponds to the JSON property `defaultHostname`
        # @return [String]
        attr_accessor :default_hostname
      
        # HTTP path dispatch rules for requests to the application that do not
        # explicitly target a service or version. Rules are order-dependent. Up to 20
        # dispatch rules can be supported.
        # Corresponds to the JSON property `dispatchRules`
        # @return [Array<Google::Apis::AppengineV1beta::UrlDispatchRule>]
        attr_accessor :dispatch_rules
      
        # The feature specific settings to be used in the application. These define
        # behaviors that are user configurable.
        # Corresponds to the JSON property `featureSettings`
        # @return [Google::Apis::AppengineV1beta::FeatureSettings]
        attr_accessor :feature_settings
      
        # Output only. The Google Container Registry domain used for storing managed
        # build docker images for this application.
        # Corresponds to the JSON property `gcrDomain`
        # @return [String]
        attr_accessor :gcr_domain
      
        # Additional Google Generated Customer Metadata, this field won't be provided by
        # default and can be requested by setting the IncludeExtraData field in
        # GetApplicationRequest
        # Corresponds to the JSON property `generatedCustomerMetadata`
        # @return [Hash<String,Object>]
        attr_accessor :generated_customer_metadata
      
        # Identity-Aware Proxy
        # Corresponds to the JSON property `iap`
        # @return [Google::Apis::AppengineV1beta::IdentityAwareProxy]
        attr_accessor :iap
      
        # Identifier of the Application resource. This identifier is equivalent to the
        # project ID of the Google Cloud Platform project where you want to deploy your
        # application. Example: myapp.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Location from which this application runs. Application instances run out of
        # the data centers in the specified location, which is also where all of the
        # application's end user content is stored.Defaults to us-central.View the list
        # of supported locations (https://cloud.google.com/appengine/docs/locations).
        # Corresponds to the JSON property `locationId`
        # @return [String]
        attr_accessor :location_id
      
        # 
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The service account associated with the application. This is the app-level
        # default identity. If no identity provided during create version, Admin API
        # will fallback to this one.
        # Corresponds to the JSON property `serviceAccount`
        # @return [String]
        attr_accessor :service_account
      
        # Serving status of this application.
        # Corresponds to the JSON property `servingStatus`
        # @return [String]
        attr_accessor :serving_status
      
        # The SSL policy that will be applied to the application. If set to Modern it
        # will restrict traffic with TLS < 1.2 and allow only Modern Ciphers suite
        # Corresponds to the JSON property `sslPolicy`
        # @return [String]
        attr_accessor :ssl_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auth_domain = args[:auth_domain] if args.key?(:auth_domain)
          @code_bucket = args[:code_bucket] if args.key?(:code_bucket)
          @database_type = args[:database_type] if args.key?(:database_type)
          @default_bucket = args[:default_bucket] if args.key?(:default_bucket)
          @default_cookie_expiration = args[:default_cookie_expiration] if args.key?(:default_cookie_expiration)
          @default_hostname = args[:default_hostname] if args.key?(:default_hostname)
          @dispatch_rules = args[:dispatch_rules] if args.key?(:dispatch_rules)
          @feature_settings = args[:feature_settings] if args.key?(:feature_settings)
          @gcr_domain = args[:gcr_domain] if args.key?(:gcr_domain)
          @generated_customer_metadata = args[:generated_customer_metadata] if args.key?(:generated_customer_metadata)
          @iap = args[:iap] if args.key?(:iap)
          @id = args[:id] if args.key?(:id)
          @location_id = args[:location_id] if args.key?(:location_id)
          @name = args[:name] if args.key?(:name)
          @service_account = args[:service_account] if args.key?(:service_account)
          @serving_status = args[:serving_status] if args.key?(:serving_status)
          @ssl_policy = args[:ssl_policy] if args.key?(:ssl_policy)
        end
      end
      
      # An SSL certificate that a user has been authorized to administer. A user is
      # authorized to administer any certificate that applies to one of their
      # authorized domains.
      class AuthorizedCertificate
        include Google::Apis::Core::Hashable
      
        # An SSL certificate obtained from a certificate authority.
        # Corresponds to the JSON property `certificateRawData`
        # @return [Google::Apis::AppengineV1beta::CertificateRawData]
        attr_accessor :certificate_raw_data
      
        # The user-specified display name of the certificate. This is not guaranteed to
        # be unique. Example: My Certificate.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Aggregate count of the domain mappings with this certificate mapped. This
        # count includes domain mappings on applications for which the user does not
        # have VIEWER permissions.Only returned by GET or LIST requests when
        # specifically requested by the view=FULL_CERTIFICATE option.@OutputOnly
        # Corresponds to the JSON property `domainMappingsCount`
        # @return [Fixnum]
        attr_accessor :domain_mappings_count
      
        # Topmost applicable domains of this certificate. This certificate applies to
        # these domains and their subdomains. Example: example.com.@OutputOnly
        # Corresponds to the JSON property `domainNames`
        # @return [Array<String>]
        attr_accessor :domain_names
      
        # The time when this certificate expires. To update the renewal time on this
        # certificate, upload an SSL certificate with a different expiration time using
        # AuthorizedCertificates.UpdateAuthorizedCertificate.@OutputOnly
        # Corresponds to the JSON property `expireTime`
        # @return [String]
        attr_accessor :expire_time
      
        # Relative name of the certificate. This is a unique value autogenerated on
        # AuthorizedCertificate resource creation. Example: 12345.@OutputOnly
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A certificate managed by App Engine.
        # Corresponds to the JSON property `managedCertificate`
        # @return [Google::Apis::AppengineV1beta::ManagedCertificate]
        attr_accessor :managed_certificate
      
        # Full path to the AuthorizedCertificate resource in the API. Example: apps/
        # myapp/authorizedCertificates/12345.@OutputOnly
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The full paths to user visible Domain Mapping resources that have this
        # certificate mapped. Example: apps/myapp/domainMappings/example.com.This may
        # not represent the full list of mapped domain mappings if the user does not
        # have VIEWER permissions on all of the applications that have this certificate
        # mapped. See domain_mappings_count for a complete count.Only returned by GET or
        # LIST requests when specifically requested by the view=FULL_CERTIFICATE option.@
        # OutputOnly
        # Corresponds to the JSON property `visibleDomainMappings`
        # @return [Array<String>]
        attr_accessor :visible_domain_mappings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @certificate_raw_data = args[:certificate_raw_data] if args.key?(:certificate_raw_data)
          @display_name = args[:display_name] if args.key?(:display_name)
          @domain_mappings_count = args[:domain_mappings_count] if args.key?(:domain_mappings_count)
          @domain_names = args[:domain_names] if args.key?(:domain_names)
          @expire_time = args[:expire_time] if args.key?(:expire_time)
          @id = args[:id] if args.key?(:id)
          @managed_certificate = args[:managed_certificate] if args.key?(:managed_certificate)
          @name = args[:name] if args.key?(:name)
          @visible_domain_mappings = args[:visible_domain_mappings] if args.key?(:visible_domain_mappings)
        end
      end
      
      # A domain that a user has been authorized to administer. To authorize use of a
      # domain, verify ownership via Search Console (https://search.google.com/search-
      # console/welcome).
      class AuthorizedDomain
        include Google::Apis::Core::Hashable
      
        # Fully qualified domain name of the domain authorized for use. Example: example.
        # com.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Full path to the AuthorizedDomain resource in the API. Example: apps/myapp/
        # authorizedDomains/example.com.@OutputOnly
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Automatic scaling is based on request rate, response latencies, and other
      # application metrics.
      class AutomaticScaling
        include Google::Apis::Core::Hashable
      
        # The time period that the Autoscaler (https://cloud.google.com/compute/docs/
        # autoscaler/) should wait before it starts collecting information from a new
        # instance. This prevents the autoscaler from collecting information when the
        # instance is initializing, during which the collected usage would not be
        # reliable. Only applicable in the App Engine flexible environment.
        # Corresponds to the JSON property `coolDownPeriod`
        # @return [String]
        attr_accessor :cool_down_period
      
        # Target scaling by CPU usage.
        # Corresponds to the JSON property `cpuUtilization`
        # @return [Google::Apis::AppengineV1beta::CpuUtilization]
        attr_accessor :cpu_utilization
      
        # Target scaling by user-provided metrics. Only applicable in the App Engine
        # flexible environment.
        # Corresponds to the JSON property `customMetrics`
        # @return [Array<Google::Apis::AppengineV1beta::CustomMetric>]
        attr_accessor :custom_metrics
      
        # Target scaling by disk usage. Only applicable in the App Engine flexible
        # environment.
        # Corresponds to the JSON property `diskUtilization`
        # @return [Google::Apis::AppengineV1beta::DiskUtilization]
        attr_accessor :disk_utilization
      
        # Number of concurrent requests an automatic scaling instance can accept before
        # the scheduler spawns a new instance.Defaults to a runtime-specific value.
        # Corresponds to the JSON property `maxConcurrentRequests`
        # @return [Fixnum]
        attr_accessor :max_concurrent_requests
      
        # Maximum number of idle instances that should be maintained for this version.
        # Corresponds to the JSON property `maxIdleInstances`
        # @return [Fixnum]
        attr_accessor :max_idle_instances
      
        # Maximum amount of time that a request should wait in the pending queue before
        # starting a new instance to handle it.
        # Corresponds to the JSON property `maxPendingLatency`
        # @return [String]
        attr_accessor :max_pending_latency
      
        # Maximum number of instances that should be started to handle requests for this
        # version.
        # Corresponds to the JSON property `maxTotalInstances`
        # @return [Fixnum]
        attr_accessor :max_total_instances
      
        # Minimum number of idle instances that should be maintained for this version.
        # Only applicable for the default version of a service.
        # Corresponds to the JSON property `minIdleInstances`
        # @return [Fixnum]
        attr_accessor :min_idle_instances
      
        # Minimum amount of time a request should wait in the pending queue before
        # starting a new instance to handle it.
        # Corresponds to the JSON property `minPendingLatency`
        # @return [String]
        attr_accessor :min_pending_latency
      
        # Minimum number of running instances that should be maintained for this version.
        # Corresponds to the JSON property `minTotalInstances`
        # @return [Fixnum]
        attr_accessor :min_total_instances
      
        # Target scaling by network usage. Only applicable in the App Engine flexible
        # environment.
        # Corresponds to the JSON property `networkUtilization`
        # @return [Google::Apis::AppengineV1beta::NetworkUtilization]
        attr_accessor :network_utilization
      
        # Target scaling by request utilization. Only applicable in the App Engine
        # flexible environment.
        # Corresponds to the JSON property `requestUtilization`
        # @return [Google::Apis::AppengineV1beta::RequestUtilization]
        attr_accessor :request_utilization
      
        # Scheduler settings for standard environment.
        # Corresponds to the JSON property `standardSchedulerSettings`
        # @return [Google::Apis::AppengineV1beta::StandardSchedulerSettings]
        attr_accessor :standard_scheduler_settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cool_down_period = args[:cool_down_period] if args.key?(:cool_down_period)
          @cpu_utilization = args[:cpu_utilization] if args.key?(:cpu_utilization)
          @custom_metrics = args[:custom_metrics] if args.key?(:custom_metrics)
          @disk_utilization = args[:disk_utilization] if args.key?(:disk_utilization)
          @max_concurrent_requests = args[:max_concurrent_requests] if args.key?(:max_concurrent_requests)
          @max_idle_instances = args[:max_idle_instances] if args.key?(:max_idle_instances)
          @max_pending_latency = args[:max_pending_latency] if args.key?(:max_pending_latency)
          @max_total_instances = args[:max_total_instances] if args.key?(:max_total_instances)
          @min_idle_instances = args[:min_idle_instances] if args.key?(:min_idle_instances)
          @min_pending_latency = args[:min_pending_latency] if args.key?(:min_pending_latency)
          @min_total_instances = args[:min_total_instances] if args.key?(:min_total_instances)
          @network_utilization = args[:network_utilization] if args.key?(:network_utilization)
          @request_utilization = args[:request_utilization] if args.key?(:request_utilization)
          @standard_scheduler_settings = args[:standard_scheduler_settings] if args.key?(:standard_scheduler_settings)
        end
      end
      
      # A service with basic scaling will create an instance when the application
      # receives a request. The instance will be turned down when the app becomes idle.
      # Basic scaling is ideal for work that is intermittent or driven by user
      # activity.
      class BasicScaling
        include Google::Apis::Core::Hashable
      
        # Duration of time after the last request that an instance must wait before the
        # instance is shut down.
        # Corresponds to the JSON property `idleTimeout`
        # @return [String]
        attr_accessor :idle_timeout
      
        # Maximum number of instances to create for this version.
        # Corresponds to the JSON property `maxInstances`
        # @return [Fixnum]
        attr_accessor :max_instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @idle_timeout = args[:idle_timeout] if args.key?(:idle_timeout)
          @max_instances = args[:max_instances] if args.key?(:max_instances)
        end
      end
      
      # Request message for Firewall.BatchUpdateIngressRules.
      class BatchUpdateIngressRulesRequest
        include Google::Apis::Core::Hashable
      
        # A list of FirewallRules to replace the existing set.
        # Corresponds to the JSON property `ingressRules`
        # @return [Array<Google::Apis::AppengineV1beta::FirewallRule>]
        attr_accessor :ingress_rules
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ingress_rules = args[:ingress_rules] if args.key?(:ingress_rules)
        end
      end
      
      # Response message for Firewall.UpdateAllIngressRules.
      class BatchUpdateIngressRulesResponse
        include Google::Apis::Core::Hashable
      
        # The full list of ingress FirewallRules for this application.
        # Corresponds to the JSON property `ingressRules`
        # @return [Array<Google::Apis::AppengineV1beta::FirewallRule>]
        attr_accessor :ingress_rules
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ingress_rules = args[:ingress_rules] if args.key?(:ingress_rules)
        end
      end
      
      # Google Cloud Build information.
      class BuildInfo
        include Google::Apis::Core::Hashable
      
        # The Google Cloud Build id. Example: "f966068f-08b2-42c8-bdfe-74137dff2bf9"
        # Corresponds to the JSON property `cloudBuildId`
        # @return [String]
        attr_accessor :cloud_build_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_build_id = args[:cloud_build_id] if args.key?(:cloud_build_id)
        end
      end
      
      # An SSL certificate obtained from a certificate authority.
      class CertificateRawData
        include Google::Apis::Core::Hashable
      
        # Unencrypted PEM encoded RSA private key. This field is set once on certificate
        # creation and then encrypted. The key size must be 2048 bits or fewer. Must
        # include the header and footer. Example: -----BEGIN RSA PRIVATE KEY----- -----
        # END RSA PRIVATE KEY----- @InputOnly
        # Corresponds to the JSON property `privateKey`
        # @return [String]
        attr_accessor :private_key
      
        # PEM encoded x.509 public key certificate. This field is set once on
        # certificate creation. Must include the header and footer. Example: -----BEGIN
        # CERTIFICATE----- -----END CERTIFICATE-----
        # Corresponds to the JSON property `publicCertificate`
        # @return [String]
        attr_accessor :public_certificate
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @private_key = args[:private_key] if args.key?(:private_key)
          @public_certificate = args[:public_certificate] if args.key?(:public_certificate)
        end
      end
      
      # Options for the build operations performed as a part of the version deployment.
      # Only applicable for App Engine flexible environment when creating a version
      # using source code directly.
      class CloudBuildOptions
        include Google::Apis::Core::Hashable
      
        # Path to the yaml file used in deployment, used to determine runtime
        # configuration details.Required for flexible environment builds.See https://
        # cloud.google.com/appengine/docs/standard/python/config/appref for more details.
        # Corresponds to the JSON property `appYamlPath`
        # @return [String]
        attr_accessor :app_yaml_path
      
        # The Cloud Build timeout used as part of any dependent builds performed by
        # version creation. Defaults to 10 minutes.
        # Corresponds to the JSON property `cloudBuildTimeout`
        # @return [String]
        attr_accessor :cloud_build_timeout
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_yaml_path = args[:app_yaml_path] if args.key?(:app_yaml_path)
          @cloud_build_timeout = args[:cloud_build_timeout] if args.key?(:cloud_build_timeout)
        end
      end
      
      # Docker image that is used to create a container and start a VM instance for
      # the version that you deploy. Only applicable for instances running in the App
      # Engine flexible environment.
      class ContainerInfo
        include Google::Apis::Core::Hashable
      
        # URI to the hosted container image in Google Container Registry. The URI must
        # be fully qualified and include a tag or digest. Examples: "gcr.io/my-project/
        # image:tag" or "gcr.io/my-project/image@digest"
        # Corresponds to the JSON property `image`
        # @return [String]
        attr_accessor :image
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @image = args[:image] if args.key?(:image)
        end
      end
      
      # ContainerState contains the externally-visible container state that is used to
      # communicate the state and reasoning for that state to the CLH. This data is
      # not persisted by CCFE, but is instead derived from CCFE's internal
      # representation of the container state.
      class ContainerState
        include Google::Apis::Core::Hashable
      
        # Containers transition between and within states based on reasons sent from
        # various systems. CCFE will provide the CLH with reasons for the current state
        # per system.The current systems that CCFE supports are: Service Management (
        # Inception) Data Governance (Wipeout) Abuse (Ares) Billing (Internal Cloud
        # Billing API) Service Activation (Service Controller)
        # Corresponds to the JSON property `currentReasons`
        # @return [Google::Apis::AppengineV1beta::Reasons]
        attr_accessor :current_reasons
      
        # Containers transition between and within states based on reasons sent from
        # various systems. CCFE will provide the CLH with reasons for the current state
        # per system.The current systems that CCFE supports are: Service Management (
        # Inception) Data Governance (Wipeout) Abuse (Ares) Billing (Internal Cloud
        # Billing API) Service Activation (Service Controller)
        # Corresponds to the JSON property `previousReasons`
        # @return [Google::Apis::AppengineV1beta::Reasons]
        attr_accessor :previous_reasons
      
        # The current state of the container. This state is the culmination of all of
        # the opinions from external systems that CCFE knows about of the container.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @current_reasons = args[:current_reasons] if args.key?(:current_reasons)
          @previous_reasons = args[:previous_reasons] if args.key?(:previous_reasons)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Target scaling by CPU usage.
      class CpuUtilization
        include Google::Apis::Core::Hashable
      
        # Period of time over which CPU utilization is calculated.
        # Corresponds to the JSON property `aggregationWindowLength`
        # @return [String]
        attr_accessor :aggregation_window_length
      
        # Target CPU utilization ratio to maintain when scaling. Must be between 0 and 1.
        # Corresponds to the JSON property `targetUtilization`
        # @return [Float]
        attr_accessor :target_utilization
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aggregation_window_length = args[:aggregation_window_length] if args.key?(:aggregation_window_length)
          @target_utilization = args[:target_utilization] if args.key?(:target_utilization)
        end
      end
      
      # Metadata for the given google.longrunning.Operation during a google.appengine.
      # v1.CreateVersionRequest.
      class CreateVersionMetadataV1
        include Google::Apis::Core::Hashable
      
        # The Cloud Build ID if one was created as part of the version create. @
        # OutputOnly
        # Corresponds to the JSON property `cloudBuildId`
        # @return [String]
        attr_accessor :cloud_build_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_build_id = args[:cloud_build_id] if args.key?(:cloud_build_id)
        end
      end
      
      # Metadata for the given google.longrunning.Operation during a google.appengine.
      # v1alpha.CreateVersionRequest.
      class CreateVersionMetadataV1Alpha
        include Google::Apis::Core::Hashable
      
        # The Cloud Build ID if one was created as part of the version create. @
        # OutputOnly
        # Corresponds to the JSON property `cloudBuildId`
        # @return [String]
        attr_accessor :cloud_build_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_build_id = args[:cloud_build_id] if args.key?(:cloud_build_id)
        end
      end
      
      # Metadata for the given google.longrunning.Operation during a google.appengine.
      # v1beta.CreateVersionRequest.
      class CreateVersionMetadataV1Beta
        include Google::Apis::Core::Hashable
      
        # The Cloud Build ID if one was created as part of the version create. @
        # OutputOnly
        # Corresponds to the JSON property `cloudBuildId`
        # @return [String]
        attr_accessor :cloud_build_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_build_id = args[:cloud_build_id] if args.key?(:cloud_build_id)
        end
      end
      
      # Allows autoscaling based on Stackdriver metrics.
      class CustomMetric
        include Google::Apis::Core::Hashable
      
        # Allows filtering on the metric's fields.
        # Corresponds to the JSON property `filter`
        # @return [String]
        attr_accessor :filter
      
        # The name of the metric.
        # Corresponds to the JSON property `metricName`
        # @return [String]
        attr_accessor :metric_name
      
        # May be used instead of target_utilization when an instance can handle a
        # specific amount of work/resources and the metric value is equal to the current
        # amount of work remaining. The autoscaler will try to keep the number of
        # instances equal to the metric value divided by single_instance_assignment.
        # Corresponds to the JSON property `singleInstanceAssignment`
        # @return [Float]
        attr_accessor :single_instance_assignment
      
        # The type of the metric. Must be a string representing a Stackdriver metric
        # type e.g. GAGUE, DELTA_PER_SECOND, etc.
        # Corresponds to the JSON property `targetType`
        # @return [String]
        attr_accessor :target_type
      
        # The target value for the metric.
        # Corresponds to the JSON property `targetUtilization`
        # @return [Float]
        attr_accessor :target_utilization
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @filter = args[:filter] if args.key?(:filter)
          @metric_name = args[:metric_name] if args.key?(:metric_name)
          @single_instance_assignment = args[:single_instance_assignment] if args.key?(:single_instance_assignment)
          @target_type = args[:target_type] if args.key?(:target_type)
          @target_utilization = args[:target_utilization] if args.key?(:target_utilization)
        end
      end
      
      # Represents a whole or partial calendar date, such as a birthday. The time of
      # day and time zone are either specified elsewhere or are insignificant. The
      # date is relative to the Gregorian Calendar. This can represent one of the
      # following: A full date, with non-zero year, month, and day values. A month and
      # day, with a zero year (for example, an anniversary). A year on its own, with a
      # zero month and a zero day. A year and month, with a zero day (for example, a
      # credit card expiration date).Related types: google.type.TimeOfDay google.type.
      # DateTime google.protobuf.Timestamp
      class Date
        include Google::Apis::Core::Hashable
      
        # Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to
        # specify a year by itself or a year and month where the day isn't significant.
        # Corresponds to the JSON property `day`
        # @return [Fixnum]
        attr_accessor :day
      
        # Month of a year. Must be from 1 to 12, or 0 to specify a year without a month
        # and day.
        # Corresponds to the JSON property `month`
        # @return [Fixnum]
        attr_accessor :month
      
        # Year of the date. Must be from 1 to 9999, or 0 to specify a date without a
        # year.
        # Corresponds to the JSON property `year`
        # @return [Fixnum]
        attr_accessor :year
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day = args[:day] if args.key?(:day)
          @month = args[:month] if args.key?(:month)
          @year = args[:year] if args.key?(:year)
        end
      end
      
      # Request message for Instances.DebugInstance.
      class DebugInstanceRequest
        include Google::Apis::Core::Hashable
      
        # Public SSH key to add to the instance. Examples: [USERNAME]:ssh-rsa [KEY_VALUE]
        # [USERNAME] [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh `"userName":"[USERNAME]",
        # "expireOn":"[EXPIRE_TIME]"`For more information, see Adding and Removing SSH
        # Keys (https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys)
        # .
        # Corresponds to the JSON property `sshKey`
        # @return [String]
        attr_accessor :ssh_key
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ssh_key = args[:ssh_key] if args.key?(:ssh_key)
        end
      end
      
      # Code and application artifacts used to deploy a version to App Engine.
      class Deployment
        include Google::Apis::Core::Hashable
      
        # Google Cloud Build information.
        # Corresponds to the JSON property `build`
        # @return [Google::Apis::AppengineV1beta::BuildInfo]
        attr_accessor :build
      
        # Options for the build operations performed as a part of the version deployment.
        # Only applicable for App Engine flexible environment when creating a version
        # using source code directly.
        # Corresponds to the JSON property `cloudBuildOptions`
        # @return [Google::Apis::AppengineV1beta::CloudBuildOptions]
        attr_accessor :cloud_build_options
      
        # Docker image that is used to create a container and start a VM instance for
        # the version that you deploy. Only applicable for instances running in the App
        # Engine flexible environment.
        # Corresponds to the JSON property `container`
        # @return [Google::Apis::AppengineV1beta::ContainerInfo]
        attr_accessor :container
      
        # Manifest of the files stored in Google Cloud Storage that are included as part
        # of this version. All files must be readable using the credentials supplied
        # with this call.
        # Corresponds to the JSON property `files`
        # @return [Hash<String,Google::Apis::AppengineV1beta::FileInfo>]
        attr_accessor :files
      
        # The zip file information for a zip deployment.
        # Corresponds to the JSON property `zip`
        # @return [Google::Apis::AppengineV1beta::ZipInfo]
        attr_accessor :zip
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @build = args[:build] if args.key?(:build)
          @cloud_build_options = args[:cloud_build_options] if args.key?(:cloud_build_options)
          @container = args[:container] if args.key?(:container)
          @files = args[:files] if args.key?(:files)
          @zip = args[:zip] if args.key?(:zip)
        end
      end
      
      # Target scaling by disk usage. Only applicable in the App Engine flexible
      # environment.
      class DiskUtilization
        include Google::Apis::Core::Hashable
      
        # Target bytes read per second.
        # Corresponds to the JSON property `targetReadBytesPerSecond`
        # @return [Fixnum]
        attr_accessor :target_read_bytes_per_second
      
        # Target ops read per seconds.
        # Corresponds to the JSON property `targetReadOpsPerSecond`
        # @return [Fixnum]
        attr_accessor :target_read_ops_per_second
      
        # Target bytes written per second.
        # Corresponds to the JSON property `targetWriteBytesPerSecond`
        # @return [Fixnum]
        attr_accessor :target_write_bytes_per_second
      
        # Target ops written per second.
        # Corresponds to the JSON property `targetWriteOpsPerSecond`
        # @return [Fixnum]
        attr_accessor :target_write_ops_per_second
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_read_bytes_per_second = args[:target_read_bytes_per_second] if args.key?(:target_read_bytes_per_second)
          @target_read_ops_per_second = args[:target_read_ops_per_second] if args.key?(:target_read_ops_per_second)
          @target_write_bytes_per_second = args[:target_write_bytes_per_second] if args.key?(:target_write_bytes_per_second)
          @target_write_ops_per_second = args[:target_write_ops_per_second] if args.key?(:target_write_ops_per_second)
        end
      end
      
      # A domain serving an App Engine application.
      class DomainMapping
        include Google::Apis::Core::Hashable
      
        # Relative name of the domain serving the application. Example: example.com.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Full path to the DomainMapping resource in the API. Example: apps/myapp/
        # domainMapping/example.com.@OutputOnly
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The resource records required to configure this domain mapping. These records
        # must be added to the domain's DNS configuration in order to serve the
        # application via this domain mapping.@OutputOnly
        # Corresponds to the JSON property `resourceRecords`
        # @return [Array<Google::Apis::AppengineV1beta::ResourceRecord>]
        attr_accessor :resource_records
      
        # SSL configuration for a DomainMapping resource.
        # Corresponds to the JSON property `sslSettings`
        # @return [Google::Apis::AppengineV1beta::SslSettings]
        attr_accessor :ssl_settings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @name = args[:name] if args.key?(:name)
          @resource_records = args[:resource_records] if args.key?(:resource_records)
          @ssl_settings = args[:ssl_settings] if args.key?(:ssl_settings)
        end
      end
      
      # A generic empty message that you can re-use to avoid defining duplicated empty
      # messages in your APIs. A typical example is to use it as the request or the
      # response type of an API method. For instance: service Foo ` rpc Bar(google.
      # protobuf.Empty) returns (google.protobuf.Empty); `
      class Empty
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Google Cloud Endpoints (https://cloud.google.com/endpoints) configuration. The
      # Endpoints API Service provides tooling for serving Open API and gRPC endpoints
      # via an NGINX proxy. Only valid for App Engine Flexible environment deployments.
      # The fields here refer to the name and configuration ID of a "service" resource
      # in the Service Management API (https://cloud.google.com/service-management/
      # overview).
      class EndpointsApiService
        include Google::Apis::Core::Hashable
      
        # Endpoints service configuration ID as specified by the Service Management API.
        # For example "2016-09-19r1".By default, the rollout strategy for Endpoints is
        # RolloutStrategy.FIXED. This means that Endpoints starts up with a particular
        # configuration ID. When a new configuration is rolled out, Endpoints must be
        # given the new configuration ID. The config_id field is used to give the
        # configuration ID and is required in this case.Endpoints also has a rollout
        # strategy called RolloutStrategy.MANAGED. When using this, Endpoints fetches
        # the latest configuration and does not need the configuration ID. In this case,
        # config_id must be omitted.
        # Corresponds to the JSON property `configId`
        # @return [String]
        attr_accessor :config_id
      
        # Enable or disable trace sampling. By default, this is set to false for enabled.
        # Corresponds to the JSON property `disableTraceSampling`
        # @return [Boolean]
        attr_accessor :disable_trace_sampling
        alias_method :disable_trace_sampling?, :disable_trace_sampling
      
        # Endpoints service name which is the name of the "service" resource in the
        # Service Management API. For example "myapi.endpoints.myproject.cloud.goog"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Endpoints rollout strategy. If FIXED, config_id must be specified. If MANAGED,
        # config_id must be omitted.
        # Corresponds to the JSON property `rolloutStrategy`
        # @return [String]
        attr_accessor :rollout_strategy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @config_id = args[:config_id] if args.key?(:config_id)
          @disable_trace_sampling = args[:disable_trace_sampling] if args.key?(:disable_trace_sampling)
          @name = args[:name] if args.key?(:name)
          @rollout_strategy = args[:rollout_strategy] if args.key?(:rollout_strategy)
        end
      end
      
      # The entrypoint for the application.
      class Entrypoint
        include Google::Apis::Core::Hashable
      
        # The format should be a shell command that can be fed to bash -c.
        # Corresponds to the JSON property `shell`
        # @return [String]
        attr_accessor :shell
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @shell = args[:shell] if args.key?(:shell)
        end
      end
      
      # Custom static error page to be served when an error occurs.
      class ErrorHandler
        include Google::Apis::Core::Hashable
      
        # Error condition this handler applies to.
        # Corresponds to the JSON property `errorCode`
        # @return [String]
        attr_accessor :error_code
      
        # MIME type of file. Defaults to text/html.
        # Corresponds to the JSON property `mimeType`
        # @return [String]
        attr_accessor :mime_type
      
        # Static file content to be served for this error.
        # Corresponds to the JSON property `staticFile`
        # @return [String]
        attr_accessor :static_file
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @error_code = args[:error_code] if args.key?(:error_code)
          @mime_type = args[:mime_type] if args.key?(:mime_type)
          @static_file = args[:static_file] if args.key?(:static_file)
        end
      end
      
      # The feature specific settings to be used in the application. These define
      # behaviors that are user configurable.
      class FeatureSettings
        include Google::Apis::Core::Hashable
      
        # Boolean value indicating if split health checks should be used instead of the
        # legacy health checks. At an app.yaml level, this means defaulting to '
        # readiness_check' and 'liveness_check' values instead of 'health_check' ones.
        # Once the legacy 'health_check' behavior is deprecated, and this value is
        # always true, this setting can be removed.
        # Corresponds to the JSON property `splitHealthChecks`
        # @return [Boolean]
        attr_accessor :split_health_checks
        alias_method :split_health_checks?, :split_health_checks
      
        # If true, use Container-Optimized OS (https://cloud.google.com/container-
        # optimized-os/) base image for VMs, rather than a base Debian image.
        # Corresponds to the JSON property `useContainerOptimizedOs`
        # @return [Boolean]
        attr_accessor :use_container_optimized_os
        alias_method :use_container_optimized_os?, :use_container_optimized_os
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @split_health_checks = args[:split_health_checks] if args.key?(:split_health_checks)
          @use_container_optimized_os = args[:use_container_optimized_os] if args.key?(:use_container_optimized_os)
        end
      end
      
      # Single source file that is part of the version to be deployed. Each source
      # file that is deployed must be specified separately.
      class FileInfo
        include Google::Apis::Core::Hashable
      
        # The MIME type of the file.Defaults to the value from Google Cloud Storage.
        # Corresponds to the JSON property `mimeType`
        # @return [String]
        attr_accessor :mime_type
      
        # The SHA1 hash of the file, in hex.
        # Corresponds to the JSON property `sha1Sum`
        # @return [String]
        attr_accessor :sha1_sum
      
        # URL source to use to fetch this file. Must be a URL to a resource in Google
        # Cloud Storage in the form 'http(s)://storage.googleapis.com//'.
        # Corresponds to the JSON property `sourceUrl`
        # @return [String]
        attr_accessor :source_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @mime_type = args[:mime_type] if args.key?(:mime_type)
          @sha1_sum = args[:sha1_sum] if args.key?(:sha1_sum)
          @source_url = args[:source_url] if args.key?(:source_url)
        end
      end
      
      # A single firewall rule that is evaluated against incoming traffic and provides
      # an action to take on matched requests. A positive integer between 1, Int32.
      # MaxValue-1 that defines the order of rule evaluation. Rules with the lowest
      # priority are evaluated first.A default rule at priority Int32.MaxValue matches
      # all IPv4 and IPv6 traffic when no previous rule matches. Only the action of
      # this rule can be modified by the user.
      class FirewallRule
        include Google::Apis::Core::Hashable
      
        # The action to take on matched requests.
        # Corresponds to the JSON property `action`
        # @return [String]
        attr_accessor :action
      
        # An optional string description of this rule. This field has a maximum length
        # of 400 characters.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # 
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # IP address or range, defined using CIDR notation, of requests that this rule
        # applies to. You can use the wildcard character "*" to match all IPs equivalent
        # to "0/0" and "::/0" together. Examples: 192.168.1.1 or 192.168.0.0/16 or 2001:
        # db8::/32 or 2001:0db8:0000:0042:0000:8a2e:0370:7334. Truncation will be
        # silently performed on addresses which are not properly truncated. For example,
        # 1.2.3.4/24 is accepted as the same address as 1.2.3.0/24. Similarly, for IPv6,
        # 2001:db8::1/32 is accepted as the same address as 2001:db8::/32.
        # Corresponds to the JSON property `sourceRange`
        # @return [String]
        attr_accessor :source_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @action = args[:action] if args.key?(:action)
          @description = args[:description] if args.key?(:description)
          @priority = args[:priority] if args.key?(:priority)
          @source_range = args[:source_range] if args.key?(:source_range)
        end
      end
      
      # Runtime settings for the App Engine flexible environment.
      class FlexibleRuntimeSettings
        include Google::Apis::Core::Hashable
      
        # The operating system of the application runtime.
        # Corresponds to the JSON property `operatingSystem`
        # @return [String]
        attr_accessor :operating_system
      
        # The runtime version of an App Engine flexible application.
        # Corresponds to the JSON property `runtimeVersion`
        # @return [String]
        attr_accessor :runtime_version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @operating_system = args[:operating_system] if args.key?(:operating_system)
          @runtime_version = args[:runtime_version] if args.key?(:runtime_version)
        end
      end
      
      # For use only by GCE. GceTag is a wrapper around the GCE administrative tag
      # with parent info.
      class GceTag
        include Google::Apis::Core::Hashable
      
        # The parents(s) of the tag. Eg. projects/123, folders/456 It usually contains
        # only one parent. But, in some corner cases, it can contain multiple parents.
        # Currently, organizations are not supported.
        # Corresponds to the JSON property `parent`
        # @return [Array<String>]
        attr_accessor :parent
      
        # The administrative_tag name.
        # Corresponds to the JSON property `tag`
        # @return [String]
        attr_accessor :tag
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @parent = args[:parent] if args.key?(:parent)
          @tag = args[:tag] if args.key?(:tag)
        end
      end
      
      # Metadata for the given google.cloud.location.Location.
      class GoogleAppengineV1betaLocationMetadata
        include Google::Apis::Core::Hashable
      
        # App Engine flexible environment is available in the given location.@OutputOnly
        # Corresponds to the JSON property `flexibleEnvironmentAvailable`
        # @return [Boolean]
        attr_accessor :flexible_environment_available
        alias_method :flexible_environment_available?, :flexible_environment_available
      
        # Output only. Search API (https://cloud.google.com/appengine/docs/standard/
        # python/search) is available in the given location.
        # Corresponds to the JSON property `searchApiAvailable`
        # @return [Boolean]
        attr_accessor :search_api_available
        alias_method :search_api_available?, :search_api_available
      
        # App Engine standard environment is available in the given location.@OutputOnly
        # Corresponds to the JSON property `standardEnvironmentAvailable`
        # @return [Boolean]
        attr_accessor :standard_environment_available
        alias_method :standard_environment_available?, :standard_environment_available
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @flexible_environment_available = args[:flexible_environment_available] if args.key?(:flexible_environment_available)
          @search_api_available = args[:search_api_available] if args.key?(:search_api_available)
          @standard_environment_available = args[:standard_environment_available] if args.key?(:standard_environment_available)
        end
      end
      
      # Health checking configuration for VM instances. Unhealthy instances are killed
      # and replaced with new instances. Only applicable for instances in App Engine
      # flexible environment.
      class HealthCheck
        include Google::Apis::Core::Hashable
      
        # Interval between health checks.
        # Corresponds to the JSON property `checkInterval`
        # @return [String]
        attr_accessor :check_interval
      
        # Whether to explicitly disable health checks for this instance.
        # Corresponds to the JSON property `disableHealthCheck`
        # @return [Boolean]
        attr_accessor :disable_health_check
        alias_method :disable_health_check?, :disable_health_check
      
        # Number of consecutive successful health checks required before receiving
        # traffic.
        # Corresponds to the JSON property `healthyThreshold`
        # @return [Fixnum]
        attr_accessor :healthy_threshold
      
        # Host header to send when performing an HTTP health check. Example: "myapp.
        # appspot.com"
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # Number of consecutive failed health checks required before an instance is
        # restarted.
        # Corresponds to the JSON property `restartThreshold`
        # @return [Fixnum]
        attr_accessor :restart_threshold
      
        # Time before the health check is considered failed.
        # Corresponds to the JSON property `timeout`
        # @return [String]
        attr_accessor :timeout
      
        # Number of consecutive failed health checks required before removing traffic.
        # Corresponds to the JSON property `unhealthyThreshold`
        # @return [Fixnum]
        attr_accessor :unhealthy_threshold
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @check_interval = args[:check_interval] if args.key?(:check_interval)
          @disable_health_check = args[:disable_health_check] if args.key?(:disable_health_check)
          @healthy_threshold = args[:healthy_threshold] if args.key?(:healthy_threshold)
          @host = args[:host] if args.key?(:host)
          @restart_threshold = args[:restart_threshold] if args.key?(:restart_threshold)
          @timeout = args[:timeout] if args.key?(:timeout)
          @unhealthy_threshold = args[:unhealthy_threshold] if args.key?(:unhealthy_threshold)
        end
      end
      
      # Identity-Aware Proxy
      class IdentityAwareProxy
        include Google::Apis::Core::Hashable
      
        # Whether the serving infrastructure will authenticate and authorize all
        # incoming requests.If true, the oauth2_client_id and oauth2_client_secret
        # fields must be non-empty.
        # Corresponds to the JSON property `enabled`
        # @return [Boolean]
        attr_accessor :enabled
        alias_method :enabled?, :enabled
      
        # OAuth2 client ID to use for the authentication flow.
        # Corresponds to the JSON property `oauth2ClientId`
        # @return [String]
        attr_accessor :oauth2_client_id
      
        # OAuth2 client secret to use for the authentication flow.For security reasons,
        # this value cannot be retrieved via the API. Instead, the SHA-256 hash of the
        # value is returned in the oauth2_client_secret_sha256 field.@InputOnly
        # Corresponds to the JSON property `oauth2ClientSecret`
        # @return [String]
        attr_accessor :oauth2_client_secret
      
        # Output only. Hex-encoded SHA-256 hash of the client secret.@OutputOnly
        # Corresponds to the JSON property `oauth2ClientSecretSha256`
        # @return [String]
        attr_accessor :oauth2_client_secret_sha256
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enabled = args[:enabled] if args.key?(:enabled)
          @oauth2_client_id = args[:oauth2_client_id] if args.key?(:oauth2_client_id)
          @oauth2_client_secret = args[:oauth2_client_secret] if args.key?(:oauth2_client_secret)
          @oauth2_client_secret_sha256 = args[:oauth2_client_secret_sha256] if args.key?(:oauth2_client_secret_sha256)
        end
      end
      
      # An Instance resource is the computing unit that App Engine uses to
      # automatically scale an application.
      class Instance
        include Google::Apis::Core::Hashable
      
        # Output only. App Engine release this instance is running on.
        # Corresponds to the JSON property `appEngineRelease`
        # @return [String]
        attr_accessor :app_engine_release
      
        # Output only. Availability of the instance.
        # Corresponds to the JSON property `availability`
        # @return [String]
        attr_accessor :availability
      
        # Output only. Average latency (ms) over the last minute.
        # Corresponds to the JSON property `averageLatency`
        # @return [Fixnum]
        attr_accessor :average_latency
      
        # Output only. Number of errors since this instance was started.
        # Corresponds to the JSON property `errors`
        # @return [Fixnum]
        attr_accessor :errors
      
        # Output only. Relative name of the instance within the version. Example:
        # instance-1.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Output only. Total memory in use (bytes).
        # Corresponds to the JSON property `memoryUsage`
        # @return [Fixnum]
        attr_accessor :memory_usage
      
        # Output only. Full path to the Instance resource in the API. Example: apps/
        # myapp/services/default/versions/v1/instances/instance-1.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. Average queries per second (QPS) over the last minute.
        # Corresponds to the JSON property `qps`
        # @return [Float]
        attr_accessor :qps
      
        # Output only. Number of requests since this instance was started.
        # Corresponds to the JSON property `requests`
        # @return [Fixnum]
        attr_accessor :requests
      
        # Output only. Time that this instance was started.@OutputOnly
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        # Output only. Whether this instance is in debug mode. Only applicable for
        # instances in App Engine flexible environment.
        # Corresponds to the JSON property `vmDebugEnabled`
        # @return [Boolean]
        attr_accessor :vm_debug_enabled
        alias_method :vm_debug_enabled?, :vm_debug_enabled
      
        # Output only. Virtual machine ID of this instance. Only applicable for
        # instances in App Engine flexible environment.
        # Corresponds to the JSON property `vmId`
        # @return [String]
        attr_accessor :vm_id
      
        # Output only. The IP address of this instance. Only applicable for instances in
        # App Engine flexible environment.
        # Corresponds to the JSON property `vmIp`
        # @return [String]
        attr_accessor :vm_ip
      
        # Output only. The liveness health check of this instance. Only applicable for
        # instances in App Engine flexible environment.
        # Corresponds to the JSON property `vmLiveness`
        # @return [String]
        attr_accessor :vm_liveness
      
        # Output only. Name of the virtual machine where this instance lives. Only
        # applicable for instances in App Engine flexible environment.
        # Corresponds to the JSON property `vmName`
        # @return [String]
        attr_accessor :vm_name
      
        # Output only. Status of the virtual machine where this instance lives. Only
        # applicable for instances in App Engine flexible environment.
        # Corresponds to the JSON property `vmStatus`
        # @return [String]
        attr_accessor :vm_status
      
        # Output only. Zone where the virtual machine is located. Only applicable for
        # instances in App Engine flexible environment.
        # Corresponds to the JSON property `vmZoneName`
        # @return [String]
        attr_accessor :vm_zone_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_engine_release = args[:app_engine_release] if args.key?(:app_engine_release)
          @availability = args[:availability] if args.key?(:availability)
          @average_latency = args[:average_latency] if args.key?(:average_latency)
          @errors = args[:errors] if args.key?(:errors)
          @id = args[:id] if args.key?(:id)
          @memory_usage = args[:memory_usage] if args.key?(:memory_usage)
          @name = args[:name] if args.key?(:name)
          @qps = args[:qps] if args.key?(:qps)
          @requests = args[:requests] if args.key?(:requests)
          @start_time = args[:start_time] if args.key?(:start_time)
          @vm_debug_enabled = args[:vm_debug_enabled] if args.key?(:vm_debug_enabled)
          @vm_id = args[:vm_id] if args.key?(:vm_id)
          @vm_ip = args[:vm_ip] if args.key?(:vm_ip)
          @vm_liveness = args[:vm_liveness] if args.key?(:vm_liveness)
          @vm_name = args[:vm_name] if args.key?(:vm_name)
          @vm_status = args[:vm_status] if args.key?(:vm_status)
          @vm_zone_name = args[:vm_zone_name] if args.key?(:vm_zone_name)
        end
      end
      
      # Third-party Python runtime library that is required by the application.
      class Library
        include Google::Apis::Core::Hashable
      
        # Name of the library. Example: "django".
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Version of the library to select, or "latest".
        # Corresponds to the JSON property `version`
        # @return [String]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # Response message for AuthorizedCertificates.ListAuthorizedCertificates.
      class ListAuthorizedCertificatesResponse
        include Google::Apis::Core::Hashable
      
        # The SSL certificates the user is authorized to administer.
        # Corresponds to the JSON property `certificates`
        # @return [Array<Google::Apis::AppengineV1beta::AuthorizedCertificate>]
        attr_accessor :certificates
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @certificates = args[:certificates] if args.key?(:certificates)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for AuthorizedDomains.ListAuthorizedDomains.
      class ListAuthorizedDomainsResponse
        include Google::Apis::Core::Hashable
      
        # The authorized domains belonging to the user.
        # Corresponds to the JSON property `domains`
        # @return [Array<Google::Apis::AppengineV1beta::AuthorizedDomain>]
        attr_accessor :domains
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @domains = args[:domains] if args.key?(:domains)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for DomainMappings.ListDomainMappings.
      class ListDomainMappingsResponse
        include Google::Apis::Core::Hashable
      
        # The domain mappings for the application.
        # Corresponds to the JSON property `domainMappings`
        # @return [Array<Google::Apis::AppengineV1beta::DomainMapping>]
        attr_accessor :domain_mappings
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @domain_mappings = args[:domain_mappings] if args.key?(:domain_mappings)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for Firewall.ListIngressRules.
      class ListIngressRulesResponse
        include Google::Apis::Core::Hashable
      
        # The ingress FirewallRules for this application.
        # Corresponds to the JSON property `ingressRules`
        # @return [Array<Google::Apis::AppengineV1beta::FirewallRule>]
        attr_accessor :ingress_rules
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ingress_rules = args[:ingress_rules] if args.key?(:ingress_rules)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # Response message for Instances.ListInstances.
      class ListInstancesResponse
        include Google::Apis::Core::Hashable
      
        # The instances belonging to the requested version.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::AppengineV1beta::Instance>]
        attr_accessor :instances
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instances = args[:instances] if args.key?(:instances)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # The response message for Locations.ListLocations.
      class ListLocationsResponse
        include Google::Apis::Core::Hashable
      
        # A list of locations that matches the specified filter in the request.
        # Corresponds to the JSON property `locations`
        # @return [Array<Google::Apis::AppengineV1beta::Location>]
        attr_accessor :locations
      
        # The standard List next-page token.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @locations = args[:locations] if args.key?(:locations)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # The response message for Operations.ListOperations.
      class ListOperationsResponse
        include Google::Apis::Core::Hashable
      
        # The standard List next-page token.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # A list of operations that matches the specified filter in the request.
        # Corresponds to the JSON property `operations`
        # @return [Array<Google::Apis::AppengineV1beta::Operation>]
        attr_accessor :operations
      
        # Unordered list. Unreachable resources. Populated when the request sets
        # ListOperationsRequest.return_partial_success and reads across collections e.g.
        # when attempting to list all resources across all supported locations.
        # Corresponds to the JSON property `unreachable`
        # @return [Array<String>]
        attr_accessor :unreachable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @operations = args[:operations] if args.key?(:operations)
          @unreachable = args[:unreachable] if args.key?(:unreachable)
        end
      end
      
      # Response message for Applications.ListRuntimes.
      class ListRuntimesResponse
        include Google::Apis::Core::Hashable
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The runtimes available to the requested application.
        # Corresponds to the JSON property `runtimes`
        # @return [Array<Google::Apis::AppengineV1beta::Runtime>]
        attr_accessor :runtimes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @runtimes = args[:runtimes] if args.key?(:runtimes)
        end
      end
      
      # Response message for Services.ListServices.
      class ListServicesResponse
        include Google::Apis::Core::Hashable
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The services belonging to the requested application.
        # Corresponds to the JSON property `services`
        # @return [Array<Google::Apis::AppengineV1beta::Service>]
        attr_accessor :services
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @services = args[:services] if args.key?(:services)
        end
      end
      
      # Response message for Versions.ListVersions.
      class ListVersionsResponse
        include Google::Apis::Core::Hashable
      
        # Continuation token for fetching the next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The versions belonging to the requested service.
        # Corresponds to the JSON property `versions`
        # @return [Array<Google::Apis::AppengineV1beta::Version>]
        attr_accessor :versions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @versions = args[:versions] if args.key?(:versions)
        end
      end
      
      # Health checking configuration for VM instances. Unhealthy instances are killed
      # and replaced with new instances.
      class LivenessCheck
        include Google::Apis::Core::Hashable
      
        # Interval between health checks.
        # Corresponds to the JSON property `checkInterval`
        # @return [String]
        attr_accessor :check_interval
      
        # Number of consecutive failed checks required before considering the VM
        # unhealthy.
        # Corresponds to the JSON property `failureThreshold`
        # @return [Fixnum]
        attr_accessor :failure_threshold
      
        # Host header to send when performing a HTTP Liveness check. Example: "myapp.
        # appspot.com"
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # The initial delay before starting to execute the checks.
        # Corresponds to the JSON property `initialDelay`
        # @return [String]
        attr_accessor :initial_delay
      
        # The request path.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # Number of consecutive successful checks required before considering the VM
        # healthy.
        # Corresponds to the JSON property `successThreshold`
        # @return [Fixnum]
        attr_accessor :success_threshold
      
        # Time before the check is considered failed.
        # Corresponds to the JSON property `timeout`
        # @return [String]
        attr_accessor :timeout
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @check_interval = args[:check_interval] if args.key?(:check_interval)
          @failure_threshold = args[:failure_threshold] if args.key?(:failure_threshold)
          @host = args[:host] if args.key?(:host)
          @initial_delay = args[:initial_delay] if args.key?(:initial_delay)
          @path = args[:path] if args.key?(:path)
          @success_threshold = args[:success_threshold] if args.key?(:success_threshold)
          @timeout = args[:timeout] if args.key?(:timeout)
        end
      end
      
      # A resource that represents a Google Cloud location.
      class Location
        include Google::Apis::Core::Hashable
      
        # The friendly name for this location, typically a nearby city name. For example,
        # "Tokyo".
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Cross-service attributes for the location. For example `"cloud.googleapis.com/
        # region": "us-east1"`
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # The canonical id for this location. For example: "us-east1".
        # Corresponds to the JSON property `locationId`
        # @return [String]
        attr_accessor :location_id
      
        # Service-specific metadata. For example the available capacity at the given
        # location.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,Object>]
        attr_accessor :metadata
      
        # Resource name for the location, which may vary between implementations. For
        # example: "projects/example-project/locations/us-east1"
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @display_name = args[:display_name] if args.key?(:display_name)
          @labels = args[:labels] if args.key?(:labels)
          @location_id = args[:location_id] if args.key?(:location_id)
          @metadata = args[:metadata] if args.key?(:metadata)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Metadata for the given google.cloud.location.Location.
      class LocationMetadata
        include Google::Apis::Core::Hashable
      
        # App Engine flexible environment is available in the given location.@OutputOnly
        # Corresponds to the JSON property `flexibleEnvironmentAvailable`
        # @return [Boolean]
        attr_accessor :flexible_environment_available
        alias_method :flexible_environment_available?, :flexible_environment_available
      
        # Output only. Search API (https://cloud.google.com/appengine/docs/standard/
        # python/search) is available in the given location.
        # Corresponds to the JSON property `searchApiAvailable`
        # @return [Boolean]
        attr_accessor :search_api_available
        alias_method :search_api_available?, :search_api_available
      
        # App Engine standard environment is available in the given location.@OutputOnly
        # Corresponds to the JSON property `standardEnvironmentAvailable`
        # @return [Boolean]
        attr_accessor :standard_environment_available
        alias_method :standard_environment_available?, :standard_environment_available
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @flexible_environment_available = args[:flexible_environment_available] if args.key?(:flexible_environment_available)
          @search_api_available = args[:search_api_available] if args.key?(:search_api_available)
          @standard_environment_available = args[:standard_environment_available] if args.key?(:standard_environment_available)
        end
      end
      
      # A certificate managed by App Engine.
      class ManagedCertificate
        include Google::Apis::Core::Hashable
      
        # Time at which the certificate was last renewed. The renewal process is fully
        # managed. Certificate renewal will automatically occur before the certificate
        # expires. Renewal errors can be tracked via ManagementStatus.@OutputOnly
        # Corresponds to the JSON property `lastRenewalTime`
        # @return [String]
        attr_accessor :last_renewal_time
      
        # Status of certificate management. Refers to the most recent certificate
        # acquisition or renewal attempt.@OutputOnly
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @last_renewal_time = args[:last_renewal_time] if args.key?(:last_renewal_time)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # A service with manual scaling runs continuously, allowing you to perform
      # complex initialization and rely on the state of its memory over time.
      class ManualScaling
        include Google::Apis::Core::Hashable
      
        # Number of instances to assign to the service at the start. This number can
        # later be altered by using the Modules API (https://cloud.google.com/appengine/
        # docs/python/modules/functions) set_num_instances() function.
        # Corresponds to the JSON property `instances`
        # @return [Fixnum]
        attr_accessor :instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instances = args[:instances] if args.key?(:instances)
        end
      end
      
      # Extra network settings. Only applicable in the App Engine flexible environment.
      class Network
        include Google::Apis::Core::Hashable
      
        # List of ports, or port pairs, to forward from the virtual machine to the
        # application container. Only applicable in the App Engine flexible environment.
        # Corresponds to the JSON property `forwardedPorts`
        # @return [Array<String>]
        attr_accessor :forwarded_ports
      
        # The IP mode for instances. Only applicable in the App Engine flexible
        # environment.
        # Corresponds to the JSON property `instanceIpMode`
        # @return [String]
        attr_accessor :instance_ip_mode
      
        # Tag to apply to the instance during creation. Only applicable in the App
        # Engine flexible environment.
        # Corresponds to the JSON property `instanceTag`
        # @return [String]
        attr_accessor :instance_tag
      
        # Google Compute Engine network where the virtual machines are created. Specify
        # the short name, not the resource path.Defaults to default.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Enable session affinity. Only applicable in the App Engine flexible
        # environment.
        # Corresponds to the JSON property `sessionAffinity`
        # @return [Boolean]
        attr_accessor :session_affinity
        alias_method :session_affinity?, :session_affinity
      
        # Google Cloud Platform sub-network where the virtual machines are created.
        # Specify the short name, not the resource path.If a subnetwork name is
        # specified, a network name will also be required unless it is for the default
        # network. If the network that the instance is being created in is a Legacy
        # network, then the IP address is allocated from the IPv4Range. If the network
        # that the instance is being created in is an auto Subnet Mode Network, then
        # only network name should be specified (not the subnetwork_name) and the IP
        # address is created from the IPCidrRange of the subnetwork that exists in that
        # zone for that network. If the network that the instance is being created in is
        # a custom Subnet Mode Network, then the subnetwork_name must be specified and
        # the IP address is created from the IPCidrRange of the subnetwork.If specified,
        # the subnetwork must exist in the same region as the App Engine flexible
        # environment application.
        # Corresponds to the JSON property `subnetworkName`
        # @return [String]
        attr_accessor :subnetwork_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @forwarded_ports = args[:forwarded_ports] if args.key?(:forwarded_ports)
          @instance_ip_mode = args[:instance_ip_mode] if args.key?(:instance_ip_mode)
          @instance_tag = args[:instance_tag] if args.key?(:instance_tag)
          @name = args[:name] if args.key?(:name)
          @session_affinity = args[:session_affinity] if args.key?(:session_affinity)
          @subnetwork_name = args[:subnetwork_name] if args.key?(:subnetwork_name)
        end
      end
      
      # A NetworkSettings resource is a container for ingress settings for a version
      # or service.
      class NetworkSettings
        include Google::Apis::Core::Hashable
      
        # The ingress settings for version or service.
        # Corresponds to the JSON property `ingressTrafficAllowed`
        # @return [String]
        attr_accessor :ingress_traffic_allowed
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ingress_traffic_allowed = args[:ingress_traffic_allowed] if args.key?(:ingress_traffic_allowed)
        end
      end
      
      # Target scaling by network usage. Only applicable in the App Engine flexible
      # environment.
      class NetworkUtilization
        include Google::Apis::Core::Hashable
      
        # Target bytes received per second.
        # Corresponds to the JSON property `targetReceivedBytesPerSecond`
        # @return [Fixnum]
        attr_accessor :target_received_bytes_per_second
      
        # Target packets received per second.
        # Corresponds to the JSON property `targetReceivedPacketsPerSecond`
        # @return [Fixnum]
        attr_accessor :target_received_packets_per_second
      
        # Target bytes sent per second.
        # Corresponds to the JSON property `targetSentBytesPerSecond`
        # @return [Fixnum]
        attr_accessor :target_sent_bytes_per_second
      
        # Target packets sent per second.
        # Corresponds to the JSON property `targetSentPacketsPerSecond`
        # @return [Fixnum]
        attr_accessor :target_sent_packets_per_second
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_received_bytes_per_second = args[:target_received_bytes_per_second] if args.key?(:target_received_bytes_per_second)
          @target_received_packets_per_second = args[:target_received_packets_per_second] if args.key?(:target_received_packets_per_second)
          @target_sent_bytes_per_second = args[:target_sent_bytes_per_second] if args.key?(:target_sent_bytes_per_second)
          @target_sent_packets_per_second = args[:target_sent_packets_per_second] if args.key?(:target_sent_packets_per_second)
        end
      end
      
      # This resource represents a long-running operation that is the result of a
      # network API call.
      class Operation
        include Google::Apis::Core::Hashable
      
        # If the value is false, it means the operation is still in progress. If true,
        # the operation is completed, and either error or response is available.
        # Corresponds to the JSON property `done`
        # @return [Boolean]
        attr_accessor :done
        alias_method :done?, :done
      
        # The Status type defines a logical error model that is suitable for different
        # programming environments, including REST APIs and RPC APIs. It is used by gRPC
        # (https://github.com/grpc). Each Status message contains three pieces of data:
        # error code, error message, and error details.You can find out more about this
        # error model and how to work with it in the API Design Guide (https://cloud.
        # google.com/apis/design/errors).
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::AppengineV1beta::Status]
        attr_accessor :error
      
        # Service-specific metadata associated with the operation. It typically contains
        # progress information and common metadata such as create time. Some services
        # might not provide such metadata. Any method that returns a long-running
        # operation should document the metadata type, if any.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,Object>]
        attr_accessor :metadata
      
        # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the name should be
        # a resource name ending with operations/`unique_id`.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The normal, successful response of the operation. If the original method
        # returns no data on success, such as Delete, the response is google.protobuf.
        # Empty. If the original method is standard Get/Create/Update, the response
        # should be the resource. For other methods, the response should have the type
        # XxxResponse, where Xxx is the original method name. For example, if the
        # original method name is TakeSnapshot(), the inferred response type is
        # TakeSnapshotResponse.
        # Corresponds to the JSON property `response`
        # @return [Hash<String,Object>]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @done = args[:done] if args.key?(:done)
          @error = args[:error] if args.key?(:error)
          @metadata = args[:metadata] if args.key?(:metadata)
          @name = args[:name] if args.key?(:name)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # Metadata for the given google.longrunning.Operation.
      class OperationMetadataV1
        include Google::Apis::Core::Hashable
      
        # Metadata for the given google.longrunning.Operation during a google.appengine.
        # v1.CreateVersionRequest.
        # Corresponds to the JSON property `createVersionMetadata`
        # @return [Google::Apis::AppengineV1beta::CreateVersionMetadataV1]
        attr_accessor :create_version_metadata
      
        # Time that this operation completed.@OutputOnly
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # Ephemeral message that may change every time the operation is polled. @
        # OutputOnly
        # Corresponds to the JSON property `ephemeralMessage`
        # @return [String]
        attr_accessor :ephemeral_message
      
        # Time that this operation was created.@OutputOnly
        # Corresponds to the JSON property `insertTime`
        # @return [String]
        attr_accessor :insert_time
      
        # API method that initiated this operation. Example: google.appengine.v1.
        # Versions.CreateVersion.@OutputOnly
        # Corresponds to the JSON property `method`
        # @return [String]
        attr_accessor :method_prop
      
        # Name of the resource that this operation is acting on. Example: apps/myapp/
        # services/default.@OutputOnly
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        # User who requested this operation.@OutputOnly
        # Corresponds to the JSON property `user`
        # @return [String]
        attr_accessor :user
      
        # Durable messages that persist on every operation poll. @OutputOnly
        # Corresponds to the JSON property `warning`
        # @return [Array<String>]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_version_metadata = args[:create_version_metadata] if args.key?(:create_version_metadata)
          @end_time = args[:end_time] if args.key?(:end_time)
          @ephemeral_message = args[:ephemeral_message] if args.key?(:ephemeral_message)
          @insert_time = args[:insert_time] if args.key?(:insert_time)
          @method_prop = args[:method_prop] if args.key?(:method_prop)
          @target = args[:target] if args.key?(:target)
          @user = args[:user] if args.key?(:user)
          @warning = args[:warning] if args.key?(:warning)
        end
      end
      
      # Metadata for the given google.longrunning.Operation.
      class OperationMetadataV1Alpha
        include Google::Apis::Core::Hashable
      
        # Metadata for the given google.longrunning.Operation during a google.appengine.
        # v1alpha.CreateVersionRequest.
        # Corresponds to the JSON property `createVersionMetadata`
        # @return [Google::Apis::AppengineV1beta::CreateVersionMetadataV1Alpha]
        attr_accessor :create_version_metadata
      
        # Time that this operation completed.@OutputOnly
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # Ephemeral message that may change every time the operation is polled. @
        # OutputOnly
        # Corresponds to the JSON property `ephemeralMessage`
        # @return [String]
        attr_accessor :ephemeral_message
      
        # Time that this operation was created.@OutputOnly
        # Corresponds to the JSON property `insertTime`
        # @return [String]
        attr_accessor :insert_time
      
        # API method that initiated this operation. Example: google.appengine.v1alpha.
        # Versions.CreateVersion.@OutputOnly
        # Corresponds to the JSON property `method`
        # @return [String]
        attr_accessor :method_prop
      
        # Name of the resource that this operation is acting on. Example: apps/myapp/
        # services/default.@OutputOnly
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        # User who requested this operation.@OutputOnly
        # Corresponds to the JSON property `user`
        # @return [String]
        attr_accessor :user
      
        # Durable messages that persist on every operation poll. @OutputOnly
        # Corresponds to the JSON property `warning`
        # @return [Array<String>]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_version_metadata = args[:create_version_metadata] if args.key?(:create_version_metadata)
          @end_time = args[:end_time] if args.key?(:end_time)
          @ephemeral_message = args[:ephemeral_message] if args.key?(:ephemeral_message)
          @insert_time = args[:insert_time] if args.key?(:insert_time)
          @method_prop = args[:method_prop] if args.key?(:method_prop)
          @target = args[:target] if args.key?(:target)
          @user = args[:user] if args.key?(:user)
          @warning = args[:warning] if args.key?(:warning)
        end
      end
      
      # Metadata for the given google.longrunning.Operation.
      class OperationMetadataV1Beta
        include Google::Apis::Core::Hashable
      
        # Metadata for the given google.longrunning.Operation during a google.appengine.
        # v1beta.CreateVersionRequest.
        # Corresponds to the JSON property `createVersionMetadata`
        # @return [Google::Apis::AppengineV1beta::CreateVersionMetadataV1Beta]
        attr_accessor :create_version_metadata
      
        # Time that this operation completed.@OutputOnly
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # Ephemeral message that may change every time the operation is polled. @
        # OutputOnly
        # Corresponds to the JSON property `ephemeralMessage`
        # @return [String]
        attr_accessor :ephemeral_message
      
        # Time that this operation was created.@OutputOnly
        # Corresponds to the JSON property `insertTime`
        # @return [String]
        attr_accessor :insert_time
      
        # API method that initiated this operation. Example: google.appengine.v1beta.
        # Versions.CreateVersion.@OutputOnly
        # Corresponds to the JSON property `method`
        # @return [String]
        attr_accessor :method_prop
      
        # Name of the resource that this operation is acting on. Example: apps/myapp/
        # services/default.@OutputOnly
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        # User who requested this operation.@OutputOnly
        # Corresponds to the JSON property `user`
        # @return [String]
        attr_accessor :user
      
        # Durable messages that persist on every operation poll. @OutputOnly
        # Corresponds to the JSON property `warning`
        # @return [Array<String>]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @create_version_metadata = args[:create_version_metadata] if args.key?(:create_version_metadata)
          @end_time = args[:end_time] if args.key?(:end_time)
          @ephemeral_message = args[:ephemeral_message] if args.key?(:ephemeral_message)
          @insert_time = args[:insert_time] if args.key?(:insert_time)
          @method_prop = args[:method_prop] if args.key?(:method_prop)
          @target = args[:target] if args.key?(:target)
          @user = args[:user] if args.key?(:user)
          @warning = args[:warning] if args.key?(:warning)
        end
      end
      
      # The request sent to CLHs during project events.
      class ProjectEvent
        include Google::Apis::Core::Hashable
      
        # The unique ID for this project event. CLHs can use this value to dedup
        # repeated calls. required
        # Corresponds to the JSON property `eventId`
        # @return [String]
        attr_accessor :event_id
      
        # Phase indicates when in the container event propagation this event is being
        # communicated. Events are sent before and after the per-resource events are
        # propagated. required
        # Corresponds to the JSON property `phase`
        # @return [String]
        attr_accessor :phase
      
        # ProjectsMetadata is the metadata CCFE stores about the all the relevant
        # projects (tenant, consumer, producer).
        # Corresponds to the JSON property `projectMetadata`
        # @return [Google::Apis::AppengineV1beta::ProjectsMetadata]
        attr_accessor :project_metadata
      
        # ContainerState contains the externally-visible container state that is used to
        # communicate the state and reasoning for that state to the CLH. This data is
        # not persisted by CCFE, but is instead derived from CCFE's internal
        # representation of the container state.
        # Corresponds to the JSON property `state`
        # @return [Google::Apis::AppengineV1beta::ContainerState]
        attr_accessor :state
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @event_id = args[:event_id] if args.key?(:event_id)
          @phase = args[:phase] if args.key?(:phase)
          @project_metadata = args[:project_metadata] if args.key?(:project_metadata)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # ProjectsMetadata is the metadata CCFE stores about the all the relevant
      # projects (tenant, consumer, producer).
      class ProjectsMetadata
        include Google::Apis::Core::Hashable
      
        # The consumer project id.
        # Corresponds to the JSON property `consumerProjectId`
        # @return [String]
        attr_accessor :consumer_project_id
      
        # The consumer project number.
        # Corresponds to the JSON property `consumerProjectNumber`
        # @return [Fixnum]
        attr_accessor :consumer_project_number
      
        # The CCFE state of the consumer project. It is the same state that is
        # communicated to the CLH during project events. Notice that this field is not
        # set in the DB, it is only set in this proto when communicated to CLH in the
        # side channel.
        # Corresponds to the JSON property `consumerProjectState`
        # @return [String]
        attr_accessor :consumer_project_state
      
        # The GCE tags associated with the consumer project and those inherited due to
        # their ancestry, if any. Not supported by CCFE.
        # Corresponds to the JSON property `gceTag`
        # @return [Array<Google::Apis::AppengineV1beta::GceTag>]
        attr_accessor :gce_tag
      
        # The service account authorized to operate on the consumer project. Note: CCFE
        # only propagates P4SA with default tag to CLH.
        # Corresponds to the JSON property `p4ServiceAccount`
        # @return [String]
        attr_accessor :p4_service_account
      
        # The producer project id.
        # Corresponds to the JSON property `producerProjectId`
        # @return [String]
        attr_accessor :producer_project_id
      
        # The producer project number.
        # Corresponds to the JSON property `producerProjectNumber`
        # @return [Fixnum]
        attr_accessor :producer_project_number
      
        # The tenant project id.
        # Corresponds to the JSON property `tenantProjectId`
        # @return [String]
        attr_accessor :tenant_project_id
      
        # The tenant project number.
        # Corresponds to the JSON property `tenantProjectNumber`
        # @return [Fixnum]
        attr_accessor :tenant_project_number
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consumer_project_id = args[:consumer_project_id] if args.key?(:consumer_project_id)
          @consumer_project_number = args[:consumer_project_number] if args.key?(:consumer_project_number)
          @consumer_project_state = args[:consumer_project_state] if args.key?(:consumer_project_state)
          @gce_tag = args[:gce_tag] if args.key?(:gce_tag)
          @p4_service_account = args[:p4_service_account] if args.key?(:p4_service_account)
          @producer_project_id = args[:producer_project_id] if args.key?(:producer_project_id)
          @producer_project_number = args[:producer_project_number] if args.key?(:producer_project_number)
          @tenant_project_id = args[:tenant_project_id] if args.key?(:tenant_project_id)
          @tenant_project_number = args[:tenant_project_number] if args.key?(:tenant_project_number)
        end
      end
      
      # Readiness checking configuration for VM instances. Unhealthy instances are
      # removed from traffic rotation.
      class ReadinessCheck
        include Google::Apis::Core::Hashable
      
        # A maximum time limit on application initialization, measured from moment the
        # application successfully replies to a healthcheck until it is ready to serve
        # traffic.
        # Corresponds to the JSON property `appStartTimeout`
        # @return [String]
        attr_accessor :app_start_timeout
      
        # Interval between health checks.
        # Corresponds to the JSON property `checkInterval`
        # @return [String]
        attr_accessor :check_interval
      
        # Number of consecutive failed checks required before removing traffic.
        # Corresponds to the JSON property `failureThreshold`
        # @return [Fixnum]
        attr_accessor :failure_threshold
      
        # Host header to send when performing a HTTP Readiness check. Example: "myapp.
        # appspot.com"
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # The request path.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # Number of consecutive successful checks required before receiving traffic.
        # Corresponds to the JSON property `successThreshold`
        # @return [Fixnum]
        attr_accessor :success_threshold
      
        # Time before the check is considered failed.
        # Corresponds to the JSON property `timeout`
        # @return [String]
        attr_accessor :timeout
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @app_start_timeout = args[:app_start_timeout] if args.key?(:app_start_timeout)
          @check_interval = args[:check_interval] if args.key?(:check_interval)
          @failure_threshold = args[:failure_threshold] if args.key?(:failure_threshold)
          @host = args[:host] if args.key?(:host)
          @path = args[:path] if args.key?(:path)
          @success_threshold = args[:success_threshold] if args.key?(:success_threshold)
          @timeout = args[:timeout] if args.key?(:timeout)
        end
      end
      
      # Containers transition between and within states based on reasons sent from
      # various systems. CCFE will provide the CLH with reasons for the current state
      # per system.The current systems that CCFE supports are: Service Management (
      # Inception) Data Governance (Wipeout) Abuse (Ares) Billing (Internal Cloud
      # Billing API) Service Activation (Service Controller)
      class Reasons
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `abuse`
        # @return [String]
        attr_accessor :abuse
      
        # 
        # Corresponds to the JSON property `billing`
        # @return [String]
        attr_accessor :billing
      
        # 
        # Corresponds to the JSON property `dataGovernance`
        # @return [String]
        attr_accessor :data_governance
      
        # Consumer Container denotes if the service is active within a project or not.
        # This information could be used to clean up resources in case service in
        # DISABLED_FULL i.e. Service is inactive > 30 days.
        # Corresponds to the JSON property `serviceActivation`
        # @return [String]
        attr_accessor :service_activation
      
        # 
        # Corresponds to the JSON property `serviceManagement`
        # @return [String]
        attr_accessor :service_management
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @abuse = args[:abuse] if args.key?(:abuse)
          @billing = args[:billing] if args.key?(:billing)
          @data_governance = args[:data_governance] if args.key?(:data_governance)
          @service_activation = args[:service_activation] if args.key?(:service_activation)
          @service_management = args[:service_management] if args.key?(:service_management)
        end
      end
      
      # Request message for 'Applications.RepairApplication'.
      class RepairApplicationRequest
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Target scaling by request utilization. Only applicable in the App Engine
      # flexible environment.
      class RequestUtilization
        include Google::Apis::Core::Hashable
      
        # Target number of concurrent requests.
        # Corresponds to the JSON property `targetConcurrentRequests`
        # @return [Fixnum]
        attr_accessor :target_concurrent_requests
      
        # Target requests per second.
        # Corresponds to the JSON property `targetRequestCountPerSecond`
        # @return [Fixnum]
        attr_accessor :target_request_count_per_second
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_concurrent_requests = args[:target_concurrent_requests] if args.key?(:target_concurrent_requests)
          @target_request_count_per_second = args[:target_request_count_per_second] if args.key?(:target_request_count_per_second)
        end
      end
      
      # The request that is passed to CLH during per-resource events. The request will
      # be sent with update semantics in all cases except for data governance purge
      # events. These events will be sent with delete semantics and the CLH is
      # expected to delete the resource receiving this event.
      class ResourceEvent
        include Google::Apis::Core::Hashable
      
        # The unique ID for this per-resource event. CLHs can use this value to dedup
        # repeated calls. required
        # Corresponds to the JSON property `eventId`
        # @return [String]
        attr_accessor :event_id
      
        # The name of the resource for which this event is. required
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # ContainerState contains the externally-visible container state that is used to
        # communicate the state and reasoning for that state to the CLH. This data is
        # not persisted by CCFE, but is instead derived from CCFE's internal
        # representation of the container state.
        # Corresponds to the JSON property `state`
        # @return [Google::Apis::AppengineV1beta::ContainerState]
        attr_accessor :state
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @event_id = args[:event_id] if args.key?(:event_id)
          @name = args[:name] if args.key?(:name)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # A DNS resource record.
      class ResourceRecord
        include Google::Apis::Core::Hashable
      
        # Relative name of the object affected by this record. Only applicable for CNAME
        # records. Example: 'www'.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Data for this record. Values vary by record type, as defined in RFC 1035 (
        # section 5) and RFC 1034 (section 3.6.1).
        # Corresponds to the JSON property `rrdata`
        # @return [String]
        attr_accessor :rrdata
      
        # Resource record type. Example: AAAA.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @rrdata = args[:rrdata] if args.key?(:rrdata)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Machine resources for a version.
      class Resources
        include Google::Apis::Core::Hashable
      
        # Number of CPU cores needed.
        # Corresponds to the JSON property `cpu`
        # @return [Float]
        attr_accessor :cpu
      
        # Disk size (GB) needed.
        # Corresponds to the JSON property `diskGb`
        # @return [Float]
        attr_accessor :disk_gb
      
        # The name of the encryption key that is stored in Google Cloud KMS. Only should
        # be used by Cloud Composer to encrypt the vm disk
        # Corresponds to the JSON property `kmsKeyReference`
        # @return [String]
        attr_accessor :kms_key_reference
      
        # Memory (GB) needed.
        # Corresponds to the JSON property `memoryGb`
        # @return [Float]
        attr_accessor :memory_gb
      
        # User specified volumes.
        # Corresponds to the JSON property `volumes`
        # @return [Array<Google::Apis::AppengineV1beta::Volume>]
        attr_accessor :volumes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cpu = args[:cpu] if args.key?(:cpu)
          @disk_gb = args[:disk_gb] if args.key?(:disk_gb)
          @kms_key_reference = args[:kms_key_reference] if args.key?(:kms_key_reference)
          @memory_gb = args[:memory_gb] if args.key?(:memory_gb)
          @volumes = args[:volumes] if args.key?(:volumes)
        end
      end
      
      # Runtime versions for App Engine.
      class Runtime
        include Google::Apis::Core::Hashable
      
        # Represents a whole or partial calendar date, such as a birthday. The time of
        # day and time zone are either specified elsewhere or are insignificant. The
        # date is relative to the Gregorian Calendar. This can represent one of the
        # following: A full date, with non-zero year, month, and day values. A month and
        # day, with a zero year (for example, an anniversary). A year on its own, with a
        # zero month and a zero day. A year and month, with a zero day (for example, a
        # credit card expiration date).Related types: google.type.TimeOfDay google.type.
        # DateTime google.protobuf.Timestamp
        # Corresponds to the JSON property `decommissionedDate`
        # @return [Google::Apis::AppengineV1beta::Date]
        attr_accessor :decommissioned_date
      
        # Represents a whole or partial calendar date, such as a birthday. The time of
        # day and time zone are either specified elsewhere or are insignificant. The
        # date is relative to the Gregorian Calendar. This can represent one of the
        # following: A full date, with non-zero year, month, and day values. A month and
        # day, with a zero year (for example, an anniversary). A year on its own, with a
        # zero month and a zero day. A year and month, with a zero day (for example, a
        # credit card expiration date).Related types: google.type.TimeOfDay google.type.
        # DateTime google.protobuf.Timestamp
        # Corresponds to the JSON property `deprecationDate`
        # @return [Google::Apis::AppengineV1beta::Date]
        attr_accessor :deprecation_date
      
        # User-friendly display name, e.g. 'Node.js 12', etc.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Represents a whole or partial calendar date, such as a birthday. The time of
        # day and time zone are either specified elsewhere or are insignificant. The
        # date is relative to the Gregorian Calendar. This can represent one of the
        # following: A full date, with non-zero year, month, and day values. A month and
        # day, with a zero year (for example, an anniversary). A year on its own, with a
        # zero month and a zero day. A year and month, with a zero day (for example, a
        # credit card expiration date).Related types: google.type.TimeOfDay google.type.
        # DateTime google.protobuf.Timestamp
        # Corresponds to the JSON property `endOfSupportDate`
        # @return [Google::Apis::AppengineV1beta::Date]
        attr_accessor :end_of_support_date
      
        # The environment of the runtime.
        # Corresponds to the JSON property `environment`
        # @return [String]
        attr_accessor :environment
      
        # The name of the runtime, e.g., 'go113', 'nodejs12', etc.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The stage of life this runtime is in, e.g., BETA, GA, etc.
        # Corresponds to the JSON property `stage`
        # @return [String]
        attr_accessor :stage
      
        # Supported operating systems for the runtime, e.g., 'ubuntu22', etc.
        # Corresponds to the JSON property `supportedOperatingSystems`
        # @return [Array<String>]
        attr_accessor :supported_operating_systems
      
        # Warning messages, e.g., a deprecation warning.
        # Corresponds to the JSON property `warnings`
        # @return [Array<String>]
        attr_accessor :warnings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @decommissioned_date = args[:decommissioned_date] if args.key?(:decommissioned_date)
          @deprecation_date = args[:deprecation_date] if args.key?(:deprecation_date)
          @display_name = args[:display_name] if args.key?(:display_name)
          @end_of_support_date = args[:end_of_support_date] if args.key?(:end_of_support_date)
          @environment = args[:environment] if args.key?(:environment)
          @name = args[:name] if args.key?(:name)
          @stage = args[:stage] if args.key?(:stage)
          @supported_operating_systems = args[:supported_operating_systems] if args.key?(:supported_operating_systems)
          @warnings = args[:warnings] if args.key?(:warnings)
        end
      end
      
      # Executes a script to handle the request that matches the URL pattern.
      class ScriptHandler
        include Google::Apis::Core::Hashable
      
        # Path to the script from the application root directory.
        # Corresponds to the JSON property `scriptPath`
        # @return [String]
        attr_accessor :script_path
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @script_path = args[:script_path] if args.key?(:script_path)
        end
      end
      
      # A Service resource is a logical component of an application that can share
      # state and communicate in a secure fashion with other services. For example, an
      # application that handles customer requests might include separate services to
      # handle tasks such as backend data analysis or API requests from mobile devices.
      # Each service has a collection of versions that define a specific set of code
      # used to implement the functionality of that service.
      class Service
        include Google::Apis::Core::Hashable
      
        # Additional Google Generated Customer Metadata, this field won't be provided by
        # default and can be requested by setting the IncludeExtraData field in
        # GetServiceRequest
        # Corresponds to the JSON property `generatedCustomerMetadata`
        # @return [Hash<String,Object>]
        attr_accessor :generated_customer_metadata
      
        # Output only. Relative name of the service within the application. Example:
        # default.@OutputOnly
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A set of labels to apply to this service. Labels are key/value pairs that
        # describe the service and all resources that belong to it (e.g., versions). The
        # labels can be used to search and group resources, and are propagated to the
        # usage and billing reports, enabling fine-grain analysis of costs. An example
        # of using labels is to tag resources belonging to different environments (e.g.,
        # "env=prod", "env=qa"). Label keys and values can be no longer than 63
        # characters and can only contain lowercase letters, numeric characters,
        # underscores, dashes, and international characters. Label keys must start with
        # a lowercase letter or an international character. Each service can have at
        # most 32 labels.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Output only. Full path to the Service resource in the API. Example: apps/myapp/
        # services/default.@OutputOnly
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A NetworkSettings resource is a container for ingress settings for a version
        # or service.
        # Corresponds to the JSON property `networkSettings`
        # @return [Google::Apis::AppengineV1beta::NetworkSettings]
        attr_accessor :network_settings
      
        # Traffic routing configuration for versions within a single service. Traffic
        # splits define how traffic directed to the service is assigned to versions.
        # Corresponds to the JSON property `split`
        # @return [Google::Apis::AppengineV1beta::TrafficSplit]
        attr_accessor :split
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @generated_customer_metadata = args[:generated_customer_metadata] if args.key?(:generated_customer_metadata)
          @id = args[:id] if args.key?(:id)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @network_settings = args[:network_settings] if args.key?(:network_settings)
          @split = args[:split] if args.key?(:split)
        end
      end
      
      # SSL configuration for a DomainMapping resource.
      class SslSettings
        include Google::Apis::Core::Hashable
      
        # ID of the AuthorizedCertificate resource configuring SSL for the application.
        # Clearing this field will remove SSL support.By default, a managed certificate
        # is automatically created for every domain mapping. To omit SSL support or to
        # configure SSL manually, specify SslManagementType.MANUAL on a CREATE or UPDATE
        # request. You must be authorized to administer the AuthorizedCertificate
        # resource to manually map it to a DomainMapping resource. Example: 12345.
        # Corresponds to the JSON property `certificateId`
        # @return [String]
        attr_accessor :certificate_id
      
        # ID of the managed AuthorizedCertificate resource currently being provisioned,
        # if applicable. Until the new managed certificate has been successfully
        # provisioned, the previous SSL state will be preserved. Once the provisioning
        # process completes, the certificate_id field will reflect the new managed
        # certificate and this field will be left empty. To remove SSL support while
        # there is still a pending managed certificate, clear the certificate_id field
        # with an UpdateDomainMappingRequest.@OutputOnly
        # Corresponds to the JSON property `pendingManagedCertificateId`
        # @return [String]
        attr_accessor :pending_managed_certificate_id
      
        # SSL management type for this domain. If AUTOMATIC, a managed certificate is
        # automatically provisioned. If MANUAL, certificate_id must be manually
        # specified in order to configure SSL for this domain.
        # Corresponds to the JSON property `sslManagementType`
        # @return [String]
        attr_accessor :ssl_management_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @certificate_id = args[:certificate_id] if args.key?(:certificate_id)
          @pending_managed_certificate_id = args[:pending_managed_certificate_id] if args.key?(:pending_managed_certificate_id)
          @ssl_management_type = args[:ssl_management_type] if args.key?(:ssl_management_type)
        end
      end
      
      # Scheduler settings for standard environment.
      class StandardSchedulerSettings
        include Google::Apis::Core::Hashable
      
        # Maximum number of instances to run for this version. Set to 2147483647 to
        # disable max_instances configuration.
        # Corresponds to the JSON property `maxInstances`
        # @return [Fixnum]
        attr_accessor :max_instances
      
        # Minimum number of instances to run for this version. Set to zero to disable
        # min_instances configuration.
        # Corresponds to the JSON property `minInstances`
        # @return [Fixnum]
        attr_accessor :min_instances
      
        # Target CPU utilization ratio to maintain when scaling.
        # Corresponds to the JSON property `targetCpuUtilization`
        # @return [Float]
        attr_accessor :target_cpu_utilization
      
        # Target throughput utilization ratio to maintain when scaling
        # Corresponds to the JSON property `targetThroughputUtilization`
        # @return [Float]
        attr_accessor :target_throughput_utilization
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_instances = args[:max_instances] if args.key?(:max_instances)
          @min_instances = args[:min_instances] if args.key?(:min_instances)
          @target_cpu_utilization = args[:target_cpu_utilization] if args.key?(:target_cpu_utilization)
          @target_throughput_utilization = args[:target_throughput_utilization] if args.key?(:target_throughput_utilization)
        end
      end
      
      # Files served directly to the user for a given URL, such as images, CSS
      # stylesheets, or JavaScript source files. Static file handlers describe which
      # files in the application directory are static files, and which URLs serve them.
      class StaticFilesHandler
        include Google::Apis::Core::Hashable
      
        # Whether files should also be uploaded as code data. By default, files declared
        # in static file handlers are uploaded as static data and are only served to end
        # users; they cannot be read by the application. If enabled, uploads are charged
        # against both your code and static data storage resource quotas.
        # Corresponds to the JSON property `applicationReadable`
        # @return [Boolean]
        attr_accessor :application_readable
        alias_method :application_readable?, :application_readable
      
        # Time a static file served by this handler should be cached by web proxies and
        # browsers.
        # Corresponds to the JSON property `expiration`
        # @return [String]
        attr_accessor :expiration
      
        # HTTP headers to use for all responses from these URLs.
        # Corresponds to the JSON property `httpHeaders`
        # @return [Hash<String,String>]
        attr_accessor :http_headers
      
        # MIME type used to serve all files served by this handler.Defaults to file-
        # specific MIME types, which are derived from each file's filename extension.
        # Corresponds to the JSON property `mimeType`
        # @return [String]
        attr_accessor :mime_type
      
        # Path to the static files matched by the URL pattern, from the application root
        # directory. The path can refer to text matched in groupings in the URL pattern.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # Whether this handler should match the request if the file referenced by the
        # handler does not exist.
        # Corresponds to the JSON property `requireMatchingFile`
        # @return [Boolean]
        attr_accessor :require_matching_file
        alias_method :require_matching_file?, :require_matching_file
      
        # Regular expression that matches the file paths for all files that should be
        # referenced by this handler.
        # Corresponds to the JSON property `uploadPathRegex`
        # @return [String]
        attr_accessor :upload_path_regex
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @application_readable = args[:application_readable] if args.key?(:application_readable)
          @expiration = args[:expiration] if args.key?(:expiration)
          @http_headers = args[:http_headers] if args.key?(:http_headers)
          @mime_type = args[:mime_type] if args.key?(:mime_type)
          @path = args[:path] if args.key?(:path)
          @require_matching_file = args[:require_matching_file] if args.key?(:require_matching_file)
          @upload_path_regex = args[:upload_path_regex] if args.key?(:upload_path_regex)
        end
      end
      
      # The Status type defines a logical error model that is suitable for different
      # programming environments, including REST APIs and RPC APIs. It is used by gRPC
      # (https://github.com/grpc). Each Status message contains three pieces of data:
      # error code, error message, and error details.You can find out more about this
      # error model and how to work with it in the API Design Guide (https://cloud.
      # google.com/apis/design/errors).
      class Status
        include Google::Apis::Core::Hashable
      
        # The status code, which should be an enum value of google.rpc.Code.
        # Corresponds to the JSON property `code`
        # @return [Fixnum]
        attr_accessor :code
      
        # A list of messages that carry the error details. There is a common set of
        # message types for APIs to use.
        # Corresponds to the JSON property `details`
        # @return [Array<Hash<String,Object>>]
        attr_accessor :details
      
        # A developer-facing error message, which should be in English. Any user-facing
        # error message should be localized and sent in the google.rpc.Status.details
        # field, or localized by the client.
        # Corresponds to the JSON property `message`
        # @return [String]
        attr_accessor :message
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @code = args[:code] if args.key?(:code)
          @details = args[:details] if args.key?(:details)
          @message = args[:message] if args.key?(:message)
        end
      end
      
      # Traffic routing configuration for versions within a single service. Traffic
      # splits define how traffic directed to the service is assigned to versions.
      class TrafficSplit
        include Google::Apis::Core::Hashable
      
        # Mapping from version IDs within the service to fractional (0.000, 1]
        # allocations of traffic for that version. Each version can be specified only
        # once, but some versions in the service may not have any traffic allocation.
        # Services that have traffic allocated cannot be deleted until either the
        # service is deleted or their traffic allocation is removed. Allocations must
        # sum to 1. Up to two decimal place precision is supported for IP-based splits
        # and up to three decimal places is supported for cookie-based splits.
        # Corresponds to the JSON property `allocations`
        # @return [Hash<String,Float>]
        attr_accessor :allocations
      
        # Mechanism used to determine which version a request is sent to. The traffic
        # selection algorithm will be stable for either type until allocations are
        # changed.
        # Corresponds to the JSON property `shardBy`
        # @return [String]
        attr_accessor :shard_by
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allocations = args[:allocations] if args.key?(:allocations)
          @shard_by = args[:shard_by] if args.key?(:shard_by)
        end
      end
      
      # Rules to match an HTTP request and dispatch that request to a service.
      class UrlDispatchRule
        include Google::Apis::Core::Hashable
      
        # Domain name to match against. The wildcard "*" is supported if specified
        # before a period: "*.".Defaults to matching all domains: "*".
        # Corresponds to the JSON property `domain`
        # @return [String]
        attr_accessor :domain
      
        # Pathname within the host. Must start with a "/". A single "*" can be included
        # at the end of the path.The sum of the lengths of the domain and path may not
        # exceed 100 characters.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # Resource ID of a service in this application that should serve the matched
        # request. The service must already exist. Example: default.
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @domain = args[:domain] if args.key?(:domain)
          @path = args[:path] if args.key?(:path)
          @service = args[:service] if args.key?(:service)
        end
      end
      
      # URL pattern and description of how the URL should be handled. App Engine can
      # handle URLs by executing application code or by serving static files uploaded
      # with the version, such as images, CSS, or JavaScript.
      class UrlMap
        include Google::Apis::Core::Hashable
      
        # Uses Google Cloud Endpoints to handle requests.
        # Corresponds to the JSON property `apiEndpoint`
        # @return [Google::Apis::AppengineV1beta::ApiEndpointHandler]
        attr_accessor :api_endpoint
      
        # Action to take when users access resources that require authentication.
        # Defaults to redirect.
        # Corresponds to the JSON property `authFailAction`
        # @return [String]
        attr_accessor :auth_fail_action
      
        # Level of login required to access this resource. Not supported for Node.js in
        # the App Engine standard environment.
        # Corresponds to the JSON property `login`
        # @return [String]
        attr_accessor :login
      
        # 30x code to use when performing redirects for the secure field. Defaults to
        # 302.
        # Corresponds to the JSON property `redirectHttpResponseCode`
        # @return [String]
        attr_accessor :redirect_http_response_code
      
        # Executes a script to handle the request that matches the URL pattern.
        # Corresponds to the JSON property `script`
        # @return [Google::Apis::AppengineV1beta::ScriptHandler]
        attr_accessor :script
      
        # Security (HTTPS) enforcement for this URL.
        # Corresponds to the JSON property `securityLevel`
        # @return [String]
        attr_accessor :security_level
      
        # Files served directly to the user for a given URL, such as images, CSS
        # stylesheets, or JavaScript source files. Static file handlers describe which
        # files in the application directory are static files, and which URLs serve them.
        # Corresponds to the JSON property `staticFiles`
        # @return [Google::Apis::AppengineV1beta::StaticFilesHandler]
        attr_accessor :static_files
      
        # URL prefix. Uses regular expression syntax, which means regexp special
        # characters must be escaped, but should not contain groupings. All URLs that
        # begin with this prefix are handled by this handler, using the portion of the
        # URL after the prefix as part of the file path.
        # Corresponds to the JSON property `urlRegex`
        # @return [String]
        attr_accessor :url_regex
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @api_endpoint = args[:api_endpoint] if args.key?(:api_endpoint)
          @auth_fail_action = args[:auth_fail_action] if args.key?(:auth_fail_action)
          @login = args[:login] if args.key?(:login)
          @redirect_http_response_code = args[:redirect_http_response_code] if args.key?(:redirect_http_response_code)
          @script = args[:script] if args.key?(:script)
          @security_level = args[:security_level] if args.key?(:security_level)
          @static_files = args[:static_files] if args.key?(:static_files)
          @url_regex = args[:url_regex] if args.key?(:url_regex)
        end
      end
      
      # A Version resource is a specific set of source code and configuration files
      # that are deployed into a service.
      class Version
        include Google::Apis::Core::Hashable
      
        # Google Cloud Endpoints (https://cloud.google.com/endpoints) configuration for
        # API handlers.
        # Corresponds to the JSON property `apiConfig`
        # @return [Google::Apis::AppengineV1beta::ApiConfigHandler]
        attr_accessor :api_config
      
        # Allows App Engine second generation runtimes to access the legacy bundled
        # services.
        # Corresponds to the JSON property `appEngineApis`
        # @return [Boolean]
        attr_accessor :app_engine_apis
        alias_method :app_engine_apis?, :app_engine_apis
      
        # Automatic scaling is based on request rate, response latencies, and other
        # application metrics.
        # Corresponds to the JSON property `automaticScaling`
        # @return [Google::Apis::AppengineV1beta::AutomaticScaling]
        attr_accessor :automatic_scaling
      
        # A service with basic scaling will create an instance when the application
        # receives a request. The instance will be turned down when the app becomes idle.
        # Basic scaling is ideal for work that is intermittent or driven by user
        # activity.
        # Corresponds to the JSON property `basicScaling`
        # @return [Google::Apis::AppengineV1beta::BasicScaling]
        attr_accessor :basic_scaling
      
        # Metadata settings that are supplied to this version to enable beta runtime
        # features.
        # Corresponds to the JSON property `betaSettings`
        # @return [Hash<String,String>]
        attr_accessor :beta_settings
      
        # Environment variables available to the build environment.Only returned in GET
        # requests if view=FULL is set.
        # Corresponds to the JSON property `buildEnvVariables`
        # @return [Hash<String,String>]
        attr_accessor :build_env_variables
      
        # Time that this version was created.@OutputOnly
        # Corresponds to the JSON property `createTime`
        # @return [String]
        attr_accessor :create_time
      
        # Output only. Email address of the user who created this version.@OutputOnly
        # Corresponds to the JSON property `createdBy`
        # @return [String]
        attr_accessor :created_by
      
        # Duration that static files should be cached by web proxies and browsers. Only
        # applicable if the corresponding StaticFilesHandler (https://cloud.google.com/
        # appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#
        # StaticFilesHandler) does not specify its own expiration time.Only returned in
        # GET requests if view=FULL is set.
        # Corresponds to the JSON property `defaultExpiration`
        # @return [String]
        attr_accessor :default_expiration
      
        # Code and application artifacts used to deploy a version to App Engine.
        # Corresponds to the JSON property `deployment`
        # @return [Google::Apis::AppengineV1beta::Deployment]
        attr_accessor :deployment
      
        # Output only. Total size in bytes of all the files that are included in this
        # version and currently hosted on the App Engine disk.@OutputOnly
        # Corresponds to the JSON property `diskUsageBytes`
        # @return [Fixnum]
        attr_accessor :disk_usage_bytes
      
        # Google Cloud Endpoints (https://cloud.google.com/endpoints) configuration. The
        # Endpoints API Service provides tooling for serving Open API and gRPC endpoints
        # via an NGINX proxy. Only valid for App Engine Flexible environment deployments.
        # The fields here refer to the name and configuration ID of a "service" resource
        # in the Service Management API (https://cloud.google.com/service-management/
        # overview).
        # Corresponds to the JSON property `endpointsApiService`
        # @return [Google::Apis::AppengineV1beta::EndpointsApiService]
        attr_accessor :endpoints_api_service
      
        # The entrypoint for the application.
        # Corresponds to the JSON property `entrypoint`
        # @return [Google::Apis::AppengineV1beta::Entrypoint]
        attr_accessor :entrypoint
      
        # App Engine execution environment for this version.Defaults to standard.
        # Corresponds to the JSON property `env`
        # @return [String]
        attr_accessor :env
      
        # Environment variables available to the application.Only returned in GET
        # requests if view=FULL is set.
        # Corresponds to the JSON property `envVariables`
        # @return [Hash<String,String>]
        attr_accessor :env_variables
      
        # Custom static error pages. Limited to 10KB per page.Only returned in GET
        # requests if view=FULL is set.
        # Corresponds to the JSON property `errorHandlers`
        # @return [Array<Google::Apis::AppengineV1beta::ErrorHandler>]
        attr_accessor :error_handlers
      
        # Runtime settings for the App Engine flexible environment.
        # Corresponds to the JSON property `flexibleRuntimeSettings`
        # @return [Google::Apis::AppengineV1beta::FlexibleRuntimeSettings]
        attr_accessor :flexible_runtime_settings
      
        # Additional Google Generated Customer Metadata, this field won't be provided by
        # default and can be requested by setting the IncludeExtraData field in
        # GetVersionRequest
        # Corresponds to the JSON property `generatedCustomerMetadata`
        # @return [Hash<String,Object>]
        attr_accessor :generated_customer_metadata
      
        # An ordered list of URL-matching patterns that should be applied to incoming
        # requests. The first matching URL handles the request and other request
        # handlers are not attempted.Only returned in GET requests if view=FULL is set.
        # Corresponds to the JSON property `handlers`
        # @return [Array<Google::Apis::AppengineV1beta::UrlMap>]
        attr_accessor :handlers
      
        # Health checking configuration for VM instances. Unhealthy instances are killed
        # and replaced with new instances. Only applicable for instances in App Engine
        # flexible environment.
        # Corresponds to the JSON property `healthCheck`
        # @return [Google::Apis::AppengineV1beta::HealthCheck]
        attr_accessor :health_check
      
        # Relative name of the version within the service. Example: v1. Version names
        # can contain only lowercase letters, numbers, or hyphens. Reserved names: "
        # default", "latest", and any name with the prefix "ah-".
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Before an application can receive email or XMPP messages, the application must
        # be configured to enable the service.
        # Corresponds to the JSON property `inboundServices`
        # @return [Array<String>]
        attr_accessor :inbound_services
      
        # Instance class that is used to run this version. Valid values are:
        # AutomaticScaling: F1, F2, F4, F4_1G ManualScaling or BasicScaling: B1, B2, B4,
        # B8, B4_1GDefaults to F1 for AutomaticScaling and B1 for ManualScaling or
        # BasicScaling.
        # Corresponds to the JSON property `instanceClass`
        # @return [String]
        attr_accessor :instance_class
      
        # Configuration for third-party Python runtime libraries that are required by
        # the application.Only returned in GET requests if view=FULL is set.
        # Corresponds to the JSON property `libraries`
        # @return [Array<Google::Apis::AppengineV1beta::Library>]
        attr_accessor :libraries
      
        # Health checking configuration for VM instances. Unhealthy instances are killed
        # and replaced with new instances.
        # Corresponds to the JSON property `livenessCheck`
        # @return [Google::Apis::AppengineV1beta::LivenessCheck]
        attr_accessor :liveness_check
      
        # A service with manual scaling runs continuously, allowing you to perform
        # complex initialization and rely on the state of its memory over time.
        # Corresponds to the JSON property `manualScaling`
        # @return [Google::Apis::AppengineV1beta::ManualScaling]
        attr_accessor :manual_scaling
      
        # Output only. Full path to the Version resource in the API. Example: apps/myapp/
        # services/default/versions/v1.@OutputOnly
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Extra network settings. Only applicable in the App Engine flexible environment.
        # Corresponds to the JSON property `network`
        # @return [Google::Apis::AppengineV1beta::Network]
        attr_accessor :network
      
        # Files that match this pattern will not be built into this version. Only
        # applicable for Go runtimes.Only returned in GET requests if view=FULL is set.
        # Corresponds to the JSON property `nobuildFilesRegex`
        # @return [String]
        attr_accessor :nobuild_files_regex
      
        # Readiness checking configuration for VM instances. Unhealthy instances are
        # removed from traffic rotation.
        # Corresponds to the JSON property `readinessCheck`
        # @return [Google::Apis::AppengineV1beta::ReadinessCheck]
        attr_accessor :readiness_check
      
        # Machine resources for a version.
        # Corresponds to the JSON property `resources`
        # @return [Google::Apis::AppengineV1beta::Resources]
        attr_accessor :resources
      
        # Desired runtime. Example: python27.
        # Corresponds to the JSON property `runtime`
        # @return [String]
        attr_accessor :runtime
      
        # The version of the API in the given runtime environment. Please see the app.
        # yaml reference for valid values at https://cloud.google.com/appengine/docs/
        # standard//config/appref
        # Corresponds to the JSON property `runtimeApiVersion`
        # @return [String]
        attr_accessor :runtime_api_version
      
        # The channel of the runtime to use. Only available for some runtimes. Defaults
        # to the default channel.
        # Corresponds to the JSON property `runtimeChannel`
        # @return [String]
        attr_accessor :runtime_channel
      
        # The path or name of the app's main executable.
        # Corresponds to the JSON property `runtimeMainExecutablePath`
        # @return [String]
        attr_accessor :runtime_main_executable_path
      
        # The identity that the deployed version will run as. Admin API will use the App
        # Engine Appspot service account as default if this field is neither provided in
        # app.yaml file nor through CLI flag.
        # Corresponds to the JSON property `serviceAccount`
        # @return [String]
        attr_accessor :service_account
      
        # Current serving status of this version. Only the versions with a SERVING
        # status create instances and can be billed.SERVING_STATUS_UNSPECIFIED is an
        # invalid value. Defaults to SERVING.
        # Corresponds to the JSON property `servingStatus`
        # @return [String]
        attr_accessor :serving_status
      
        # Whether multiple requests can be dispatched to this version at once.
        # Corresponds to the JSON property `threadsafe`
        # @return [Boolean]
        attr_accessor :threadsafe
        alias_method :threadsafe?, :threadsafe
      
        # Output only. Serving URL for this version. Example: "https://myversion-dot-
        # myservice-dot-myapp.appspot.com"@OutputOnly
        # Corresponds to the JSON property `versionUrl`
        # @return [String]
        attr_accessor :version_url
      
        # Whether to deploy this version in a container on a virtual machine.
        # Corresponds to the JSON property `vm`
        # @return [Boolean]
        attr_accessor :vm
        alias_method :vm?, :vm
      
        # VPC access connector specification.
        # Corresponds to the JSON property `vpcAccessConnector`
        # @return [Google::Apis::AppengineV1beta::VpcAccessConnector]
        attr_accessor :vpc_access_connector
      
        # The Google Compute Engine zones that are supported by this version in the App
        # Engine flexible environment. Deprecated.
        # Corresponds to the JSON property `zones`
        # @return [Array<String>]
        attr_accessor :zones
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @api_config = args[:api_config] if args.key?(:api_config)
          @app_engine_apis = args[:app_engine_apis] if args.key?(:app_engine_apis)
          @automatic_scaling = args[:automatic_scaling] if args.key?(:automatic_scaling)
          @basic_scaling = args[:basic_scaling] if args.key?(:basic_scaling)
          @beta_settings = args[:beta_settings] if args.key?(:beta_settings)
          @build_env_variables = args[:build_env_variables] if args.key?(:build_env_variables)
          @create_time = args[:create_time] if args.key?(:create_time)
          @created_by = args[:created_by] if args.key?(:created_by)
          @default_expiration = args[:default_expiration] if args.key?(:default_expiration)
          @deployment = args[:deployment] if args.key?(:deployment)
          @disk_usage_bytes = args[:disk_usage_bytes] if args.key?(:disk_usage_bytes)
          @endpoints_api_service = args[:endpoints_api_service] if args.key?(:endpoints_api_service)
          @entrypoint = args[:entrypoint] if args.key?(:entrypoint)
          @env = args[:env] if args.key?(:env)
          @env_variables = args[:env_variables] if args.key?(:env_variables)
          @error_handlers = args[:error_handlers] if args.key?(:error_handlers)
          @flexible_runtime_settings = args[:flexible_runtime_settings] if args.key?(:flexible_runtime_settings)
          @generated_customer_metadata = args[:generated_customer_metadata] if args.key?(:generated_customer_metadata)
          @handlers = args[:handlers] if args.key?(:handlers)
          @health_check = args[:health_check] if args.key?(:health_check)
          @id = args[:id] if args.key?(:id)
          @inbound_services = args[:inbound_services] if args.key?(:inbound_services)
          @instance_class = args[:instance_class] if args.key?(:instance_class)
          @libraries = args[:libraries] if args.key?(:libraries)
          @liveness_check = args[:liveness_check] if args.key?(:liveness_check)
          @manual_scaling = args[:manual_scaling] if args.key?(:manual_scaling)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @nobuild_files_regex = args[:nobuild_files_regex] if args.key?(:nobuild_files_regex)
          @readiness_check = args[:readiness_check] if args.key?(:readiness_check)
          @resources = args[:resources] if args.key?(:resources)
          @runtime = args[:runtime] if args.key?(:runtime)
          @runtime_api_version = args[:runtime_api_version] if args.key?(:runtime_api_version)
          @runtime_channel = args[:runtime_channel] if args.key?(:runtime_channel)
          @runtime_main_executable_path = args[:runtime_main_executable_path] if args.key?(:runtime_main_executable_path)
          @service_account = args[:service_account] if args.key?(:service_account)
          @serving_status = args[:serving_status] if args.key?(:serving_status)
          @threadsafe = args[:threadsafe] if args.key?(:threadsafe)
          @version_url = args[:version_url] if args.key?(:version_url)
          @vm = args[:vm] if args.key?(:vm)
          @vpc_access_connector = args[:vpc_access_connector] if args.key?(:vpc_access_connector)
          @zones = args[:zones] if args.key?(:zones)
        end
      end
      
      # Volumes mounted within the app container. Only applicable in the App Engine
      # flexible environment.
      class Volume
        include Google::Apis::Core::Hashable
      
        # Unique name for the volume.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Volume size in gigabytes.
        # Corresponds to the JSON property `sizeGb`
        # @return [Float]
        attr_accessor :size_gb
      
        # Underlying volume type, e.g. 'tmpfs'.
        # Corresponds to the JSON property `volumeType`
        # @return [String]
        attr_accessor :volume_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @size_gb = args[:size_gb] if args.key?(:size_gb)
          @volume_type = args[:volume_type] if args.key?(:volume_type)
        end
      end
      
      # VPC access connector specification.
      class VpcAccessConnector
        include Google::Apis::Core::Hashable
      
        # The egress setting for the connector, controlling what traffic is diverted
        # through it.
        # Corresponds to the JSON property `egressSetting`
        # @return [String]
        attr_accessor :egress_setting
      
        # Full Serverless VPC Access Connector name e.g. projects/my-project/locations/
        # us-central1/connectors/c1.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @egress_setting = args[:egress_setting] if args.key?(:egress_setting)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # The zip file information for a zip deployment.
      class ZipInfo
        include Google::Apis::Core::Hashable
      
        # An estimate of the number of files in a zip for a zip deployment. If set, must
        # be greater than or equal to the actual number of files. Used for optimizing
        # performance; if not provided, deployment may be slow.
        # Corresponds to the JSON property `filesCount`
        # @return [Fixnum]
        attr_accessor :files_count
      
        # URL of the zip file to deploy from. Must be a URL to a resource in Google
        # Cloud Storage in the form 'http(s)://storage.googleapis.com//'.
        # Corresponds to the JSON property `sourceUrl`
        # @return [String]
        attr_accessor :source_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @files_count = args[:files_count] if args.key?(:files_count)
          @source_url = args[:source_url] if args.key?(:source_url)
        end
      end
    end
  end
end
